Smart Exploration
Display only relevant tables and follow relations intuitively
Azimutt is a next-generation database exploration tool that brings modern ERD capabilities to real-world databases. Unlike traditional ERD tools that struggle with large schemas, Azimutt excels at visualizing databases with hundreds or thousands of tables—the kind you actually encounter in production environments.
Built with Elixir/Phoenix for the backend and Elm for the frontend, Azimutt provides a powerful yet intuitive interface for exploring, documenting, and analyzing any database schema, whether PostgreSQL, MySQL, SQL Server, MongoDB, or many others.
Smart Exploration
Display only relevant tables and follow relations intuitively
Schema Design
Design schemas using AML, Azimutt’s fast diagramming language
Documentation
Add notes, tags, and memos directly on tables and columns
Analysis Tools
Discover inconsistencies and get improvement suggestions
Azimutt provides comprehensive database exploration capabilities:
| Feature | Description |
|---|---|
| Multi-Database Support | PostgreSQL, MySQL, MariaDB, SQL Server, MongoDB, Couchbase, Oracle, SQLite |
| Smart Search | Find tables, columns, and relations across your entire schema |
| Selective Display | Show only the tables you need, hide everything else |
| Relation Following | Click to follow foreign keys and explore data relationships |
| Saved Layouts | Save different views for different use cases |
| Data Navigation | Query data and visualize results in the diagram |
| Schema Analysis | Get suggestions for naming, indexing, and structure improvements |
| AML Language | Design schemas quickly with Azimutt Markup Language |
| Feature | Azimutt | Traditional ERD Tools |
|---|---|---|
| Large Schemas | Handles 1000+ tables smoothly | Becomes unusable at 50+ |
| Selective View | Show only what matters | All-or-nothing display |
| Real Databases | Connects to live databases | Often import-only |
| Data Exploration | Query and visualize data | Schema only |
| Collaboration | Share layouts and documentation | Limited sharing |
| Self-Hosted | Full control on your infrastructure | Often cloud-only |
Azimutt consists of several components:
| Component | Purpose |
|---|---|
| Web Application | Elixir/Phoenix backend with Elm frontend |
| PostgreSQL | Stores projects, users, and organization data |
| File Storage | S3 or local storage for project JSON files |
| Email Service | Account validation and password reset |
| Gateway (Optional) | Node.js proxy for database connections |
Before deploying Azimutt on Klutch.sh, ensure you have:
Set up your Azimutt deployment repository:
Create a Dockerfile for your Azimutt deployment:
FROM ghcr.io/azimuttapp/azimutt:main
# Set default portENV PORT=4000
# Expose the application portEXPOSE 4000Azimutt requires several environment variables for proper configuration:
| Variable | Description | Example |
|---|---|---|
PHX_SERVER | Enable Phoenix server mode | true |
PHX_HOST | Host of the deployed website | your-app.klutch.sh |
PORT | Server port | 4000 |
SECRET_KEY_BASE | Server encryption key (64+ bytes) | Random string |
DATABASE_URL | PostgreSQL connection URL | postgresql://user:pass@host:5432/db |
FILE_STORAGE_ADAPTER | Storage type (local or s3) | local |
AUTH_PASSWORD | Enable email/password auth | true |
| Variable | Description | Default |
|---|---|---|
DATABASE_IPV6 | Use IPv6 for database | false |
DATABASE_POOL_SIZE | Connection pool size | 10 |
DATABASE_ENABLE_SSL | Require SSL connections | false |
| Variable | Description |
|---|---|
S3_BUCKET | S3 bucket name |
S3_HOST | S3 host (if not using AWS) |
S3_KEY_ID | S3 access key ID |
S3_KEY_SECRET | S3 secret access key |
S3_REGION | AWS region (default: eu-west-1) |
S3_FOLDER | Folder within bucket (optional) |
For SMTP email:
| Variable | Description |
|---|---|
EMAIL_ADAPTER | Set to smtp |
SMTP_RELAY | SMTP server hostname |
SMTP_USERNAME | SMTP username |
SMTP_PASSWORD | SMTP password |
SMTP_PORT | SMTP port |
| Variable | Description |
|---|---|
SKIP_ONBOARDING_FUNNEL | Skip onboarding for new users |
SKIP_EMAIL_CONFIRMATION | Don’t require email verification |
REQUIRE_EMAIL_ENDS_WITH | Restrict to specific email domain |
ORGANIZATION_DEFAULT_PLAN | Default plan (free, solo, team, enterprise) |
GLOBAL_ORGANIZATION | Add all users to this organization ID |
Generate a secure SECRET_KEY_BASE:
# Using OpenSSLopenssl rand -base64 64
# Or using /dev/urandomhead -c 64 /dev/urandom | base64Test your Azimutt setup locally:
services: azimutt: image: ghcr.io/azimuttapp/azimutt:main ports: - "4000:4000" depends_on: postgres: condition: service_healthy environment: - PHX_SERVER=true - PHX_HOST=localhost - PORT=4000 - SECRET_KEY_BASE=${'{'}SECRET_KEY_BASE{'}'} - DATABASE_URL=postgresql://azimutt:azimutt@postgres:5432/azimutt - FILE_STORAGE_ADAPTER=local - AUTH_PASSWORD=true - SKIP_EMAIL_CONFIRMATION=true volumes: - azimutt_uploads:/app/bin/uploads
postgres: image: postgres:16-alpine environment: - POSTGRES_DB=azimutt - POSTGRES_USER=azimutt - POSTGRES_PASSWORD=azimutt volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U azimutt -d azimutt"] interval: 5s timeout: 5s retries: 5
volumes: azimutt_uploads: postgres_data:Create a .env.example file:
# Generate with: openssl rand -base64 64SECRET_KEY_BASE=your-64-byte-secret-key-hereCreate a PostgreSQL app on Klutch.sh
See our PostgreSQL deployment guide for detailed instructions.
Note your database connection details
postgresql://user:pass@hostname:5432/databasePush your repository to GitHub
git initgit add .git commit -m "Initial Azimutt configuration"git remote add origin https://github.com/yourusername/azimutt.gitgit push -u origin mainCreate a new app on Klutch.sh
Configure environment variables
| Variable | Value |
|---|---|
PHX_SERVER | true |
PHX_HOST | your-app.klutch.sh |
PORT | 4000 |
SECRET_KEY_BASE | Your generated 64-byte key |
DATABASE_URL | Your PostgreSQL connection URL |
FILE_STORAGE_ADAPTER | local |
AUTH_PASSWORD | true |
SKIP_EMAIL_CONFIRMATION | true |
Configure the internal port
Set up persistent storage
| Mount Path | Size |
|---|---|
/app/bin/uploads | 10 GB |
Deploy your application
https://your-app.klutch.shAfter deployment, set up your Azimutt instance:
Create your account
https://your-app.klutch.shCreate an organization
Create your first project
Azimutt supports multiple ways to explore your databases:
Export your schema
# PostgreSQLpg_dump --schema-only -f schema.sql your_database
# MySQLmysqldump --no-data your_database > schema.sqlUpload to Azimutt
Use connection URL
postgresql://user:password@hostname:5432/databasemysql://user:password@hostname:3306/databaseConfigure connection
Create schemas from scratch using Azimutt Markup Language:
# Users tableusers id uuid pk email varchar(255) unique name varchar(100) created_at timestamp
# Posts table with relationposts id uuid pk user_id uuid fk users.id title varchar(255) content text published_at timestamp nullableSearch for tables
/ or click the search barFollow relations
Create layouts
| Element | How to Document |
|---|---|
| Table Notes | Right-click table → Add note |
| Column Notes | Right-click column → Add note |
| Tags | Add tags to categorize tables |
| Memos | Add sticky notes anywhere on the canvas |
Azimutt provides analysis features:
For production deployments with multiple instances, use S3:
Create an S3 bucket
Update environment variables
| Variable | Value |
|---|---|
FILE_STORAGE_ADAPTER | s3 |
S3_BUCKET | Your bucket name |
S3_KEY_ID | Your access key ID |
S3_KEY_SECRET | Your secret access key |
S3_REGION | Your AWS region |
Enable GitHub authentication:
Create GitHub OAuth App
https://your-app.klutch.shhttps://your-app.klutch.sh/auth/github/callbackAdd environment variables
| Variable | Value |
|---|---|
AUTH_GITHUB | true |
GITHUB_CLIENT_ID | Your OAuth client ID |
GITHUB_CLIENT_SECRET | Your OAuth client secret |
For team deployments:
| Variable | Description |
|---|---|
ORGANIZATION_DEFAULT_PLAN | Set default plan for new organizations |
GLOBAL_ORGANIZATION | Auto-add all users to one organization |
GLOBAL_ORGANIZATION_ALONE | Hide other organizations (single-tenant mode) |
REQUIRE_EMAIL_ENDS_WITH | Restrict to company domain (e.g., @company.com) |
Secure Secrets
Use strong, randomly generated SECRET_KEY_BASE
HTTPS Only
Klutch.sh provides automatic SSL certificates
Email Domain
Use REQUIRE_EMAIL_ENDS_WITH for corporate deployments
Database SSL
Enable DATABASE_ENABLE_SSL in production
Common issues and solutions:
| Issue | Cause | Solution |
|---|---|---|
| Database connection fails | Wrong DATABASE_URL | Verify connection string format and credentials |
| 500 errors on startup | Missing SECRET_KEY_BASE | Generate and set a 64+ byte secret |
| Can’t upload files | Storage not configured | Check FILE_STORAGE_ADAPTER and volume mount |
| OAuth redirect fails | Wrong callback URL | Ensure PHX_HOST matches your deployment URL |
| Schema not loading | Database timeout | Increase DATABASE_POOL_SIZE |
Monitor your deployment through the Klutch.sh dashboard:
# Healthy startup[info] Running AzimuttWeb.Endpoint with cowboy 2.x.x at :::4000[info] Access AzimuttWeb.Endpoint at https://your-app.klutch.sh
# Database issues[error] Postgrex.Protocol (#PID<x.x.x>) failed to connect: ** (DBConnection.ConnectionError)| Component | Location | Priority |
|---|---|---|
| PostgreSQL database | Your database server | Critical |
| Project files | /app/bin/uploads or S3 | Important |
| Environment variables | Klutch.sh settings | Critical |
# Export databasepg_dump -Fc your_database > azimutt_backup.dump
# Restore databasepg_restore -d new_database azimutt_backup.dump