11 comments

  • kepano1 hour ago
    I&#x27;m not sure why it popped up today, but it&#x27;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&#x2F;libraries built up around conversion, storage, and import&#x2F;export [2].<p>- 2026: Obsidian Skills [3] includes support for .canvas (along with .md and .base) to make it easy for LLMs to read&#x2F;write JSON Canvas, and opens interesting visualization&#x2F;interaction patterns with agents.<p>[0]: <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=34066824">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=34066824</a><p>[1]: <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=39670922">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=39670922</a><p>[2]: <a href="https:&#x2F;&#x2F;jsoncanvas.org&#x2F;docs&#x2F;apps&#x2F;" rel="nofollow">https:&#x2F;&#x2F;jsoncanvas.org&#x2F;docs&#x2F;apps&#x2F;</a><p>[3]: <a href="https:&#x2F;&#x2F;github.com&#x2F;kepano&#x2F;obsidian-skills" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;kepano&#x2F;obsidian-skills</a>
    • chrisweekly1 hour ago
      Hey thanks for [3] obsidian-skills, I&#x27;ve been using Obsidian for years and Claude for months and it&#x27;s time for them to meet! Stoked to check it out. :)
  • bryanrasmussen3 hours ago
    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:&#x2F;&#x2F;jsoncanvas.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;jsoncanvas.org&#x2F;</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&#x27;m wrong though but I would think I would go for something like <a href="https:&#x2F;&#x2F;github.com&#x2F;jsongraph&#x2F;json-graph-specification" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;jsongraph&#x2F;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&#x27;s wrong, and maybe I am just not seeing why this would be better than another solution.
    • kepano2 hours ago
      You can see the data it created. Just click &quot;Toggle output&quot; in the bottom right corner.
      • crazygringo1 hour ago
        Oh, thanks. Those buttons seem designed to be as inconspicuous as possible.<p>This just looks like a pretty normal homepage. It was not obvious to me <i>at all</i> that the homepage was an actual dynamically rendered canvas, as opposed to just canvas-&quot;themed&quot;.
      • bryanrasmussen2 hours ago
        ah ok, sorry about that. I didn&#x27;t really look at that part of the UI much, noticed it had some zoom stuff, noticed I couldn&#x27;t zoom normally and scroll to where I wanted to read, was somewhat miffed.
        • phatskat42 minutes ago
          Curious to know what “zoom normally” means for you. For me, it’s ctrl+mouse wheel or maybe two finger pinch&#x2F;pull on trackpad. I am thoroughly confused as to why GitHub’s mermaid integration doesn’t seem to support any zoom outside of the overlay controls which…ick
  • mort9649 minutes ago
    I feel like this page does a good job of telling me nothing. It&#x27;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?
    • kepano35 minutes ago
      Perhaps the home page is more useful than the spec to explain the purpose of the file format: <a href="https:&#x2F;&#x2F;jsoncanvas.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;jsoncanvas.org&#x2F;</a><p>See also the original inspiration for the format: <a href="https:&#x2F;&#x2F;obsidian.md&#x2F;canvas" rel="nofollow">https:&#x2F;&#x2F;obsidian.md&#x2F;canvas</a>
  • StilesCrisis33 minutes ago
    Why use this instead of SVG?
    • itishappy14 minutes ago
      It&#x27;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&#x27;re no longer creating portable SVG files, and if we&#x27;re going to create an SVG-like DSL we may as well try out this JSON-like DSL.
  • jessmartin32 minutes ago
    Really cool to see JSON Canvas getting attention. (Hi, kepano!) It was one of the inspirations for OCIF (Open Canvas Interchange Format), which we&#x27;ve been working on since JSON Canvas came out.<p>JSON Canvas nails the simplicity — it&#x27;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&#x27;s designed to be an interchange format — so different canvas tools (Excalidraw, TLDraw, Obsidian, etc.) can export&#x2F;import each other&#x27;s canvases.<p>Some highlights: - Extensible: apps can attach their own data via extensions, so nothing gets lost even if the features aren&#x27;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&#x27;t quite meeting your needs, OCIF[1] might be worth a look.<p><a href="https:&#x2F;&#x2F;canvasprotocol.org" rel="nofollow">https:&#x2F;&#x2F;canvasprotocol.org</a>
  • whycombinetor1 hour ago
    Previously posted in 2022 as Obsidian Canvas before being open sourced in 2024 <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=34066824">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=34066824</a>
  • obsidianbases11 hour ago
    I&#x27;ve used canvas quite a bit since it was release in Obsidian. It&#x27;s good, not great, but the simplicity of the file type opens up a lot of opportunities to build on top of it.
    • big_toast1 hour ago
      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&quot;+ non-retina 4k) screens. The simplicity at launch made me feel more confident in using them at all. I don&#x27;t use most of the other obsidian features&#x2F;plugins.
    • kepano1 hour ago
      What would make it great in your eyes?
      • bnj30 minutes ago
        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!
  • Garlef2 hours ago
    I&#x27;m not sure about this:<p>An &quot;infinite&quot; canvas without some notion of recursion such as viewports feels incomplete.
    • kepano1 hour ago
      A file node can be a .canvas, so a .canvas can have nested canvases.<p>Obsidian&#x27;s implementation of JSON Canvas supports this.
  • makeitrain3 hours ago
    Looks cool. I recently hit some limits with mermaid and this seems a little more flexible.
  • MoonWalk2 hours ago
    Are pixels really the best way to encode position at this point?
    • Garlef2 hours ago
      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&#x27;ll most likely need some programmatic environment to create non-trivial diagrams.<p>But then the question is: Why not just an SVG instead?
    • tkzed4937 minutes ago
      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&#x27;t render a canvas exactly&#x2F;consistently?
    • 9wzYQbTYsAIc1 hour ago
      I’m playing with 3d positions derived from higher dimensions, right now.