Ycode is a visual website builder and CMS designed for creating and managing websites without writing code. It is available as a self-hosted Open Source project or as a fully managed Cloud service.
Ycode has extensive documentation. We actively maintain and improve it, so if something is unclear or incomplete, feel free to open an issue. We welcome any feedback that helps make the docs better.
To deploy Ycode using managed services you will need:
Follow the installation instructions to get started.
Run the entire stack on your own server — no Vercel or Supabase Cloud accounts needed. Everything runs locally in Docker containers.
- Docker Engine 24+ with Compose v2
- Node.js 18+ (for generating JWT keys during setup)
- 4 GB RAM minimum (8 GB recommended)
- A domain with two subdomains (e.g.
ycode.example.comandsupa.example.com) - A reverse proxy (Cloudflare Tunnel, nginx, Caddy, etc.) pointing to the Docker ports
# 1. Clone the repo
git clone https://github.com/ycode/ycode.git
cd ycode/deploy
# 2. Generate all secrets (JWT keys, passwords, etc.)
bash scripts/generate-secrets.sh
# 3. Edit .env — set your domain URLs
# SITE_URL → your Ycode app URL (e.g. https://ycode.example.com)
# API_EXTERNAL_URL → your Supabase API URL (e.g. https://supa.example.com)
# SUPABASE_PUBLIC_URL → same as API_EXTERNAL_URL
# SELF_HOSTED_SUPABASE_HOSTNAME → the hostname only (e.g. supa.example.com)
nano .env
# 4. Build the Ycode app image
docker compose build ycode ycode-migrate
# 5. Start all services
docker compose up -d
# 6. Wait for all containers to become healthy (~2-3 minutes)
docker compose psOnce all services are healthy, open https://ycode.example.com/ycode/welcome to create your admin account and start building.
Alternatively, run the interactive setup script which handles steps 2-6 automatically:
cd deploy
bash scripts/setup.shThe Docker stack runs 14 services:
| Service | Purpose |
|---|---|
| PostgreSQL | Primary database |
| GoTrue | Authentication (email, OAuth) |
| PostgREST | Auto-generated REST API |
| Realtime | WebSocket subscriptions |
| Storage | File/object storage |
| Kong | API gateway |
| Studio | Supabase dashboard UI |
| Analytics | Log ingestion (Logflare) |
| Supavisor | Connection pooling |
| Edge Functions | Serverless Deno functions |
| Vector | Log collection |
| imgproxy | Image transformations |
| Ycode App | The Ycode builder (Next.js) |
| Ycode Migrate | Database migrations (runs once) |
All scripts are in deploy/scripts/:
| Script | Purpose |
|---|---|
generate-secrets.sh |
Generate all passwords, JWT keys, and tokens |
setup.sh |
Interactive first-time setup (generates secrets, builds, starts) |
update.sh |
Pull latest images and restart services |
backup.sh |
Backup database and volumes |
rollback.sh |
Restore from a backup |
The Supabase Studio dashboard is accessible on the Kong port (default 3080):
URL: http://<your-server-ip>:3080
Username: supabase (default)
Password: (see DASHBOARD_PASSWORD in .env)
The stack exposes two ports that need to be routed through your reverse proxy:
| Domain | Target | Port |
|---|---|---|
ycode.example.com |
Ycode app | 3002 |
supa.example.com |
Kong API gateway | 3080 |
The included docker-compose.yml has a Cloudflare Tunnel service preconfigured. Set CLOUDFLARE_TUNNEL_TOKEN in .env to use it. For other reverse proxies (nginx, Caddy, Traefik), point them to the ports above.
We provide official support on Ycode Cloud projects. Community-driven support for the Open Source version is available in Discord.
Thank you for considering contributing to Ycode! We ask that you review the contribution guide before opening issues or submitting pull requests.
To ensure the Ycode community is welcoming to all, please review and abide by our Code of Conduct.