Install m9m¶
m9m ships as a single statically-linked Go binary. Pick whichever install path fits your environment — they all produce the same binary.
Requirements¶
- Operating system: macOS, Linux, or Windows
- Architecture: AMD64 (x86_64) or ARM64 (aarch64)
- Disk: ~30 MB for the binary, plus storage for workflows and the job queue
- Network: internet access for the initial download (not needed at runtime)
Install methods¶
Installer script (any platform) — recommended¶
Auto-detects OS and architecture, downloads the right binary, places it on your $PATH. Falls back to a local Go build if no prebuilt is available for your platform.
Homebrew (macOS / Linux)¶
Go¶
Installs m9m to $GOPATH/bin. Requires Go 1.21+.
Docker — GitHub Container Registry (releases)¶
With persistent data:
With custom configuration:
docker run -p 8080:8080 \
-v ./config.yaml:/app/config/config.yaml \
-v m9m-data:/app/data \
ghcr.io/neul-labs/m9m:latest
Docker — Docker Hub (CI builds)¶
Docker Compose¶
version: '3.8'
services:
m9m:
image: ghcr.io/neul-labs/m9m:latest
ports:
- "8080:8080"
volumes:
- m9m-data:/app/data
environment:
- M9M_LOG_LEVEL=info
restart: unless-stopped
volumes:
m9m-data:
Python SDK¶
The m9m-cli package downloads the binary on first use. See the PyPI page.
Node.js SDK¶
The m9m-cli package downloads the binary on npm install. See the npm page.
Build from source¶
Prebuilt binaries¶
Download directly from GitHub Releases.
Each release ships SHA-256 checksums next to the binary — verify before installing in production.
Verify installation¶
Data directories¶
m9m stores state under ~/.m9m/ by default:
| Platform | Location |
|---|---|
| Linux | ~/.m9m/ |
| macOS | ~/.m9m/ |
| Windows | %USERPROFILE%\.m9m\ |
Layout:
~/.m9m/
├── data/
│ ├── m9m.db # Workflow storage (SQLite)
│ └── queue.db # Job queue (SQLite)
├── config/
│ └── config.yaml # Configuration
└── logs/
└── m9m.log # Logs
Override with M9M_DATA_DIR, M9M_CONFIG_DIR, M9M_LOG_DIR — see Environment Variables.
Troubleshooting¶
| Symptom | Fix |
|---|---|
command not found: m9m after Go install |
Add $(go env GOPATH)/bin to your $PATH. |
| Postinstall download fails behind proxy (npm / pip) | Set M9M_DOWNLOAD_BINARY=0 and stage ~/.m9m/bin/m9m manually. |
| Docker container exits immediately | Check that port 8080 isn't already bound: lsof -i :8080. |
Permission denied on Linux binary |
chmod +x the binary; verify it's not on a noexec mount. |
| Homebrew tap not found | Confirm the tap with brew tap and re-run brew tap neul-labs/tap. |