π 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 |
| π 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 |
π¦ Installation
β‘ Quick Install (Recommended)
macOS & Linux:
curl -fsSL https://raw.githubusercontent.com/teabranch/matlas-cli/main/install.sh | bash
Windows (PowerShell):
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/teabranch/matlas-cli/main/install.ps1" -OutFile "install.ps1"; .\install.ps1
macOS & Linux
Using 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.sh
Manual 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
Windows
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 -NoPathSetup
Manual installation:
- Download the Windows release from GitHub Releases
- Extract the ZIP file
- Move
matlas.exe to a directory in your PATH (e.g., C:\Program Files\matlas\)
- Add the directory to your system PATH if needed
π οΈ Build from Source
Prerequisites:
# 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 cross
ποΈ Uninstallation
macOS & 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 directory
Windows:
# 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 config
β
Verify Installation
After installation, verify that matlas is working:
# Check if matlas is in PATH
matlas --version
# Show help
matlas --help
# Check configuration
matlas config --help
π Upgrading
Quick upgrade to latest version:
curl -fsSL https://raw.githubusercontent.com/teabranch/matlas-cli/main/upgrade.sh | bash
Advanced 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
π§ Installation Options
| 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 |
π Installation Directories
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_DIR environment variable
- Use
--dir (Unix) or -InstallDir (Windows) flag
π Shell Integration
The installer automatically adds matlas to your PATH and detects your shell:
- Bash: Updates
~/.bashrc or ~/.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"
π 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>
# 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
ποΈ 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
# 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 '...'
π 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)
- Platform-specific secure storage:
- macOS: Keychain (
security command)
- Windows: Credential Manager (PowerShell)
- Linux: secret-service (
secret-tool or GNOME Keyring)
π 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
# Installation (for development)
make install # Install to /usr/local/bin (requires sudo)
make install-user # Install to ~/.local/bin (no sudo)
make uninstall # Remove installation
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
- π§ Advanced Configuration: Some complex cluster configurations (ReplicationSpecs, AutoScaling) require manual Atlas console setup
π License
MIT License - see LICENSE for details.