Self-Hosted Bundles
Bundles are pre-configured Docker Compose setups that package Crow with a curated set of integrations for a specific use case.
What is a Bundle?
A bundle is a docker-compose.yml file plus configuration that makes it easy to deploy Crow with specific integrations enabled. Instead of configuring each service individually, users deploy a bundle and get a working setup immediately.
Built-in Bundles
Crow ships with several self-hosting add-on bundles in bundles/:
| Bundle | Type | Description |
|---|---|---|
obsidian | MCP server | Connect Obsidian vault via mcp-obsidian npm package |
home-assistant | MCP server | Smart home control via hass-mcp npm package |
ollama | Docker + skill | Local AI models for embeddings and summarization |
nextcloud | Docker + skill | File sync via WebDAV mount (v1: files only) |
immich | Docker + custom MCP | Photo library with custom createImmichServer() |
Install with: crow bundle install <id>
Example Use Cases
- Academic Bundle — Crow + arXiv + Zotero + Google Workspace + Canvas LMS
- Business Bundle — Crow + Gmail + Calendar + Slack + Trello + Notion
- Creative Bundle — Crow + Notion + filesystem + GitHub
- Minimal Bundle — Crow core only (memory + research + sharing)
Creating a Bundle
1. Define the Integration Set
Choose which integrations to include. Each integration needs its environment variables documented.
2. Create docker-compose.yml
Start from the existing docker-compose.yml in the Crow repo and customize:
services:
crow-gateway:
build: .
ports:
- "3001:3001"
environment:
- NODE_ENV=production
# Bundle-specific integrations
- GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}
- GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET}
- TRELLO_API_KEY=${TRELLO_API_KEY}
- TRELLO_TOKEN=${TRELLO_TOKEN}3. Create a .env.example
List all required environment variables with comments:
# Database: Local SQLite is used automatically — no config needed.
# Google Workspace
GOOGLE_CLIENT_ID= # From https://console.cloud.google.com
GOOGLE_CLIENT_SECRET=
# Trello
TRELLO_API_KEY= # From https://trello.com/power-ups/admin
TRELLO_TOKEN=4. Write a README
Include:
- What the bundle is for
- Prerequisites (Docker, API keys)
- Step-by-step setup instructions
- Which integrations are included and what they enable
5. Add a manifest.json
{
"id": "your-bundle",
"name": "Your Bundle Name",
"version": "1.0.0",
"description": "What it does",
"type": "bundle",
"author": "Your Name",
"docker": { "composefile": "docker-compose.yml" },
"skills": ["skills/your-skill.md"],
"requires": { "env": ["REQUIRED_VAR"] }
}6. Structure
bundles/your-bundle/
├── manifest.json
├── docker-compose.yml
├── .env.example
├── skills/
│ └── your-skill.md
└── server/ (optional — for custom MCP servers)
├── server.js
└── index.jsPublishing
- Create a
bundles/your-bundle/directory in your fork - Submit a PR with the bundle
- Once merged, it will appear in the Community Directory
Users can then deploy with:
cd bundles/your-bundle
cp .env.example .env
# Edit .env with API keys
docker compose up -dSubmit
Fork the repo, create your bundle, and submit a PR.