Azimutt
Visual database exploration made for real world databases (big and messy). Explore your database schema as well as data, document them, extend them and even get analysis and guidelines.
Visual database exploration made for real world databases (big and messy). Explore your database schema as well as data, document them, extend them and even get analysis and guidelines.
<p align="center">
<a href="https://azimutt.app" target="_blank" rel="noopener">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="assets/azimutt-logo-light.png">
<source media="(prefers-color-scheme: light)" srcset="assets/azimutt-logo-dark.png">
<img alt="Azimutt logo" src="assets/azimutt-logo-dark.png" width="400">
</picture>
</a>
</p>
<p align="center">
<b>Next-Gen ERD</b>: Design, Explore, Document and Analyze your database schema and data
</p>
<p align="center">
<a href="https://azimutt.app" target="_blank" rel="noopener">azimutt.app</a> •
<a href="https://github.com/orgs/azimuttapp/projects/5" target="_blank" rel="noopener noreferrer">roadmap</a> •
<a href="https://twitter.com/azimuttapp" target="_blank" rel="noopener noreferrer">@azimuttapp</a>
</p>
<p align="center">
<a href="https://azimutt.app/create?sql=https://raw.githubusercontent.com/azimuttapp/azimutt/refs/heads/main/backend/priv/repo/structure.sql&name=Azimutt" target="_blank" rel="noopener">
<img src="https://img.shields.io/badge/PostgreSQL-browse_online-gray?labelColor=4169E1&logo=postgresql&logoColor=fff&style=flat" alt="Explore database with Azimutt" />
</a>
</p>
<p align="center">
<a href="https://www.producthunt.com/posts/azimutt?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-azimutt" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=390699&theme=light" alt="Azimutt - Easily explore and analyze your database with your team | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>
<a href="https://azimutt.app/slack" target="_blank"><img src="assets/slack-join.svg" alt="Join us on Slack" style="width: 216px; height: 54px;" width="216" height="54"></a>
</p>
Azimutt is a **full-stack database exploration tool**.
From modern ERD made for real world databases (big & messy), to fast data navigation, but also documentation everywhere and whole database analysis.
[](https://azimutt.app/45f571a6-d9b8-4752-8a13-93ac0d2b7984/c00d0c45-8db2-46b7-9b51-eba661640c3c?token=59166798-32de-4f46-a1b4-0f7327a91336)
**Why building Azimutt?**
Databases existed for more than 40 years and despite a lot of tool around them, we couldn't find any providing a great exploration experience.
- **ERDs** have a great diagram UI, but fall short when schema is growing (real-world use cases)
- **Data catalogs** are focused on data governance and lineage, missing relational db knowledge
- **Database clients** focus on querying with auto-completion and table/column lists, but no visual help
So we decided to build the missing tool 💪
We started with schema exploration for databases with hundreds of tables, but now, it has grown a lot:
- **Design** your schema using [AML](https://azimutt.app/aml) for a fast diagramming
- **Explore** your schema using search everywhere, display only useful tables/columns and follow relations
- **Query** your data like never before, follow foreign keys and display entities in diagram
- **Document** using table/column notes and tags, layouts and memos for use cases, features or team scopes
- **Analyze** it to discover inconsistencies and best practices to apply
Azimutt goal is to be your **ultimate tool to understand your database**.
## Azimutt badge
You can load any public SQL file in Azimutt with just an url parameter.
So if you have a SQL file in your repo, like [structure.sql](./backend/priv/repo/structure.sql), you can add a badge allowing your visitors to easily explore it:
```markdown
[](https://azimutt.app/create?sql=https://raw.githubusercontent.com/azimuttapp/azimutt/refs/heads/main/backend/priv/repo/structure.sql&name=Azimutt)
```
Here are some examples:
[](https://azimutt.app/create?sql=https://raw.githubusercontent.com/azimuttapp/azimutt/refs/heads/main/backend/priv/repo/structure.sql&name=Azimutt)
[](https://azimutt.app/create?sql=https://raw.githubusercontent.com/azimuttapp/azimutt/refs/heads/main/backend/priv/repo/structure.sql&name=Azimutt)
[](https://azimutt.app/create?sql=https://raw.githubusercontent.com/azimuttapp/azimutt/refs/heads/main/backend/priv/repo/structure.sql&name=Azimutt)
[](https://azimutt.app/create?sql=https://raw.githubusercontent.com/azimuttapp/azimutt/refs/heads/main/backend/priv/repo/structure.sql&name=Azimutt)
[](https://azimutt.app/create?sql=https://raw.githubusercontent.com/azimuttapp/azimutt/refs/heads/main/backend/priv/repo/structure.sql&name=Azimutt)
[](https://azimutt.app/create?sql=https://raw.githubusercontent.com/azimuttapp/azimutt/refs/heads/main/backend/priv/repo/structure.sql&name=Azimutt)
[](https://azimutt.app/create?sql=https://raw.githubusercontent.com/azimuttapp/azimutt/refs/heads/main/backend/priv/repo/structure.sql&name=Azimutt)
[](https://azimutt.app/create?sql=https://raw.githubusercontent.com/azimuttapp/azimutt/refs/heads/main/backend/priv/repo/structure.sql&name=Azimutt)
[](https://azimutt.app/create?sql=https://raw.githubusercontent.com/azimuttapp/azimutt/refs/heads/main/backend/priv/repo/structure.sql&name=Azimutt)
[](https://azimutt.app/create?sql=https://raw.githubusercontent.com/azimuttapp/azimutt/refs/heads/main/backend/priv/repo/structure.sql&name=Azimutt)
[](https://azimutt.app/create?sql=https://raw.githubusercontent.com/azimuttapp/azimutt/refs/heads/main/backend/priv/repo/structure.sql&name=Azimutt)
Use [Simple Icons](https://simpleicons.org) to find other icon/color if needed or use our custom button image:
[](https://azimutt.app/create?sql=https://raw.githubusercontent.com/azimuttapp/azimutt/refs/heads/main/backend/priv/repo/structure.sql&name=Azimutt)
More details on [Azimutt documentation](https://azimutt.app/docs/badge)
## Self-hosted
You can use our [Docker image](https://github.com/azimuttapp/azimutt/pkgs/container/azimutt) to easily deploy it. Here is the [full guide](INSTALL.md).
## Deploy on Heroku
You can use our Heroku template which includes Azimutt web app, a Postgres database, Stackhero S3 storage and Mailgun.
[](https://www.heroku.com/deploy)
After succeed deployment, you will need to configure config vars
```bash
# Replace with your app-name
HEROKU_APP=<app-name>
# Set PHX_HOST with the URL of the app
heroku config:set PHX_HOST=$(heroku info -s | grep "web_url" | sed 's|web_url=https://||; s|/$||')
# Copy Stackhero access key to S3_KEY_ID
heroku config:set S3_KEY_ID=$(heroku config:get S3_ROOT_ACCESS_KEY)
# Copy Stackhero secret key to S3_KEY_SECRET
heroku config:set S3_KEY_SECRET=$(heroku config:get S3_ROOT_SECRET_KEY)
```
Finally, you will need to create the `azimutt` bucket on Stackhero:
- connect to Stackhero from your Heroku dashboard
- use values of `S3_ROOT_ACCESS_KEY` and `S3_ROOT_SECRET_KEY` to log in
- create a bucket named `azimutt`
## Deploy on Kubernetes
Please read this [guide](./charts/azimutt/README.md)
## Local development
Azimutt is built with [Elixir](https://elixir-lang.org)/[Phoenix](https://www.phoenixframework.org) (backend & admin) and [Elm](https://elm-lang.org)/[elm-spa](https://www.elm-spa.dev) (editor).
For local development you will need to set up the environment:
- install `pnpm`, [Elm](https://guide.elm-lang.org/install/elm.html) & [elm-spa](https://www.elm-spa.dev)
- install [Phoenix](https://hexdocs.pm/phoenix/installation.html) and [Elixir](https://elixir-lang.org/install.html) if needed (use [asdf](https://asdf-vm.com))
- install [PostgreSQL](https://www.postgresql.org/download), create a user `postgres` with password `postgres` and a database `azimutt_dev` (see `DATABASE_URL` in `.env` later)
- install [pre-commit](https://pre-commit.com) and run `pre-commit install` before committing
- copy `.env.example` to `.env` and adapt values
- source your environment and install dependencies: `source .env && npm run setup`
- you can now start the Azimutt server: `source .env && npm start`
- and finally navigate to [localhost:4000](http://localhost:4000) 🎉
- you can login with `admin@azimutt.app` email & `admin` password
Other things:
- API documentation is accessible at [`/api/v1/swagger`](http://localhost:4000/api/v1/swagger)
- You can use `pnpm --filter "azimutt-editor" run book` to start Elm design system & components, and access it with [localhost:4002](http://localhost:4002)
### command semantics
We have a lot of projects with a lot of commands, here is how they are structured:
- each project has its own commands (mostly npm but also elixir), the root project has global commands to launch them using a prefix
- `setup` is a one time command to install what is required
- `install` download dependencies, should be run when new ones are added
- `start` launch project in dev mode
- `test` allows to run tests
- `format` allows to run execute code formatting
- `lint` allows to run execute linters
- `build` generate compilation output
- `build:docker` same as `build` but in the docker image (paths are different 😕)
- `update` bumps library versions
### Development commands
- `pnpm --filter "azimutt-editor" run book` to launch the Elm design system
### Setup Stripe
#### Config
- Install [Stripe CLI](https://stripe.com/docs/stripe-cli) and login with `stripe login`
- Run `stripe listen --forward-to localhost:4000/webhook/stripe`
- Copy your webhook signing secret to `STRIPE_WEBHOOK_SIGNING_SECRET` variable in your `.env` file (looks like `whsec_...`)
- Go to [your Stripe dashboard](https://dashboard.stripe.com/test/apikeys) to obtain your API Key and copy it into `STRIPE_API_KEY` in your `.env` file (looks like: `sk_test_...`)
#### Payments
When testing interactively, use a card number, such as `4242 4242 4242 4242`. Enter the card number in the Dashboard or in any payment form.
Use a valid future date, such as `12/34`.
Use any three-digit CVC like `123` (four digits for American Express cards).
Use any value you like for other form fields.
See more in the [stripe testing documentation](https://stripe.com/docs/testing)
## Stack
- [Production](https://azimutt.app) & [Staging](https://azimutt.dev)
- [Error logs](https://sentry.io/organizations/azimuttapp/issues/?project=6635088) with [Sentry](https://sentry.io)
- Design using [TailwindCSS Framework](https://tailwindcss.com)
- [Credo](http://credo-ci.org) for static code analysis (automatically run with pre-commit)
## License
The tool is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).