π 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! β‘
- π 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.
| Feature | Description |
|---|---|
| π Atlas | List/get/create/update/delete projects, clusters, users, network access, peering, and network containers |
| π Atlas Search | Create and manage Atlas Search indexes for full-text and vector search capabilities |
| π VPC Endpoints | Configure VPC endpoints and Private Link connections for secure Atlas connectivity |
| ποΈ Databases | List/create/delete databases, collections, and indexes β either via connection string or Atlas cluster reference |
| π₯ Database Users | Create/list/update/delete database-specific users with custom roles β via connection string or Atlas cluster reference |
| π Infra | Discover current state, plan/diff/apply/destroy via declarative YAML |
macOS & Linux:
curl -fsSL https://raw.githubusercontent.com/teabranch/matlas-cli/main/install.sh | bashWindows (PowerShell):
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/teabranch/matlas-cli/main/install.ps1" -OutFile "install.ps1"; .\install.ps1Using the installation script:
# Download and run installer
curl -fsSL https://raw.githubusercontent.com/teabranch/matlas-cli/main/install.sh -o install.sh
chmod +x install.sh
./install.sh
# Install specific version
./install.sh --version v1.2.3
# Install to custom directory (no sudo required)
./install.sh --dir ~/.local/bin
# Install to user directory via environment variable
MATLAS_INSTALL_DIR=~/.local/bin ./install.shManual installation:
- Download the latest release from GitHub Releases
- Extract the archive:
tar -xzf matlas-*.tar.gz - Move binary to PATH:
sudo mv matlas /usr/local/bin/ - Make executable:
sudo chmod +x /usr/local/bin/matlas
Using PowerShell (Recommended):
# Download installer
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/teabranch/matlas-cli/main/install.ps1" -OutFile "install.ps1"
# Run installer (may require Administrator privileges)
.\install.ps1
# Install specific version
.\install.ps1 -Version v1.2.3
# Install to user directory (no admin required)
.\install.ps1 -InstallDir "$env:USERPROFILE\matlas"
# Skip automatic PATH setup
.\install.ps1 -NoPathSetupManual installation:
- Download the Windows release from GitHub Releases
- Extract the ZIP file
- Move
matlas.exeto a directory in your PATH (e.g.,C:\Program Files\matlas\) - Add the directory to your system PATH if needed
Prerequisites:
- πΉ Go 1.24+ required
# Clone the repository
git clone https://github.com/teabranch/matlas-cli.git
cd matlas-cli
# Quick build
make build
# Or manually
go build -o bin/matlas ./...
# Cross-compile for all platforms
./scripts/build/build.sh crossmacOS & Linux:
# Download and run uninstaller
curl -fsSL https://raw.githubusercontent.com/teabranch/matlas-cli/main/uninstall.sh | bash
# Or manually
sudo rm /usr/local/bin/matlas
rm -rf ~/.matlas # Remove config directoryWindows:
# Download and run uninstaller
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/teabranch/matlas-cli/main/uninstall.ps1" -OutFile "uninstall.ps1"; .\uninstall.ps1
# Or manually remove
Remove-Item "C:\Program Files\matlas\matlas.exe" # Adjust path as needed
Remove-Item -Recurse -Force "$env:USERPROFILE\.matlas" # Remove configAfter installation, verify that matlas is working:
# Check if matlas is in PATH
matlas --version
# Show help
matlas --help
# Check configuration
matlas config --helpQuick upgrade to latest version:
curl -fsSL https://raw.githubusercontent.com/teabranch/matlas-cli/main/upgrade.sh | bashAdvanced upgrade options:
# Download upgrade script
curl -fsSL https://raw.githubusercontent.com/teabranch/matlas-cli/main/upgrade.sh -o upgrade.sh
chmod +x upgrade.sh
# Upgrade to latest version
./upgrade.sh
# Upgrade to specific version
./upgrade.sh --version v1.2.3
# Force reinstall current version
./upgrade.sh --force| Method | Pros | Cons | Requires Admin |
|---|---|---|---|
| Quick Install | Easy, automatic PATH setup | Requires internet | System dirs: Yes |
| Installation Script | Customizable, version selection | Requires download | System dirs: Yes |
| Manual Install | Full control | Manual PATH setup | System dirs: Yes |
| Build from Source | Latest features, customizable | Requires Go toolchain | No |
Default locations:
- macOS/Linux:
/usr/local/bin(system-wide) or~/.local/bin(user) - Windows:
C:\Program Files\matlas(system-wide) or%USERPROFILE%\matlas(user)
Custom installation:
- Set
MATLAS_INSTALL_DIRenvironment variable - Use
--dir(Unix) or-InstallDir(Windows) flag
The installer automatically adds matlas to your PATH and detects your shell:
- Bash: Updates
~/.bashrcor~/.bash_profile - Zsh: Updates
~/.zshrc - Fish: Updates
~/.config/fish/config.fish - PowerShell: Updates user PATH environment variable
To manually add to PATH:
# Bash/Zsh
echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bashrc
# Fish
echo 'set -gx PATH /usr/local/bin $PATH' >> ~/.config/fish/config.fish
# PowerShell
$env:PATH += ";C:\Program Files\matlas"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"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 # optionalmatlas --api-key <key> --pub-key <key> --project-id <id> --org-id <id> [command]# 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>
# Create Atlas user with password display (optional)
matlas atlas users create --project-id <id> --username testuser --show-password \
--roles "readWriteAnyDatabase" --scopes "cluster1,cluster2"
# List network access rules
matlas atlas network list --project-id <id>
# List Atlas Search indexes
matlas atlas search list --project-id <id> --cluster <name>
# Create a basic search index
matlas atlas search create --project-id <id> --cluster <name> \
--database <db> --collection <coll> --name <index-name> --type search
# Create VPC endpoint
matlas atlas vpc-endpoints create --project-id <id> --provider AWS \
--region us-east-1 --service-name com.amazonaws.vpce.us-east-1.vpce-svc-123# 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
# Database user management
matlas database users list --connection-string ... --database mydb
matlas database users create --cluster <name> --project-id <id> --use-temp-user \
--database mydb --username testuser --password "securepass" --roles "readWrite"
# Database custom roles management
matlas database roles list --cluster <name> --project-id <id> --use-temp-user --database mydb
matlas database roles create --cluster <name> --project-id <id> --use-temp-user \
--database mydb --role-name "customRole" --privileges '...'# π 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- ποΈ Built-in defaults
- π YAML file:
~/.matlas/config.yamlor--config/ATLAS_CONFIG_FILE - π Environment variables:
ATLAS_*prefix (e.g.,ATLAS_OUTPUT,ATLAS_TIMEOUT) - π© Command flags:
--api-key,--project-id, etc.
Matlas looks for credentials in this order:
- Command flags/YAML config
- Environment variables (
ATLAS_API_KEY,ATLAS_PUB_KEY) - Platform-specific secure storage:
- macOS: Keychain (
securitycommand) - Windows: Credential Manager (PowerShell)
- Linux: secret-service (
secret-toolor GNOME Keyring)
- macOS: Keychain (
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| Topic | Documentation |
|---|---|
| π Atlas Commands | docs/atlas.md |
| ποΈ Database Commands | docs/database.md |
| π Infrastructure Workflows | docs/infra.md |
| π Authentication & Config | docs/auth.md |
| π YAML Configuration | docs/yaml-kinds.md |
| π Discovery Workflows | docs/discovery.md |
# 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
# Installation (for development)
make install # Install to /usr/local/bin (requires sudo)
make install-user # Install to ~/.local/bin (no sudo)
make uninstall # Remove installationCreate 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- π§ Advanced Configuration: Some complex cluster configurations (ReplicationSpecs, AutoScaling) require manual Atlas console setup
MIT License - see LICENSE for details.
Built with β€οΈ for the MongoDB community
β Star this repo β’ π Report issues β’ π‘ Request features