Dashboard Tour
Welcome to the AxiomDB console! Let's explore all the project surfaces—projects, branches, network rules, tables, backups, monitoring, audit, and settings.
Think of the AxiomDB console as your main control center for managing your database infrastructure—no SSH required! Everything you can do using the CLI or the API is also available right here in the web browser. Plus, the console gives you visual tools like schema relationship diagrams, easy-to-read monitoring graphs, and backup timelines to make your life easier. Let's take a tour!
Projects
Your journey starts on the Projects page. Here, you'll see a list of every project owned by your organization or shared with you.
What the project list shows
For each project, we display a few key details:
| Column | Description |
|---|---|
| Name | The friendly, human-readable name you gave your project. |
| App Key | The slug used in your database names, role names, and environment variables. |
| Environment | The environment level (like main, dev, staging, or prod). |
| Status | Shows if the project is active, archived, or if setup failed. |
| Branches | How many active branches you have (out of the 10-branch limit). |
| Storage | The total storage space used by all branches in this project. |
| Created | The exact date and time when the project was created. |
Creating a new project
Whenever you need to spin up a new project, just click the New Project button to open the form:
- Name — Choose a descriptive name for your workspace (for example, "Square Experience").
- App Key — Type a lowercase, alphanumeric slug that will be used in your database names (like
square_experience). - Environment — Pick the right label for your setup:
main,dev,staging, orprod.
Once you submit the form, you'll see a progress indicator showing you what's happening while our gateway:
- Creates the project metadata in the background.
- Spins up your protected
maindatabase branch. - Sets up the Postgres database and roles.
- Generates secure connection credentials.
- Sets up your default network security settings.
As soon as everything is ready, you'll be taken straight into your new project workspace!
Diving into a project workspace
Clicking on any project name opens its workspace, where you'll find these tabs:
- Branches — Create, delete, and manage your database branches.
- Tables — Browse your schema, inspect tables, and look at your data.
- Network — Manage your IP allowlists and select your network access modes.
- Backups — Take manual snapshots or restore data from backups.
- Monitoring — Watch database health and performance metrics in real-time.
- Audit — Look through security logs and see who did what.
- Settings — Set project-wide cleanups and access policies.
- Team — Invite your teammates and manage their roles.
Deleting a project
If you ever need to delete a project, keep in mind that:
- You must be the project owner.
- You'll need to type out the project name to confirm.
- There shouldn't be any active database restore jobs running.
- We highly recommend making a fresh backup first, just in case!
Deleting a project will remove all database branches, roles, passwords, network rules, API tokens, and settings. However, we'll keep the project-level audit logs around for security and accountability.
Branches
Branches are the actual databases you'll connect your apps to. To keep things clean, every single branch is isolated and has its own credentials, metrics, lifespan, and audit logs.
Understanding the branch list
Under the Branches tab, you'll see:
| Column | Description |
|---|---|
| Name | The name of the branch (like main or feature-auth). |
| Status | Current state: active, expired, deleting, deleted, or failed. |
| Source | The parent branch this branch was copied from. |
| Lifespan | The set lifetime: 7d, 1m, 6m, 1y, or forever. |
| Expires | The countdown to when this branch will be automatically deleted. |
| Protected | Shows if the branch is locked (by default, only main is protected). |
| Storage | The physical size of the database on disk. |
| Connections | The number of active and idle connections right now. |
Spin up a new branch
Ready to test a new feature? Click New Branch to fill out the details:
- Name — Give it a clear name (like
feature-authorrelease-may). - Source Branch — Pick the parent branch you want to clone the schema from.
- Lifespan — Choose how long you want this branch to stay active before we clean it up.
Once you click create, AxiomDB will:
- Spin up a new database named
sq_<app_key>_<env>_br_<branch_slug>. - Generate fresh database roles (owner, runtime, and readonly).
- Create unique, secure credentials.
- Copy your schema over from the parent branch using
pg_dumpandpg_restore. - Inherit the network allowlists you set for the project.
Connecting to your branch
Click Connect on any branch to open up the credentials modal. Here, you'll find:
- DATABASE_URL — Your main connection string for app traffic (port 6432, pooled).
- DIRECT_URL — The direct migration connection string for running schema updates (port 5432).
- Framework snippets — Handy copy-paste code blocks for Prisma, Drizzle, Kysely, node-postgres, SQLAlchemy, Django, Laravel, Go pgx, and Rust SQLx.
- Copy buttons — Copy any URL or snippet with a single click.
Note: For security reasons, every time someone views these credentials, we log it as a branch.credentials.viewed event.
Rotating credentials
If you ever need to rotate your passwords, just click the Rotate button. You can choose to update:
| Target | What changes |
|---|---|
runtime | The credentials for the app traffic role (behind PgBouncer). |
direct | The credentials for the owner/migration role (direct PostgreSQL). |
both | A complete refresh of all credentials for the branch. |
Credential rotation is atomic, meaning we'll generate the new password, update PostgreSQL and PgBouncer, refresh the secure credentials file, and show you the new URLs.
Deleting a branch
To clean up an old or unused branch, click Delete (make sure it isn't protected). You'll just need to:
- Type the branch name to confirm you want to delete it.
- Make sure there are no restore operations currently running on it.
A hard delete will permanently remove:
- The branch database.
- All roles associated with the branch (owner, runtime, readonly).
- PgBouncer configuration entries.
- Saved credentials.
- Any network rules set specifically for this branch.
- Branch metadata (though we keep the audit logs intact).
Remember, you cannot delete protected branches (like main) unless you delete the entire project.
Tables
The Tables tab lets you inspect your live database structure and browse through your data.
Navigating the Table Explorer
The explorer is split into three easy-to-use panels:
- Model list (on the left) — A list of all tables in the current branch, grouped by their database schema.
- Column inspector (at the top) — Details about columns, data types, nullability, default values, indexes, and foreign keys.
- Row browser (at the bottom) — A paginated view of your table's data, showing 50 rows at a time.
Schema Flow (Visual Schema Map)
Want to see how your tables relate? The Schema Flow view renders your tables as draggable nodes and connects them with lines representing foreign key relationships.
Here is what you can do:
- Auto-layout — The console automatically organizes your tables into a clean layout based on relationships.
- Drag and drop — Move tables around to customize your view.
- Align — Click this to reset any tables you've moved back to the default layout.
- Relationship lines — Easily trace how data links from one table to another.
- Clean naming — Nodes display clean names like
Invoicerather than technical DB names likepublic.Invoice.
Editing data directly
If your user role has permission (owner, admin, or developer), you can edit data directly in the browser:
- Click on any row to open the editor panel.
- Change the values you need to update.
- Click Save to apply the updates safely.
Under the hood, we use parameterized SQL queries to prevent SQL injection, and all manual database edits are recorded in the audit logs.
What if my database is empty?
If you haven't run any migrations or created any tables yet, you'll see a friendly message:
No tables yet
Run your first migration or create a table from the SQL editor.Network
The Network tab is the primary security gatekeeper for your databases. It controls exactly who (and what) can talk to PostgreSQL.
Understanding Access Modes
You can set your project's network security to one of three modes:
| Mode | Runtime Port 6432 | Direct Port 5432 |
|---|---|---|
restricted | Allowlisted IPs only | Allowlisted IPs only |
public_runtime | Open to the public | Allowlisted IPs only |
public_all | Open to the public | Open to the public |
Allowlisting your current device
To quickly let your own machine connect, follow these steps:
- Click the My IP button—the gateway will auto-detect your current public IP address.
- Take a look at the generated CIDR rule (usually a
/32rule for single devices). - Click Save JSON—we'll immediately apply this rule to Postgres, PgBouncer, and your firewall (UFW).
- Go ahead and test your database connection!
Managing your network rules
The rules table shows you all active permissions:
| Column | Description |
|---|---|
| CIDR | The allowed IP range (like 203.0.113.10/32). |
| Label | A friendly description (e.g., "Office VPN" or "CI/CD Pipeline"). |
| Ports | Shows whether the rule applies to runtime, direct, or both ports. |
| Scope | Shows if it applies to the whole project or a specific branch. |
| Expires | The countdown to when this access rule will automatically expire. |
| Created | Who added the rule and when they did it. |
Setting up CI/CD rules
If you are setting up deployment pipelines (like GitHub Actions), you'll want to add a permanent rule with a wider CIDR block:
{
"cidr": "10.0.0.0/8",
"label": "CI/CD Pipeline",
"ports": "both",
"scope": "project",
"expires_in": "permanent"
}Changing your Access Mode
If you're running serverless or edge deployments where IP addresses change frequently, you might want to open up your runtime port:
- Click Change Mode.
- Select
public_runtime. - Type the confirmation text.
- Click Confirm.
This leaves your migration port (5432) securely locked down under your IP allowlist, while letting serverless functions connect to your pooled runtime port (6432) from anywhere on the web.
Opening the direct port is risky
Setting the mode to public_all opens your direct migration port (5432) to the entire internet. We recommend only doing this for temporary debugging, and reverting to restricted as soon as you're done.
Backups
The Backups tab is your safety net, giving you tools to capture snapshots and recover your data.
The Backup Timeline
Here you'll see a complete list of all automated and manual backups:
| Column | Description |
|---|---|
| Type | The type of backup: full, incremental, or differential. |
| Timestamp | Exactly when the backup was taken. |
| Size | The physical size of the backup file. |
| Status | Shows if it's completed, in_progress, or if it failed. |
| Restore eligible | Indicates if this backup is healthy and ready to be restored. |
Creating a manual snapshot
Before making major changes, it's a great idea to click Create Snapshot to save a restore point:
- Name — Give it a clear name (for example,
pre-migration-2026-05-08). - Branch — Choose the database branch you want to back up.
Tip: We highly recommend taking a snapshot before running destructive migrations, deleting branches, cleaning up data, or launching major updates!
How to restore your data
If you ever need to roll back to a backup, click Restore and follow the flow:
- Select backup — Choose the backup file or point-in-time state you want to recover.
- Choose target — We recommend restoring your data into a new branch (e.g.,
restore-2026-05-08) rather than overwriting your active branch. - Confirm — Type the confirmation text to make sure everything is correct.
- Monitor — Keep track of the restore job's progress under the Jobs tab.
Play it safe with restores
Overwriting an active branch (in-place restore) can be risky! It's almost always safer to restore your backup to a brand new branch first. That way, you can verify your data is correct before pointing your application to it.
Your restore checklist
□ Select snapshot or point-in-time target
□ Choose restore target branch (prefer new branch)
□ Confirm source and target database names
□ Start restore job
□ Track job status in the Jobs page
□ Validate schema and row counts on the target branch
□ Rotate credentials if the restore exposes old secrets
□ Swap application traffic to the restored branch
□ Clean up the old branch if no longer neededMonitoring
The Monitoring tab gives you a real-time view of your database's health, performance, and overall workload.
Checking branch-specific metrics
For any active database branch, you can monitor:
| Metric | Source | Description |
|---|---|---|
| Database size | pg_database_size() | The total storage used by this branch. |
| Table sizes | pg_total_relation_size() | Size breakdown for individual tables, including indexes. |
| Active connections | pg_stat_activity | Connections currently running queries. |
| Idle connections | pg_stat_activity | Open connections that are currently resting. |
| Cache hit ratio | pg_stat_database | How often Postgres finds data in memory instead of reading disk. |
| Slow queries | pg_stat_statements | Queries that took longer than your configured threshold. |
| Migration state | _prisma_migrations | The name, status, and run-time of your latest migrations. |
| Backup freshness | pgBackRest | How long it's been since your last successful backup. |
Monitoring your server health (Host Metrics)
Separate from individual database metrics, you can check the general health of your hosting VPS:
| Metric | Description |
|---|---|
| CPU percent | Overall CPU usage across the host system. |
| Memory | How much system memory is in use versus total capacity. |
| Disk | Used and available disk space on your server. |
| Postgres service | Status indicator showing if PostgreSQL is active and running. |
| PgBouncer service | Status indicator showing if PgBouncer is active and running. |
Host vs Database Metrics
Host CPU measures the resource usage of the entire server, not just a single database. For individual databases, we estimate compute load using query runtime data from pg_stat_statements.
Live metrics stream
The console can stream live metric updates straight to your screen using Server-Sent Events (SSE). You'll see:
- Connection counts update in real-time.
- Storage changes as data is written.
- Estimated compute load adjustments.
Audit Logs
The Audit tab is your security log, tracking every sensitive action taken in your project.
What an audit log looks like
Every audit event is saved with detailed metadata:
{
"actor_id": "user_123",
"action": "branch.credentials.viewed",
"target_type": "branch",
"target_id": "br_456",
"ip": "203.0.113.10",
"user_agent": "Mozilla/5.0",
"metadata": {},
"created_at": "2026-05-08T09:00:00Z"
}Events we track
Here is a list of activities that write to the audit log:
| Event | Description |
|---|---|
project.created | A new project was provisioned. |
project.deleted | A project and all its database branches were removed. |
branch.created | A new database branch was created. |
branch.expired | A branch reached its lifespan limit. |
branch.deleted | A branch was deleted. |
branch.credentials.viewed | Someone looked at the database connection URLs. |
branch.credentials.rotated | Credentials for a branch were updated. |
network.rule.created | An IP address rule was added to the allowlist. |
network.rule.deleted | An IP address rule was removed. |
network.policy.changed | The network access mode was changed. |
backup.snapshot.created | A manual snapshot was taken. |
backup.restore_started | A database restore operation was started. |
member.invited | An email invite was sent to a new team member. |
member.role_changed | A team member's role was updated. |
Filtering your logs
You can easily filter the log list by:
- Actor — The user who performed the action.
- Action — The specific activity (like credential reveals or deletions).
- Target — The project or branch that was affected.
- Date range — The timeframe you want to search.
Settings
The Settings tab is where you configure project-wide policies and defaults.
Branch Cleanup Policies
Keep your workspace tidy by configuring automated cleanups for temporary branches:
- Auto-delete expired branches — Let AxiomDB automatically delete branches that have passed their expiration date.
- Grace period — How long we wait after expiration before deleting (defaults to 24 hours).
- Notify before cleanup — Send out an email alert before a branch is deleted.
CORS and Data API Settings
Configure web-based API access:
- Allowed origins — Specify which domain names can make cross-origin requests to your database API.
- Methods — Choose which HTTP methods are allowed (such as GET, POST, PATCH, or DELETE).
- Credentials — Toggle whether CORS requests can include cookies or auth headers.
CORS only applies to HTTP APIs
Remember, CORS settings only control browser-based web API requests—they do not affect native TCP connections to PostgreSQL. Native connections are secured via your network allowlist and database credentials.
Credential Reveal Policies
Control who has access to view database passwords:
- Default — Only project owners and admins can view database connection URLs.
- Allow developers — Give developers permission to view credentials too.
- Viewer override — Grant credentials access to specific viewer accounts.
No matter what settings you choose, every single credential reveal is logged in the Audit tab!
How is this guide?
Quickstart
Get up and running in under five minutes! Install our CLI, spin up a project, allowlist your device, grab your connection strings, and run your first migration.
Prisma Setup
Setting up Prisma with AxiomDB is easy! Learn how to configure your pooled runtime traffic and direct migration URLs, run migrations, and manage connection pools.
