Goal: DaoFlow aims to make self-hosted Docker Compose deployments dependable enough for a small team to operate without a dedicated platform team.
DaoFlow is an open-source Agentic DevOps project for AI agents and humans. It is being built to deploy, inspect, diagnose, and recover Docker Compose applications on operator-owned VPS and bare-metal servers.
Verified in this repository: The CLI publishes structured JSON contracts, scoped permission metadata, and dry-run behavior in the generated CLI contract.
Verified in this repository: The API separates read, planning, and command procedures under the documented command audit contract.
Current limitation: Compose deployment records and recovery behavior are not yet independently verified across a real remote deployment, failure, and rollback lifecycle.
Current limitation: Agent permissions and destructive-action controls are under active verification and are not yet an unconditional production-safety guarantee.
Current limitation: DaoFlow has not yet proved that every command-lane mutation creates a complete immutable audit record.
Current limitation: Backup and restore workflows have not yet been proven through a current real-infrastructure round trip with verified data integrity.
Current public readiness evidence and the active dependencies behind these limitations are tracked in PRODUCTION_READINESS.md.
Quick Start
Production Install
curl -fsSL https://raw.githubusercontent.com/DaoFlow-dev/DaoFlow/main/scripts/install.sh | shThis downloads the daoflow CLI, checks Docker, and runs the interactive installer — creates /opt/daoflow/ with .env, docker-compose.yml, and starts the configured services.
Re-running the script refreshes the local daoflow binary before starting the installer.
Non-interactive (CI / agent-friendly):
curl -fsSL https://raw.githubusercontent.com/DaoFlow-dev/DaoFlow/main/scripts/install.sh | sh -s -- \ --domain deploy.example.com \ --email admin@example.com \ --password 'YourSecurePassword123' \ --yes
Optional dashboard exposure during install:
# Tailnet-only HTTPS URL curl -fsSL https://raw.githubusercontent.com/DaoFlow-dev/DaoFlow/main/scripts/install.sh | sh -s -- \ --email admin@example.com \ --password 'YourSecurePassword123' \ --expose tailscale-serve \ --yes # Public HTTPS URL via Tailscale Funnel curl -fsSL https://raw.githubusercontent.com/DaoFlow-dev/DaoFlow/main/scripts/install.sh | sh -s -- \ --email admin@example.com \ --password 'YourSecurePassword123' \ --expose tailscale-funnel \ --yes # Public ephemeral URL via Cloudflare Quick Tunnel curl -fsSL https://raw.githubusercontent.com/DaoFlow-dev/DaoFlow/main/scripts/install.sh | sh -s -- \ --email admin@example.com \ --password 'YourSecurePassword123' \ --expose cloudflare-quick \ --yes
CLI-Only Install
# macOS (Apple Silicon) curl -fsSL -o /usr/local/bin/daoflow \ https://github.com/DaoFlow-dev/DaoFlow/releases/latest/download/daoflow-darwin-arm64 chmod +x /usr/local/bin/daoflow # Linux (x64) curl -fsSL -o /usr/local/bin/daoflow \ https://github.com/DaoFlow-dev/DaoFlow/releases/latest/download/daoflow-linux-x64 chmod +x /usr/local/bin/daoflow
Verify:
daoflow --cli-version daoflow whoami --json
Current Stack
| Component | Technology |
|---|---|
| Runtime | Bun |
| API Layer | Hono + tRPC |
| Auth | Better Auth |
| ORM | Drizzle ORM |
| Database | PostgreSQL 17 |
| Cache/Queue | Redis 7 |
| Web UI | React + Vite + shadcn/ui |
| TypeScript | TypeScript 7 native |
| Testing | Vitest + Playwright |
| Packaging | Docker multi-stage build |
| CI | GitHub Actions |
Development
Requirements: Bun 1.3.14 via the repo packageManager pin, Docker with Compose v2.
Type checks run on the Go-based TypeScript 7.0.2 compiler. The root install also keeps TypeScript 6 for ESLint's compiler API and editor language services until those tools support the native TypeScript 7 implementation.
git clone https://github.com/DaoFlow-dev/DaoFlow.git
cd DaoFlow
bun install
docker compose -f docker-compose.dev.yml up -d
cp .env.example .env
bun run db:migrate
bun run dev- API server:
http://localhost:3000 - Vite web UI:
http://localhost:5173
Auth notes:
BETTER_AUTH_SECRETis optional locally, required in productionBETTER_AUTH_URLmust match the externally reachable origin in production- First account created becomes
owner; subsequent sign-ups default toviewer
Quality Gates
bun lint # ESLint bun typecheck # TypeScript bun test:unit # Unit tests bun test:e2e # Playwright bun verify # All of the above
bun run test:e2e reuses docker-compose.dev.yml for Postgres, Redis, and Temporal, then runs the E2E-specific DB reset/seed setup scripts before Playwright starts the app on the host.
Production Build
bun run build # Build client + server bun start # Start production server
Docker:
docker build --target runtime -t ghcr.io/daoflow-dev/daoflow:local .The Dockerfile's final target is the development-task runner, so application builds must select
the runtime target explicitly. Set DAOFLOW_VERSION=local in the production Compose .env, then
run the stack so PostgreSQL, Redis, health checks, persistent volumes, and required secrets are
configured together. See the
local-source staging workflow.
Documentation
Full docs at daoflow-dev.github.io/DaoFlow.
| Topic | Description |
|---|---|
| Getting Started | Install, configure, deploy your first app |
| Vision & Principles | Why DaoFlow — open-source philosophy |
| CLI Reference | Commands, flags, and exit codes |
| Comparisons | vs Vercel, Coolify, Dokploy, AWS, Kamal |
| Agent Integration | Using DaoFlow with AI coding agents |
| Security & RBAC | Roles, scopes, tokens, audit |
Product Direction
The product charter for contributors and coding agents lives in AGENTS.md.
License
Verified in this repository: DaoFlow is published under the Apache License 2.0, and the repository source is available for inspection.