I'm not sure why it popped up today, but it's nice to see it on HN again! A brief timeline with some links to past discussions:<p>- 2022: The .canvas open format was created for Obsidian Canvas [0].<p>- 2024: Official 1.0 spec of JSON Canvas [1].<p>- 2024-2025: A number of apps/libraries built up around conversion, storage, and import/export [2].<p>- 2026: Obsidian Skills [3] includes support for .canvas (along with .md and .base) to make it easy for LLMs to read/write JSON Canvas, and opens interesting visualization/interaction patterns with agents.<p>[0]: <a href="https://news.ycombinator.com/item?id=34066824">https://news.ycombinator.com/item?id=34066824</a><p>[1]: <a href="https://news.ycombinator.com/item?id=39670922">https://news.ycombinator.com/item?id=39670922</a><p>[2]: <a href="https://jsoncanvas.org/docs/apps/" rel="nofollow">https://jsoncanvas.org/docs/apps/</a><p>[3]: <a href="https://github.com/kepano/obsidian-skills" rel="nofollow">https://github.com/kepano/obsidian-skills</a>
It would be useful to have examples of data and the representation this would result in.<p>Although you can go to <a href="https://jsoncanvas.org/" rel="nofollow">https://jsoncanvas.org/</a> itself and see an example rendering, you cannot see the exact data that created it - I think, although you can sort of guess since the element names are stuff like node.<p>I sort of doubt this is the best data structure for representing this kind of thing. Maybe I'm wrong though but I would think I would go for something like <a href="https://github.com/jsongraph/json-graph-specification" rel="nofollow">https://github.com/jsongraph/json-graph-specification</a> which strikes me as closer to graphml which I have some experience with, and maybe give it ability to embed videos etc. (which for all I know someone already has)<p>This is all an initial feeling though, like hmm, no I think it's wrong, and maybe I am just not seeing why this would be better than another solution.
I feel like this page does a good job of telling me nothing. It's a representation of a graph? Where each node can be a text string or a file or a URL or a container of other nodes? And somehow these links and files and containers have a color? What is the purpose of this? Why would I want my file to be blue?
Why use this instead of SVG?
It's interactive, for starters. You can do that with SVG, of course, but the boilerplate required would be larger than the `.canvas` file. You can externalize the boilerplate, but then you're no longer creating portable SVG files, and if we're going to create an SVG-like DSL we may as well try out this JSON-like DSL.
Really cool to see JSON Canvas getting attention. (Hi, kepano!) It was one of the inspirations for OCIF (Open Canvas Interchange Format), which we've been working on since JSON Canvas came out.<p>JSON Canvas nails the simplicity — it's easy to read and easy to implement. We wanted to build on that spirit while tackling some of the challenges showing up in this thread: nested canvases, extensibility for custom app data, text styling, coordinate systems, and round-tripping between different canvas apps without data loss.<p>OCIF v0.7.0 just came out. It's designed to be an interchange format — so different canvas tools (Excalidraw, TLDraw, Obsidian, etc.) can export/import each other's canvases.<p>Some highlights:
- Extensible: apps can attach their own data via extensions, so nothing gets lost even if the features aren't supported
- Nested canvases via parent-child node relationships
- Local coordinate systems (addresses the pixel positioning concerns raised in another comment here)
- Text styling, viewport control, and more via built-in extensions<p>If JSON Canvas isn't quite meeting your needs, OCIF[1] might be worth a look.<p><a href="https://canvasprotocol.org" rel="nofollow">https://canvasprotocol.org</a>
Previously posted in 2022 as Obsidian Canvas before being open sourced in 2024 <a href="https://news.ycombinator.com/item?id=34066824">https://news.ycombinator.com/item?id=34066824</a>
I've used canvas quite a bit since it was release in Obsidian. It's good, not great, but the simplicity of the file type opens up a lot of opportunities to build on top of it.
It took me a while to start using canvases. But now I think they should be a much more common UI pattern. They really shine on large (40"+ non-retina 4k) screens. The simplicity at launch made me feel more confident in using them at all. I don't use most of the other obsidian features/plugins.
What would make it great in your eyes?
Not OP, but I use canvas all the time (Thank you!) in preference to something like Miro because I really value the open format and being able to keep the file. Something that really holds me back is the inability to use different shapes for the nodes - a use case for me is creating flow charts and process diagrams, so being unable to use the standard shapes for those is a challenge.<p>Still the best option though!
I'm not sure about this:<p>An "infinite" canvas without some notion of recursion such as viewports feels incomplete.
Looks cool. I recently hit some limits with mermaid and this seems a little more flexible.
Are pixels really the best way to encode position at this point?
Agreed.<p>The upside is that it does not leave the most important aspect open to interpretation.<p>But it prevents this from being text-only at the point of creation:<p>You'll most likely need some programmatic environment to create non-trivial diagrams.<p>But then the question is: Why not just an SVG instead?
It strikes me as odd that boxes are placed precisely using pixels, but the size of text is not specified, as far as I can tell. So you use real pixels to specify boxes, but still can't render a canvas exactly/consistently?
I’m playing with 3d positions derived from higher dimensions, right now.