170 pointsby robhati8 hours ago16 comments
  • clutter55561a minute ago
    Great stuff, well done and super useful!
  • michaelmior39 minutes ago
    The tool looks very cool! But IMO you can't get an ER diagram from SQL since entities are fundamentally different from tables. They are certainly very similar, but SQL alone doesn't give you enough information to create an ER diagram.

    That's not to say that the tool is useless or that diagrams of this sort are unhelpful. I'll admit I'm being pedantic and others will probably disagree.

    • ezst16 minutes ago
      > entities are fundamentally different from tables

      Isn't the fact that they are _mostly_ interchangeable the foundational principle of hundreds of ORMs? Of course the DDL doesn't say much about the entity's lifecycle, but if the bar is set at representing its relationships, fields and cardinality as a graph, it seems sufficient?

  • written-beyond5 hours ago
    100/10 for mobile usability. Panning, Zooming, selecting and moving was so seamless I thought I was tripping out.
    • lelanthran4 hours ago
      > 100/10 for mobile usability. Panning, Zooming, selecting and moving was so seamless I thought I was tripping out.

      Yeah, my first thought was that the diagramming bit needs to be ripped out into its own library, because I can see a use for the diagramming bits for more than ER diagrams.

    • Galanwe5 hours ago
      That's really good yes, even double tapping editing does not reset the zoom level. Definitely one of the best mobile friendly site I have seen.
      • sixtyj4 hours ago
        This. Author(s) did the homework.
    • CraigJPerry2 hours ago
      The whole code base is a breath of fresh air to be honest: https://github.com/royalbhati/sqltoerdiagram/blob/main/src/m...

      Author is top notch in my book. I'm a sucker for someone taking a complex problem and distilling out a simple solution. I don't know of higher praise to give a developer.

  • Igor_Wiwian hour ago
    btw did you know that ER diagrams are supported by Mermaid diagrams: https://mdview.io/mermaid?example=working-er It's not that pretty as in your app, but it does the work
  • robhati6 hours ago
    It's a small too nothing great I just figured others might find it useful too. I kept finding myself needing to visualize database schemas, but most tools had the same problems: paywalls, mandatory signups, or sending your SQL to someone else's server.

    No backend, no accounts, no data leaving your machine.

    A few implementation details that were fun:

    * Built on <canvas> instead of DOM/SVG. Tables are rasterized into cached bitmaps with viewport culling, which keeps things smooth even with hundreds of tables on screen.

    * The SQL parser tracks source spans for every token. That lets edits stay surgical so a rename a table and only the relevant identifier (and its references) change while comments and formatting remain untouched.

    * The URL contains the entire schema. Sharing simply serializes the schema into the URL itself, so there's no backend, no stored state, and no account required.

    * I also experimented with a Rust/WASM version because why not? but the parser was ~37% slower because the JS↔WASM boundary cost outweighed the compute savings but The O(n^2) overlap-resolution pass was about 2.2x faster though * In the end I stuck with plain JavaScript. No framework ~32KB gzipped

    • Hendrikto2 hours ago
      > The URL contains the entire schema.

      Isn’t that going to be a problem due to the URL length limitations?

      > It is RECOMMENDED that all senders and recipients support, at a minimum, URIs with lengths of 8000 octets in protocol elements.

      https://www.rfc-editor.org/rfc/rfc9110#section-4.1-5

      • johndough2 hours ago
        Probably not that important in practice. Firefox allows 2^20 - 4 and Chrome allows 2100000 characters. Also, 8000 characters already allows for an unreasonable amount of SQL and could be extended even further with compression. And if that should not be enough, the website already supports JSON exports. All in all, this seems like a worthwhile tradeoff for not having to store anything.
    • __natty__3 hours ago
      Truely good work! It’s responsive, clean and “onboarding” experience without signup walls is great. Good job.
  • corkybeta6 hours ago
    Could we have the option of straight lines and 90 degree angles? I’ve never really liked the bendy ones. Looks cool, good job!
    • robhati4 hours ago
      Thanks and I will add this to my todos!
      • ffsm82 hours ago
        A few years ago I created a similar layout engine, it was extremely janky when I abandoned it because I first wanted to solve order/placing of the tiles but was unable to figure out a good algorithm for it

        Eg your example diagram has an optimal order in which there are no overlapping lines... But it's surprisingly hard to figure that out without doing n^m calculations... And I wanted to use it in a game, so a shitton of tiles.

        Dunno where I was going with this, just got reminded of that project after looking at this great implementation.

        It also reminded me of the xyflow lib

        • johndough2 hours ago
          In academia, this is called "planar embedding" and can be computed in O(V) where V is the number of vertices of the graph.

          However, there are graphs that do not allow planar embeddings (e.g. K_5 or K_3,3, see https://en.wikipedia.org/wiki/Planar_graph).

          In this case, you'll probably want to look into heuristics that produce a low number of crossings and little distortion when new vertices are added.

  • ktzar2 hours ago
    Such an old problem solved very elegantly. Congrats. Remember the days of MySQL Workbench and how clunky it was.
    • graemepan hour ago
      DBeaver does a good job of this and works with most databases. I would not use MySQL Workbench or PGAAdmin now.

      This might be a good implementation but is it not easier to use something that can connect to your database than having to copy and paste chunks of SQL?

  • henryecw20 minutes ago
    Looks great, I’ll use this next week :p
  • WhyIsItAlwaysHN4 hours ago
    Maybe you can support schemas in more dialects by using a similar approach to a little tool I made: sqlscope.netlify.app

    Basically integrate sqlglot to translate the schema between dialects and then use a base dialect for generating the schema.

    The two tools seem complementary and you seem to be a better designer, so it would be nice to see it all together

  • rognjen3 hours ago
    There's also Azimutt: https://azimutt.app/gallery
    • wateraliena few seconds ago
      You have linked to a paid, closed-source product. There are hundreds. OP has shared a free and open-source project.
  • agentic_vector6 hours ago
    I was looking for it, thanks! Great work!
  • _f1ou6 hours ago
    The GitHub link takes you to the front page of GitHub instead of the actual project.
    • serious_angel6 hours ago

         Just to clarify, what link is it?  
         I've check it out, and the GitHub icon, in the header on the top right corner, is correct, and links to the following project:  
         - https://github.com/royalbhati/sqltoerdiagram
      • robhati6 hours ago
        I have just updated it. He was right to point that out.
    • robhati6 hours ago
      updated thanks.
  • linzhangrunan hour ago
    nice!
  • John_Kwick5 hours ago
    Okay thats pretty cool. Nice job!
  • robhati8 hours ago
    I kept finding myself needing to visualize database schemas, but most tools had the same problems: paywalls, mandatory signups, or sending your SQL to someone else's server.

    So I ended up building my own.

    You paste in your CREATE TABLE statements and it generates an interactive ER diagram right in the browser. You can drag tables around, auto arrange the layout, edit table/column names directly on the canvas (it rewrites the SQL for you), add notes and group boxes, and export as PNG or SVG.

    No backend, no accounts, no data leaving your machine.

    A few implementation details that were fun:

    * Built on <canvas> instead of DOM/SVG. Tables are rasterized into cached bitmaps with viewport culling, which keeps things smooth even with hundreds of tables on screen.

    * The SQL parser tracks source spans for every token. That lets edits stay surgical so a rename a table and only the relevant identifier (and its references) change while comments and formatting remain untouched.

    * The URL contains the entire schema. Sharing simply serializes the schema into the URL itself, so there's no backend, no stored state, and no account required.

    * I also experimented with a Rust/WASM version because why not? but the parser was ~37% slower because the JS↔WASM boundary cost outweighed the compute savings but The O(n^2) overlap-resolution pass was about 2.2x faster though * In the end I stuck with plain JavaScript. No framework ~32KB gzipped

    It's a small too nothing great I just figured others might find it useful too.

    • dickiedyce2 hours ago
      Small? Yes, but perfectly formed!

      (Only minor tweak one could suggest would be multiple table selection for dragging... but to quote Frasier: "Think about it, Niles. What's the one thing better than an exquisite meal? An exquisite meal, with one tiny flaw we can pick at all night." Niles, raising a glass: "Ah, of course, to impossible standards.")

  • 6 hours ago
    undefined