Getting Started
Everything you need to deploy any repo to your own server in one command.
What is EZKeel?
EZKeel is a deploy-anything CLI. Point it at a repo, and it auto-detects your framework, generates a Dockerfile, provisions databases, and deploys to your VPS with SSL — all in one command.
- Auto-detection — Next.js, Vite, FastAPI, Django, Go, Rails, and 10+ more frameworks
- Database provisioning — Detects Prisma, Drizzle, SQLAlchemy and provisions Postgres automatically
- Zero config — No Dockerfile required, no YAML to write, no dashboard to click through
- $5/month — Run multiple apps on one VPS. No vendor lock-in
Need more? EZKeel also includes a full self-hosted platform mode with Forgejo (unlimited CI), Infisical (secrets), and Dev Containers.
See it live: todolist.apps.ezkeel.com — A todo dashboard deployed with EZKeel. Express + PostgreSQL + auto-TLS on a $5/month VPS.
Quick Start
Get up and running in three steps.
Install the CLI
Build from source using Go:
Add Your Server
Point EZKeel at any VPS with SSH access. One-time setup:
Point *.deploy.mysite.com to your server IP via a DNS A record.
Deploy Any Repo
One command. Zero config:
Subsequent deploys from the same repo directory are even simpler:
Core Concepts
workspace.yaml
The single configuration file that drives everything. It defines your project's visibility rules, secrets requirements, AI model configuration, CI setup, and deployment. See the full schema reference.
Visibility
Secrets
Secrets are managed through Infisical and declared in your workspace.yaml. EZKeel injects them into your shell or passes them directly to AI tools. No more .env files scattered across machines. See Secrets.
AI Persona
Each project gets a .claude/ directory containing AI configuration — model preferences, MCP servers, and a persona prompt. The ezkeel sync push/pull commands keep this persona consistent across machines via a dedicated Git branch. See AI Configuration.
Web Dashboard
Alongside the CLI, EZKeel ships with a web dashboard at app.ezkeel.com (or your self-hosted copy). It is a three-panel layout: project sidebar on the left, project detail in the middle, agent chat on the right.
Agent chat
Three built-in agents: app-builder scaffolds, writes code, and deploys. code-reviewer reads your repo and flags bugs/security issues without modifying anything. devops runs docker commands, reads logs, and restarts containers. Each agent streams tool events (scaffold, write_files, deploy) back to the chat in real time.
The welcome message offers four clickable example prompts (todo app, URL shortener, guestbook, Go hello-world). Clicking an example drops the full prompt into the textarea so you can edit it or send as-is.
When you ask the agent to build something with a database ("Express + Postgres", "todo app", "save to a database"), it sets needs_database=true on the scaffold call — EZKeel auto-provisions a dedicated Postgres user + database for the app and injects DATABASE_URL as an environment variable at deploy time. Your app code only needs to read process.env.DATABASE_URL.
Project tabs
- Overview — live container CPU and memory usage polled every 4 seconds, project build tasks, activity feed, memory/CPU resource sliders.
- Logs — live
docker logs -fstream over WebSocket. - Terminal — interactive shell into the running container via xterm.js. Bidirectional WebSocket, auto-resizing PTY.
- Database — read-only SQL query runner. Only appears for apps that have a provisioned database. Click a table to populate
SELECT * FROM ..., hit Run Query, see results. EnforcedLIMIT 100, 10-second timeout, strictSELECT/SHOW/EXPLAIN/WITHwhitelist — no mutations. - History — chat history for the current project. Lists past conversations; click to resume, double-click the title to rename, click
×to delete. Dashboard-scope history shows general Q&A chats; app detail history shows conversations that built or maintained that app. Titles are auto-generated by a short LLM call after 5 messages (Anthropic-only in v1). - Files — read-only browser for the app's Forgejo repo at
HEAD. Left rail shows a collapsible directory tree with junk paths (node_modules,.git,dist, …) hidden by default; click an entry in the hidden footer to opt it back in. Clicking a file renders it in the viewer pane withhljssyntax highlighting, line numbers, a copy button, and size + modified metadata. Files > 1 MB or non-UTF-8 / binary are offered as downloads instead.
Navigation
Every project detail view has a ← Dashboard button in the top-left that tears down any open log/terminal streams and returns you to the empty state. The empty state widens the chat panel to 640px so the agent prompts are prominent; clicking any project collapses it back to 320px to give the detail view room.
Pricing tiers
The dashboard is tier-gated via your EZKeel account:
- Free — 1 app, 128 MB memory per app, 5 AI prompts/day, Qwen 3.6 Plus model only.
- Pro ($9/mo) — 10 apps, 512 MB per app, 50 prompts/day, Qwen + Claude Sonnet 4.6 (10 calls/day).
- Team ($29/mo) — 50 apps, 2 GB per app, unlimited prompts, Qwen + Sonnet (50 calls/day), custom domains, BYOV.
Next step: Follow the Installation guide for detailed setup instructions, or jump to the CLI Reference if you are ready to explore commands.