CodeCanvas: from file watcher to virtual data sources
TypeScriptLanguage Server Protocol (LSP)AST parsingVS Code extension APIs
The product
CodeCanvas renders an entire codebase on an interactive canvas — files organized by dependencies and folder structure, with “syntactic zoom”: structural summaries when zoomed out, full code when zoomed in. I joined for a four-month stint in late 2025 to take on the backend side.
The constraint baked into the core
The original architecture was a VS Code extension built around a file watcher: the canvas could only visualize code on the local disk, and the parsing pipeline assumed JavaScript/TypeScript throughout. The two most requested capabilities — reviewing pull requests on the canvas, and supporting more languages — were architecturally impossible, not merely unimplemented.
The rewrite
I rearchitected the core around virtual data sources: everything that could vary by context — how files are enumerated, how content is loaded, how ASTs are produced, which language services answer queries — went behind interfaces, the file watcher becoming one implementation among several (local workspace, pull request, demo content; TypeScript, C#, PHP, Python).
On that foundation I built the full PR-review experience — loading a pull request as a data source and inspecting its changes in context on the canvas — and added Python and C# language support, working end-to-end.
How it ended
I exited in December 2025 before this work shipped publicly. The architecture lesson stands: find the assumption hard-wired through the core, abstract it once, and entire categories of “impossible” features become straightforward.