TableFlip - Markdown Table Editor for macOS

TableFlip’s interface for visual Markdown table editing at launch in 2016 and in 2024

The Context

TableFlip emerged from a personal frustration: editing tables in Markdown is painful. As someone who writes technical documentation regularly, I needed a visual table editor that respected Markdown’s simplicity while providing a spreadsheet-like interface.

Released in 2017 and continuously maintained, TableFlip represented a significant step up in complexity from Word Counter. This was a document-based application (NSDocument) that needed to handle file changes on disk, multiple windows, and much more sophisticated user input – far beyond Word Counter’s isolated operation with occasional events. I wanted to apply everything I’d learned, but do it better, faster, and more robustly.

Technical Challenges

Bidirectional Markdown Parsing

Modular Architecture at Scale

Building on the modular approach I developed with Word Counter, TableFlip took this even further with multiple framework targets within the app itself. Each major feature lived in its own framework:

This extreme modularity meant I could develop and test each piece in complete isolation, often building UI components as standalone mini-apps before integrating them. This “late integration” philosophy ensured true independence and reusability.

Unidirectional Data Flow

Document-Based Complexity

As an NSDocument-based application, TableFlip had to handle:

File Format Support

Team Dynamics

For the first seven years (2016–2023), TableFlip was purely a solo effort. These years weren’t about reinventing my workflow but about accelerating development and performing at higher standards, in a more complex setting than my previous app.

Then in late 2023, I had the opportunity to bring in Marin Todorov when he was between jobs. I’d always enjoyed Marin’s work and personality, so when the timing aligned, I hired him to help with features and updates I couldn’t attend to while deep in The Archive development.

This was significant: it was one of the few times I hired someone and paid them out of my own pocket to work on my apps. The collaboration was a joy – Marin could find his way around the codebase easily, understood the architecture, and genuinely enjoyed working with it. The dynamic was effortless; things just happened on their own without friction, and since he’s such a Markdown nerd, he came up with the weirdest of ideas for the future.

Beyond just getting features shipped, this validated years of architectural decisions. When an experienced developer like Marin tells you the codebase is a joy to work with, you know the modular approach paid off.

Personal Reflections

TableFlip was my first exploration of unidirectional data flow architecture. Coming from MVVM, ReSwift felt revolutionary – everything became easier to track, features easier to add, and the whole app more predictable and understandable. With my focus on maintainable software, this was a win.

The project also taught me about finding and serving a niche. TableFlip isn’t for everyone, but for those who need it, it’s indispensable. This focused approach made marketing easier and support manageable.

But perhaps the most validating moment came when Marin joined the project. His genuine enjoyment working with the codebase – and I know he wouldn’t have lied to spare me – confirmed that all those years of careful modular architecture, and the occasional slip into imperfection, weren’t just academic exercises. The maintainability and clarity he experienced proved that good architecture matters, especially when you’re not the only one touching the code.

Impact

TableFlip has become an essential tool for:

The app proved that even simple, focused tools can find a niche on the Mac platform.

More importantly, the successful collaboration with Marin validated my architectural philosophy. The fact that an experienced developer could jump in, be productive immediately, and genuinely enjoy the experience proved that investing in clean, modular architecture pays dividends – not just for solo development, but for sustainable software that others can understand and extend. This experience gave me confidence that my apps could outlive my direct involvement if needed.