fuelen

fuelen

Hi all!

I want to present a small library which provides a mix task for generating an Entity-Relationship Diagram for Ecto schemas.
You can check examples of output for a couple of open-source projects in docs or directly on GitHub.

Links:

Showing Posts 13 to 4

fuelen

fuelen OP

Ecto ERD v0.8.0 is out! :tada:

Highlights:

  • New D2 output format
  • Reworked docs a bit
Eiji

Eiji

I think working with that table is bad practice. First of all ecto rely on it, so developer should not:

  1. modify existing columns
  2. remove table
  3. add/modify/remove any rows

I don’t also see how other libraries are gonna using it and what’s more important is that schema_mirations is not documented anywhere in ecto and ecto_sql hex documentation (there is only schema_miration option in Repo callback). I would say that using schema_mirations table in any way is like using a private API.

Yeah, I completely forgot about that :sweat_smile: In that case it should be in new line under Module.Name.

In my personal opinion the diagram is the most clear. It’s not like that from very start I liked the arrows (maybe legend for them?) or colors, but I was used to it very quickly.

Yes, I also reminded that there could be for example .Schema suffix, so it’s better to make it easily configurable.

Ok, after modifications this is what I have in mind:

MyContext.MySchema
my_schema.my_table
id : id
assoc_field (assoc_field_id) : id (foreign_key_id)
string_field (legacy_string_field_source) : string
integer_field : int

If we could make DOT layout looks like PlantUML image then yes - with field connection it would be even more amazing and we do not need to note foreign_key_id then.

Generally I would like to use such graphs to show other people context about planned API (context + module) and database structure (source fields). This is why for example MyApp is completely not needed and so on …

fuelen

fuelen OP

Thank you for detailed feedback!

Sounds reasonable, but if there is an app that works with this table somehow, then we’d have to add more options to show the schema again. As for now, it can be easily removed using config file:

[
  map_node: fn
    %{source: "schema_migrations"} -> nil
    node -> node
  end
]

Primary keys are not required. Seems like you just want to see a table name. I think there are better ways of doing this, like add one more row which shows schema prefix and table name.

It is a bit noisy. The downside of PlantUML is that it doesn’t support precise connections between fields (using arrows), as it is done in our dot renderer.
What do you like in PlantUML the most? AFAIK, it uses Graphviz under the hood, and maybe we can modify/add an option to our dot renderer to have similar experience.

That’s a good idea to have an ability to format module name, but definitely not by default, as such names can overlap.

Eiji

Eiji

Looks awesome. Going to test it soon. Thanks!

Edit: Just tried all formats and my favourite one is PlantUML as it’s generating best graph images.

I would like to suggest small changes:

  1. By default do not include migrations schema as it’s used only by ecto internally
  2. Can you change the id to something like: id : id (schema_name.table_name) (as passed to schema macro)?
  3. Can you also change other id fields to something like field_name : id (schema_name.table_name.foreign_key_field_name)
  4. Could you by default use last 2 parts of Elixir module, so we have just short MyContext.MySchema instead of MyApp.MyContext.MySchema?

So for example instead of:

MyApp.MyContext.MySchema
id : id
source_field_id : id
string_field : string

we would have:

MyContext.MySchema
id : id (public.my_table_name)
assoc_field : belongs to (public.my_another_table_name.source_field_id)
string_field : string
Nezteb

Nezteb

Just used this for a take-home coding assessment where I’m asked to dissect an existing Ecto schema and fix some related tests.

This lib and the ERD it generated were extremely helpful. Thank you for building this!

fuelen

fuelen OP

Added Mermaid support in version 0.5.0 :partying_face:

fuelen

fuelen OP

Added PlantUML support in version 0.4.0 :partying_face:

webuhu

webuhu

Very cool. Thanks a lot.
It could probably replace ERAlchemy the tool I’m still using for this kind of documentation task.

jc00ke

jc00ke

@fuelen thank you so much! I just used Ecto.ERD and it worked nicely.

fuelen

fuelen OP

Added QuickDBD support in version 0.3.0

Where Next? Top

Trending in Announcing Top

restlessronin
The repo is at GitHub - cyberchitta/openai_ex: Community maintained Elixir library for OpenAI API · GitHub. Docs are at OpenaiEx User Gu...
152 12366 136
New
type1fool
WebAuthnLiveComponent WebAuthnComponents See this post about renaming the package. Passwordless authentication for Phoenix LiveView app...
New
GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
woylie
I released Doggo, a collection of unstyled Phoenix components. https://github.com/woylie/doggo Features Unstyled Phoenix components....
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
kip
I’ll shortly be launching Text, a nascent text analysis library. Current functionality In this early version (not ready for prime time) ...
New
mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New

Other Trending Topics Top

budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
budgie
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with. But I don’t use it anymore. Serverless was the promis...
New
Null-logic-0
What IDE or editor are you using for Elixir development? Personally, I use Zed, and I really like it, but sometimes I wish there were a ...
New
type1fool
I just stumbled on a newly redesigned elixir-lang.org. :tada: It looks like @Software_Mansion did the work, and I think it is generally a...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews