# ═══════════════════════════════════════════════════════════════ # openvibe.space — Environment Configuration # Copy to .env and fill in values. # In production this lives at /etc/openvibe/space.env (0600). # ═══════════════════════════════════════════════════════════════ # Server PORT=4940 HOST=127.0.0.1 NODE_ENV=development BASE_URL=http://localhost:4940 # Proxy hops that set X-Forwarded-For (Cloudflare → nginx → Node = 2) TRUST_PROXY=2 # Identity provider — OpenVibe.Network (OAuth2 authorization server + JWKS) OV_NETWORK_URL=https://openvibe.network OV_NETWORK_INTERNAL_URL=http://127.0.0.1:4000 # OAuth2 client credentials (client `space` registered in the Network DB, # redirect https://openvibe.space/auth/callback) OV_OAUTH_CLIENT_ID=space OV_OAUTH_CLIENT_SECRET=change-me-to-the-registered-space-secret # Production: https://openvibe.space/auth/callback OV_OAUTH_REDIRECT_URI=http://localhost:4940/auth/callback # Cookies — production default is Secure; set false for plain-http local dev #COOKIE_SECURE=false # OpenVibe.Community — the hub, and where the forum lives (owner decision, 2026-10-08): every # forum URL on this site redirects to the same path and query there. OV_COMMUNITY_URL=https://openvibe.community # OpenVibe.Live — the legal pages the shared footer links OV_LIVE_URL=https://openvibe.live # PostgreSQL (ADR-035), written by OpenVibe.Host roles/data/add-service.sh space. Space owns static hosting # state as well as the historical forum schema and feeds /api/ready. # Without DATABASE_URL, development uses an embedded PGlite database in data/pglite. DATABASE_URL= DATABASE_DIRECT_URL= # Static hosting engine (Stage B). Public project creation remains off until launch. SPACE_PUBLIC_HOSTING=off # Spaces (server/spaces/, docs/spaces.md): the AI builder and spaces' AI go through OpenVibe.AI (space.* workflows). #SPACE_AI=on # Who builds a space when a person describes one (plan 2026-10-22 §Z, stage Z1). # legacy Space's own AI loop (the way it was) # agent a task of the person's own agent (OpenVibe.Actor), with the space_* tools # The old path stays until the new one is proven; nothing is deleted. #SPACE_BUILDER=legacy # OpenVibe.Actor, the person's one agent (the task Space starts, and the tools it works with). #OV_ACTOR_INTERNAL_URL=http://127.0.0.1:4950 # OpenVibe.Events → Space (account export and deletion, server/account-data.js): signs deliveries to /internal/events (32+ characters). #SPACE_EVENTS_SECRET= #OV_AI_INTERNAL_URL=http://127.0.0.1:4700 #SPACE_SPACES_PER_OWNER=25 #SPACE_AI_BUILDS_PER_DAY=20 #SPACE_AI_ASKS_PER_SPACE_PER_DAY=500 SPACE_SITES_DOMAIN=openvibe.website SPACE_STORAGE_DIR=./data/objects # SPACE_OBJECT_STORE=media # OV_MEDIA_URL=http://127.0.0.1:4100 # OV_MEDIA_NAMESPACE=space # SPACE_FORM_SECRET= # set a stable random value for dashboard forms # SPACE_WORKER=off # off only for tests; default on # SPACE_PGLITE_DIR= # development-only embedded database path # SPACE_MAX_UPLOAD_BYTES=104857600 # SPACE_MAX_UNPACKED_BYTES=268435456 # SPACE_MAX_CONCURRENT_UPLOADS=2 # SPACE_MIN_FREE_BYTES=5368709120 # SPACE_MAX_PROJECTS_PER_OWNER=10 # SPACE_QUOTA_STORAGE_BYTES=1073741824 # SPACE_QUOTA_DEPLOYS_PER_DAY=50 # SPACE_QUOTA_MAX_FILES=10000 # SPACE_QUOTA_MAX_FILE_BYTES=26214400 # SPACE_QUOTA_SITES=10 # SPACE_QUOTA_CUSTOM_DOMAINS=5 # SPACE_SANDBOX_QUOTA_STORAGE_BYTES=104857600 # SPACE_SANDBOX_QUOTA_DEPLOYS_PER_DAY=20 # SPACE_SANDBOX_QUOTA_MAX_FILES=2000 # SPACE_SANDBOX_QUOTA_MAX_FILE_BYTES=10485760 # SPACE_SANDBOX_QUOTA_SITES=3 # SPACE_SANDBOX_QUOTA_CUSTOM_DOMAINS=0 # SPACE_CNAME_TARGET= # SPACE_ORIGIN_IPV4= # SPACE_ORIGIN_IPV6= # SPACE_DNS_SERVERS= # SPACE_DOMAIN_RECHECK_MS=600000 # SPACE_DOMAIN_PENDING_DAYS=7 # SPACE_DOMAIN_LAPSE_DAYS=7 # SPACE_RESERVED_DOMAINS= # SPACE_RESERVED_SITE_NAMES= # SPACE_ACTOR_LIMITS=on # EVENTS_URL= # EVENTS_RELAY_INTERVAL_MS=2000 # SPACE_BILLING_INTERVAL_MS=0 # >0: daily gb-month storage readings to Billing (local store only) # OV_BILLING_URL= # Billing base URL; unset keeps readings queued # OV_BILLING_AUDIENCE=openvibe.billing # SPACE_BILLING_TIMEOUT_MS=10000 # INDEXNOW_KEY= # VALKEY_URL= # VALKEY_PREFIX=ov:space: # API_CORS_ORIGINS=https://openvibe.network,https://openvibe.codes # Guest drafts (openvibe.website, plan 5.9): a visitor makes a draft on openvibe.space without an account and # edits it with a secret link; a signed-in person claims it later. These limits are the abuse screen's first half. #SPACE_GUEST_DRAFTS=on # off: no guest drafts at all #SPACE_GUEST_DRAFTS_PER_IP_PER_DAY=3 # drafts one address may make a day #SPACE_GUEST_AI_BUILDS_PER_IP_PER_DAY=2 # AI builds (and changes) one address may ask for a day #SPACE_GUEST_AI_EDITS_PER_DRAFT=20 # AI changes one draft may have #SPACE_GUEST_DRAFTS_PER_DAY=500 # drafts the whole service makes a day #SPACE_GUEST_TTL_DAYS=7 # a draft lives this long after its last edit #SPACE_GUEST_CLEANUP_INTERVAL_MS=3600000 # the job that removes the drafts whose time is up