Venn Docs

Self-hosting

Venn runs on Cloudflare Workers with a D1 database, or on any server that runs Node 22.13 or newer. Both use the same code and the same API.

Cloudflare (free)

Venn runs on Cloudflare Workers with a D1 database. The free plan is plenty for personal and team use.

Deploy to Cloudflare

Or deploy from your machine:

npx wrangler login
npx wrangler d1 create venn   # paste the database_id it prints into wrangler.toml
npx wrangler deploy

Tables are created automatically on the first request.

Deploy from GitHub Actions

The deploy workflow deploys every push to main. It's off by default, so forks never try to deploy. To turn it on, set these under Settings → Secrets and variables → Actions:

Name Kind Value
CLOUDFLARE_DEPLOY Variable true
D1_DATABASE_ID Variable The ID printed by npx wrangler d1 create venn
CUSTOM_DOMAIN Variable Optional, for example polls.example.com; it must be a zone on the account
CLOUDFLARE_API_TOKEN Secret A token with Workers Scripts, D1, Workers Routes and DNS edit access
CLOUDFLARE_ACCOUNT_ID Secret Your 32-character Cloudflare account ID

The deploy job reads its secrets from the environment named in deploy.yml. Maintaining covers the environment and the rest of the repository setup.

Any server with Node

PORT=3000 DB_PATH=/var/lib/venn/venn.db node server.js

Put it behind a reverse proxy (Caddy, nginx) for HTTPS. The SQLite file is the only state to back up.

Optional features

Each one switches on when its settings exist, and GET /api/config reports which are on. Keep secrets in Cloudflare secrets (npx wrangler secret put NAME) or environment variables, never in wrangler.toml.

Feature Settings Guide
Email notifications EMAIL_FROM, plus Cloudflare Email Sending (an EMAIL binding) or RESEND_API_KEY Notifications
Webhook notifications Always on. Organizers add a URL from their poll. Notifications
Google Calendar / Outlook GOOGLE_CLIENT_ID and/or MICROSOFT_CLIENT_ID Calendars
AI features (Claude) ANTHROPIC_API_KEY AI features
Usage stats STATS_TOKEN Usage stats

Running a public instance

Read the hosting checklist before you share your instance: HTTPS with HSTS, rate limiting, security headers, backups and a privacy page.

Edit this page on GitHub