InfiniteCanvas – Vector Drawing App Concept

I have no clue how you create drawing apps. I guess your primary concern is low latency and good-looking results rather than making the most of cool new architecture patterns like VIPER. It's a real-time thing. Not unlike games, I imagine. Still, "in between years" (between Christmas and New Year; but I like the literal German translation), I took a day or two to come up with a conceptual implementation (MIT licensed).

I use a WACOM Intuous pen tablet (affiliate link) instead of a trackpad or mouse most days. I fell in love with the quality of WACOM tablets some 10 years ago and never want to miss one of these things again for sketching ideas and drawing diagrams. With the digital pen, I can replace most of the scribbling I do to facilitate thinking when I'm programming. I create quick sketches of class hierarchies to see where refactoring might help. I hand-draw collaboration diagrams and sequence diagrams to get a feeling for the runtime processing of data.

And now I want a slick app that can pan and zoom infinitely.

prototype screenshot
Screenshot of a working but incomplete prototype

So I set out to create it myself. Without any prior knowledge of how drawing applications work. (Hard to find a tutorial for that, too!)

My observations so far:

So you're very welcome to contribute to the project if you want to experiment with a simple drawing app! Once I got past the initial hurdles, all of the remaining steps seem to be very straight-forward. I created GitHub issues for most of the things that need to get done already.

Until the app is ready, I'm using a cross-platform drawing app for artists, by the way, called Mischief. It's on the Mac App Store, too. It works pretty well for what I want to do, but it can only save the drawing as a rasterized image. Also, I don't like locking people into data silos and proprietary file formats.

I'd like to make InfiniteCanvas SVG-based for maximum compatibility with other vector drawing software. That's part of my general attitude that is best described as a "software-agnostic programming" approach, a monicker by my friend and Zettelkasten co-author Sascha. It means that good software should make itself irreplaceable through quality while giving the user maximum power over the data. Locking people in by design is a sign of weakness. That's why plain text writing apps are morally superior. Same for SVG. Open formats, rule the world! ✊

Browse the blog archive