π matlas β one CLI for Atlas and MongoDB
π The unified, Go-powered CLI that bridges MongoDB Atlas management and database operations
Matlas is your all-in-one command center for MongoDB Atlas and database management. Think of it as the friendly bridge between the Atlas SDK and the MongoDB Go Driver β spin up projects and clusters, configure network access, and seamlessly dive into database tasks like listing collections or inspecting indexes, all from a single, powerful tool! β‘
π‘ Why we built it
- π Context switching hurts: Cloud management lives in one world (Atlas APIs), while dayβtoβday database tasks live in another (drivers and shells). We wanted both, together.
- π§ A single mental model: One set of flags, one config, one output style for both Atlas and database operations.
- β‘ Grease the path: From "create a cluster" to "inspect collections" in seconds β no hunting for another CLI.
We love how Terraform plans changes before applying, and how kubectl lets you declare desired state. Matlas combines those vibes:
- πΈ Discover: Snapshot your Atlas org/project (and optionally databases) into clean YAML:
matlas discover --project-id <id> -o atlas.yaml --include-databases
- π Plan/Diff: Treat that YAML as your desired state, compare it to reality:
matlas infra plan -f atlas.yaml
matlas infra diff -f atlas.yaml
- π Apply (dry-run first): Roll changes out, Terraformβstyle:
matlas infra -f atlas.yaml --dry-run
matlas infra -f atlas.yaml --auto-approve
β¨ Matlas doesn't try to be Terraform or kubectl. It borrows the best ideas so Atlas work feels safe, reviewable, and repeatable β and it keeps database tasks close at hand.
π οΈ What you can do
| Feature |
Description |
| π Atlas |
List/get/create/update/delete projects, clusters, users, network access, peering, and network containers |
| ποΈ Databases |
List/create/delete databases, collections, and indexes β either via connection string or Atlas cluster reference |
| π Infra |
Discover current state, plan/diff/apply/destroy via declarative YAML |
π¦ Install
Prerequisites
Download from GitHub Releases
Download the archive for your OS/architecture from the Releases page, extract, and place matlas in your PATH.
Build from source
# Quick build
make build
# Or manually
go build -o bin/matlas ./...
π Authenticate
Environment Variables
export ATLAS_PUB_KEY="your-public-key"
export ATLAS_API_KEY="your-api-key"
# Optional
export ATLAS_PROJECT_ID="your-project-id"
export ATLAS_ORG_ID="your-org-id"
YAML Configuration
Create ~/.matlas/config.yaml:
apiKey: your-api-key
publicKey: your-public-key
projectId: your-project-id # optional
orgId: your-org-id # optional
output: json # optional
timeout: 30s # optional
Command Line Flags
matlas --api-key <key> --pub-key <key> --project-id <id> --org-id <id> [command]
π Quick start
Atlas Management
# List projects
matlas atlas projects list --org-id <id>
# Get a specific project
matlas atlas projects get --project-id <id>
# List database users
matlas atlas users list --project-id <id>
# List network access rules
matlas atlas network list --project-id <id>
ποΈ Database Operations
# List databases (via connection string)
matlas database list --connection-string "mongodb+srv://..."
# List databases (via Atlas cluster)
matlas database list --cluster <name> --project-id <id> --use-temp-user
# List collections in a database
matlas database collections list --connection-string ... --database mydb
# List indexes in a collection
matlas database collections indexes list \
--connection-string ... \
--database mydb \
--collection mycoll
π Declarative Infrastructure Workflows
# π Discover current state
matlas discover --project-id <id> -o atlas.yaml --include-databases --convert-to-apply
# π Plan and preview changes
matlas infra plan -f config.yaml
matlas infra diff -f config.yaml
# π Apply changes (with safety checks)
matlas infra -f config.yaml --dry-run # Preview first
matlas infra -f config.yaml --auto-approve # Apply changes
# πΈ Show current state
matlas infra show --project-id <id>
# ποΈ Destroy resources
matlas infra destroy -f config.yaml # From config
matlas infra destroy --discovery-only --project-id <id> # Discovery only
βοΈ Configuration
Configuration Priority (highest to lowest)
- ποΈ Built-in defaults
- π YAML file:
~/.matlas/config.yaml or --config / ATLAS_CONFIG_FILE
- π Environment variables:
ATLAS_* prefix (e.g., ATLAS_OUTPUT, ATLAS_TIMEOUT)
- π© Command flags:
--api-key, --project-id, etc.
π Credentials Resolution
Matlas looks for credentials in this order:
- Command flags/YAML config
- Environment variables (
ATLAS_API_KEY, ATLAS_PUB_KEY)
- macOS Keychain (fallback)
π Shell Completion
Enable auto-completion for your shell:
# Choose your shell
matlas completion bash | sudo tee /etc/bash_completion.d/matlas
matlas completion zsh > ~/.zsh/completions/_matlas
matlas completion fish > ~/.config/fish/completions/matlas.fish
matlas completion powershell > matlas.ps1
π Learn More
π οΈ Development
Commands
# Run tests
make test # See scripts/test/*.sh for details
# Code quality
make lint # Lint code
make fmt # Format code
# Generate mocks
make generate-mocks # Update test mocks
Feature tracking
Create a brief, per-feature summary in features/ using the provided template. This helps reviewers and users understand what was achieved and where it was wired end-to-end (CLI + YAML ApplyDocument).
cp features/TEMPLATE.md features/$(date +%F)-<short-slug>.md
β οΈ Current Limitations
- π Atlas Search: Commands exist but return unsupported errors
- π VPC Endpoints: Hidden in current build
π License
MIT License - see LICENSE for details.