Show HN: TSDiagram – Diagrams as Code with TypeScript

(tsdiagram.com)

130 points | by _andrei_ 521 days ago

16 comments

  • girvo 521 days ago
    The web page doesn't work in Firefox :( Looks neat though, I checked it out on my phone. Right up my alley!

    The error it throws is:

        TypeError: WeakMap key must be an object, got Be
    • _andrei_ 521 days ago
      Yes, sorry, I made a terrible mistake in not testing my state management monstrosity lib in Firefox... Should be working now!
      • whilenot-dev 521 days ago
        Works for me on Firefox/Linux, thanks!
      • danmur 520 days ago
        Thank you :)
  • graup 520 days ago
    Pretty neat! I appreciate the time that went into making the graph render nicely.

    I was recently having fun with Reactflow myself. It took a bit of time to figure out custom nodes and edges. I found that ELK 'layered' (with some tweaking of settings) produces very nice layouts, but of course, we can't use its edge routing in real time if we want to allow users to move nodes around. Thanks for pointing me to @tisoap/react-flow-smart-edge ! I also came up with a similar `wasManuallyMoved` logic. https://github.com/3rd/tsdiagram/blob/66b186e85bf176e47128d0...

    Reactflow's docs have a decent example for using ELK but I wish it went into a bit more detail regarding these choices.

    For tweaking ELK settings, this online editor is also super valuable: https://rtsys.informatik.uni-kiel.de/elklive/elkgraph.html?c...

    • _andrei_ 520 days ago
      Glad we share the same pain! I'm not happy with the edge routing, it's ok in most cases, but it could be so much better. It's definitely where most of the upcoming development time will go. I'll bite the bullet and make something custom with what I can learn from react-fow-smart-edge and https://medium.com/swlh/routing-orthogonal-diagram-connector..., I really really want the edges not to overlap, but be a bit spaced out, so it's clear where each one goes.
  • fron 520 days ago
    That's super cool! Is there a way to save the editor and diagram state into a URL hash so we can share tsdiagram links with others, similar to how the TypeScript Playground works?
    • _andrei_ 519 days ago
      Added now, thanks for the idea!
  • yasuocidal 521 days ago
    Wonderful tool! Reminds me of dbdiagram[1] we use at a project of mine, but that one is kinda slow and sometimes messes up the organization just because it felt like it.

    Do you have plans on having something like export to SQL or import from SQL?

    [1]https://dbdiagram.io/

    • _andrei_ 520 days ago
      Shouldn't be hard to do both things, will def. add that. Part of the plan is to switch to Tree-sitter and use other languages as well.
    • karmakaze 520 days ago
      Yes I like dbdiagram.io and it's great that we can get something that's more flexible that works the same way.
  • _andrei_ 521 days ago
    Firefox update: fixed the issue, guess that's what you get if you roll your own store.
  • hbcondo714 521 days ago
    Thanks for sharing! I generated a png and added it to my repo's wiki with an acknowledgment to your repo:

    https://github.com/hbcondo/revenut-app/wiki#data-models

    • _andrei_ 521 days ago
      Happy you like it, no need for any kind of attribution! Will add proper SVG export soon (without foreignObject), it will be much better after that.
  • starf1sh 521 days ago
    One of those "wonder why nobody's thought about this" tools. Awesome idea!
  • tanepiper 521 days ago
    This is actually really nice! We deal with a lot of types - from our headless CMS, GraphQL, Knowledge Graph, etc - so having a visual tool for them help - typescript was the one area missing for it.

    Now if it can be exported as RDF or Cypher...

  • yodon 521 days ago
    Having just done a bunch of Mermaid diagrams this looks very cool. I particularly like having the freedom to drag nodes around in yours to improve the layout.

    Is there a way to turn off the dot grid?

    • _andrei_ 521 days ago
      Will add a background switcher!
  • raselhanout 520 days ago
    This is wonderful! We also use typescript to define our data/database structure for our non-ts projects and this could be a very handy tool. I will definitely use it whenever I get a chance to.

    One thing that could be improved are the overlapping lines. In the example, the Node->Node and Node->Task lines are undistinguishable.

  • throwitaway222 521 days ago
    Completely blank in firefox
  • 20after4 521 days ago
    Since the page doesn't actually work, here's the repo: https://github.com/3rd/tsdiagram
  • vanjajaja1 521 days ago
    I like it. I feel like I needed something like this recently but can't remember why. Not sure when I'll need this, but nice to have in the toolbelt.
  • quackware 521 days ago
    Why is `Record<string, unknown>` converted to `Map<string, unknown>` in the diagram?
    • _andrei_ 521 days ago
      The label formatter doesn't preserve type, turns Record, Map, WeakMap into Map. Will fix, it's a small change.
  • adriannistor 520 days ago
    Top tool, will be really helpful to vizualize data, gz
  • inshadows 520 days ago
    [dead]