AI-Powered, Formally Verified

manage your database schema as code with atlas

Modern, AI-powered CI/CD for schema changes
Trusted by leading companies

Goodbye manual schema migrations, Hello Atlas

Modern schema workflows that scale with confidence

The Old Way
manual schema changes in prod
schema scattered across a million scripts
schema drift between local, dev and prod
The Atlas Way
a/schema.sql
@@ -3, 6 +3,7 @@
11CREATE TABLE 'categories' (
22 'category_name' varchar(255) NOT NULL,
33 'category_description' text NULL,
55+'long_desc' TEXT NOT NULL,
66 'updated_at' timestamp NULL ON UPDATE CURRENT_TIMESTAMP,
77 'created_at' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
88 PRIMARY KEY ('id').
99(END)
Change Code
atlas git:(main) x atlas schema apply --env localPlanning migration statements (1 in total):-- modify "categories" table:- > ALTER TABLE "categories" ADD COLUMN "long_desc" text NOT NULL;
Analyzing planned statements (1 in total):-- no diagnostics found
Automatically Plan and Apply

Compare Atlas with other migration tools

ORMs
See Comparison

Codebase

Define your database schema as code

Atlas understands your schema in any language

schema.sql
CREATE TABLE users (
id serial NOT NULL,
name varchar(255) NOT NULL,
email varchar(255) UNIQUE NOT NULL,
PRIMARY KEY (id)
);

CREATE TABLE user_logs (
id serial NOT NULL,
user_id int NOT NULL,
body text NOT NULL,
PRIMARY KEY (id),
CONSTRAINT user_fk FOREIGN KEY (user_id) REFERENCES users(id)
);

Support

Works with the industry's best databases

Manage your database schema as code with Atlas

Migration

Automatic migration planning

Atlas calculates the diff and plans safe migrations for you

Declarative Workflow
Versioned Workflow
$ atlas schema apply

Planning migration statements (1 in total):

-- create "users" table:
-> CREATE TABLE "public"."users" (
"id" serial NOT NULL,
"name" character varying(255) NOT NULL,
"email" character varying(255) NOT NULL,
PRIMARY KEY ("id"),
CONSTRAINT "users_email_key" UNIQUE ("email")
);

-------------------------------------------

Analyzing planned statements (1 in total):

-- no diagnostics found

-------------------------
-- 22.793167ms
-- 1 schema change

-------------------------------------------

Applying approved migration (1 statement in total):

-- create "users" table
-> CREATE TABLE "public"."users" (
"id" serial NOT NULL,
"name" character varying(255) NOT NULL,
"email" character varying(255) NOT NULL,
PRIMARY KEY ("id"),
CONSTRAINT "users_email_key" UNIQUE ("email")
);
-- ok (14.210916ms)

-------------------------
-- 14.304291ms
-- 1 migration
-- 1 sql statement
Atlas enables our team to efficiently and safely manage our application schema. With features like linting, automated migrations for our ORM, and Kubernetes support, it seamlessly integrates into our development ecosystem.
Michael Caulley, Software Eng Lead
Generating and applying migrations is very straight-forward. A powerful and elegant tool, we are now integrating Atlas into our GitHub workflows. Atlas is a natural extension of the tools we already use and a joy to work with!
Noreen Wu, Senior Software Engineer
Finally, a tool that eases the headaches of dealing with migrations, dirty states, merging conflicts, and thinking about rolling back to previous states... hands down, with Atlas, I've had the best experience ever!
Alexander Sadowski, Full Stack Developer

verification

Formal verification

Atlas verifies schema changes using a rigorous, deterministic policy engine

Code Review Agent

CLI Tool

github.com
Projects
Type / to search...
STATUS
STEP
RESULT
1 new migration file detected
20250410131547.sql
ERD and visual diff generated
View Visualization
Analyze 20250410131547.sql2 reports were found in analysis
Destructive changes detectedDropping non-virtual column "email_address"
Data dependent changes detectedAdding a non-nullable "varchar" column "email" on table "users" without a default value

Automate code review on

Deployment

Modern deployments

Deploy schema changes with confidence using our modern CI/CD pipeline

schema.tf
terraform {
required_providers {
atlas = {
source = "ariga/atlas"
version = "~> 0.9.7"
}
}
}

provider "atlas" {
dev_url = "docker://postgres/15/myapp"
}

data "atlas_schema" "sql" {
src = "file://${path.module}/schema.sql"
}

resource "atlas_schema" "postgres" {
url = "postgres://root:pass@localhost:5432/app?sslmode=disable"
hcl = data.atlas_schema.sql.hcl
}
$ terraform apply

data.atlas_schema.sql: Reading...
data.atlas_schema.sql: Read complete after 2s [id=p93KLX2q4UI326LN/4cssQ]

Terraform will perform the following actions:

# atlas_schema.postgres will be created
+ resource "atlas_schema" "postgres" {
+ hcl = <<-EOT
table "users" {
schema = schema.myapp
column "id" {
null = false
type = int
}
column "name" {
null = false
type = varchar(255)
}
primary_key {
columns = [column.id]
}
}
EOT
+ id = (known after apply)
+ url = (sensitive value)
}

Plan: 1 to add, 0 to change, 0 to destroy.

The following SQL statements will be executed:

CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL
);

Monitoring

Schema Monitoring

Track schema changes and detect drift to keep environments consistent

atlas-copilot

Your DBA Copilot

AI-powered assistant for effortless database operations

Get started in minutes

Chat with Atlas Copilot to set up your project fast

Fix issues fast

Iterate with Atlas to quickly resolve to ensure reliable migrations

Generate tests

Use free language to generate unit tests for your schema and migrations

Govern schemas

Use Copilot to generate schema rules and predicates to govern schemas based on your guidelines

atlas-copilot
user@atlas~$ atlas copilot
Atlas
How can I help you today?
User
Help me fix my latest migration
Atlas
I see that your migration is adding a unique constraint on a column in postgres.To do this postgres needs to acquire an ACCESS EXCLUSIVE lock on the table.It's possible to achieve the same result without locking. Let me help! Editing migration 20250410131547_add_uniq_email.sql
AI-Powered, Formally Verified

ready to modernize your database workflow?

Modern, AI-powered CI/CD for schema changes