Free SQL→ER diagram tool, runs in the browser, nothing uploaded (sqltoerdiagram.com)
312 points by robhati 14 hours ago
michaelmior 7 hours 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.
ezst 7 hours 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?
frollogaston an hour ago
ORMs are on a poor foundation. But I don't see the problem with this tool, it's just showing the tables.
manoDev 3 hours ago
To make parent’s point more exact: from Chen’s definition, these ER diagrams derived from SQL are the “physical” (most low-level) diagrams, you cannot recreate the “logic” or “conceptual” diagrams from it.
I guess nowadays few people care about this difference.
marcosdumay 21 minutes ago
Few people ever cared about the difference.
thunderbong 32 minutes ago
Can you please elaborate? My understanding was that entities always have a 1:1 relationship with tables.
An example would be really helpful.
systems 3 hours ago
the use case for sql to er, is to study a database new to you
so the db already exist, but they have no er, and maybe even little docs
so it act more like an exploratory tool, ideally, it should allow you to create views and add notes, so you dont have to look at the full er at once, especially if the number of table is huge, and if many of those tables are missing foreign keys
jitl 3 hours ago
> entities are fundamentally different from tables
one man’s simplicity is another man’s headache
written-beyond 12 hours ago
100/10 for mobile usability. Panning, Zooming, selecting and moving was so seamless I thought I was tripping out.
lelanthran 10 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.
Galanwe 11 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.
sixtyj 11 hours ago
This. Author(s) did the homework.
CraigJPerry 9 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.
ronbenton 5 hours ago
For a hot second I thought we were looking at glorious jquery until I saw this line at the top
const $ = (id) => document.getElementById(id);
elias1233 4 hours ago
The only thing is that it zooms in on safari mobile when pressing a text field, but that problem is unanimous
robhati 12 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
Hendrikto 9 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.
johndough 8 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__ 9 hours ago
Truely good work! It’s responsive, clean and “onboarding” experience without signup walls is great. Good job.
throwatdem12311 5 hours ago
Reminds me of: https://explain.dalibo.com/
For visualizing query plans. One of the most useful tools for optimizing sql queries I’ve ever used.
Just make sure to download the fully offline v2 version at the bottom if you want to use it with anything sensitive.
corkybeta 12 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!
robhati 10 hours ago
Thanks and I will add this to my todos!
ffsm8 9 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
johndough 8 hours ago
tharkun__ 5 hours ago
jeffreygoesto 5 hours ago
petilon 4 hours ago
Nice, but there is no LICENSE file in the github: https://github.com/royalbhati/sqltoerdiagram
mingodad 4 hours ago
I'm using https://github.com/ondras/wwwsqldesigner and I think that's worth taking it in account for comparison.
Kuyawa 3 hours ago
The same Ondras from V8CGI? I loved that project, one of the first server side JS implementations. Perhaps I was the only follower? Hey, Ondřej, loved your work!
Igor_Wiwi 8 hours 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
hoofedear 6 hours ago
This is cool! I made something similar a little while ago that I’ve been touching up here and there. You can’t export to any SQL but I just wanted a tool I can use to diagram tables: https://datagram.studio
Edit: should clarify mine is also free! It’s quite specific to my needs but I’m happy with it
CodesInChaos 5 hours ago
Is there a way to hide connections to specific tables? Or alternatively filter out foreign keys by name.
For example in a multi-tenant application 90% of tables will link to the tenant table, but those links add little value to the viewer, so hiding these would be nice.
osrec 6 hours ago
Have only had a quick look at it, but it looks very nicely done! Out of interest, did you use AI to assist with development? If yes, what percentage of the code would you say is AI generated vs conventional?
giovannibonetti 5 hours ago
Given that it has only two commits, where the first one is just "done", I would guess a substantial amount.
1dontnkow_ 4 hours ago
Yes but I have also coworkers who implement a full feature then remember to commit it, so we cant know for sure if its just that.
ktzar 8 hours ago
Such an old problem solved very elegantly. Congrats. Remember the days of MySQL Workbench and how clunky it was.
Alifatisk 6 hours ago
> Remember the days of MySQL Workbench and how clunky it was
I loved MySQL Workbench, but it had its faults. Is there any equivalent alternative today? I've dreamed about an app that fuses MySQL Workbench + real-time collaboration, so I can share the same workspace with others in the team and see what others are are up to and collaborate on things.
estetlinus 4 hours ago
VSC with dbt Fusion, or Datagrip maybe? I used SQL workbench once and it felt like a time capsule. It was impossible to navigate without mouse.
graemep 8 hours 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?
WhyIsItAlwaysHN 11 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
flojo 5 hours ago
Great tool Thanks for this. Please consider "keeping it going"
swatiahuja 6 hours ago
good work, I was really in need of something like this to visualise my schemas
rognjen 10 hours ago
There's also Azimutt: https://azimutt.app/gallery
wateralien 6 hours ago
You have linked to a paid, closed-source product. There are hundreds. OP has shared a free and open-source project.
clutter55561 6 hours ago
Great stuff, well done and super useful!
mehtablr 4 hours ago
Its there already as dbdiagram, what's new?
thisislife2 4 hours ago
What's new is that this isn't "dbdiagram" - it's good to have alternatives and even competing products.
ahmdnassir1 6 hours ago
This is cool! People actually need sthng like this.
agentic_vector 12 hours ago
I was looking for it, thanks! Great work!
henryecw 7 hours ago
Looks great, I’ll use this next week :p
_f1ou 13 hours ago
The GitHub link takes you to the front page of GitHub instead of the actual project.
serious_angel 13 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/sqltoerdiagramrobhati 13 hours ago
I have just updated it. He was right to point that out.
robhati 13 hours ago
updated thanks.
John_Kwick 12 hours ago
Okay thats pretty cool. Nice job!
linzhangrun 8 hours ago
nice!
robhati 14 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.
dickiedyce 8 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.")
freeopinion 5 hours ago
There's an endless list of improvements on a project like this.
- Dragging a group should also drag the tables within the group.
- It would be nice to be able to drag relationship lines to reshape their curves around other tables.
But what is here now is so well crafted that it feels uncomfortable asking for features without acknowledging how impressive it already is.