OpenCall

Demo deploy (Render)

Bring up an instance to try out, with no card and no domain of your own.

Free path for trying OpenCall out. Not the path for a real community β€” see Real limits at the end.

PieceServiceCost
Next.js hostingRender, Free instanceUS$ 0
PostgresNeon, Free planUS$ 0
LiveKitLiveKit Cloud, Build planUS$ 0
Domainnone*.onrender.com and *.livekit.cloud come with TLS
Attachment storage (optional)Neon Object StorageUS$ 0 β€” can be skipped, see step 5

Read the limits before investing time

The ceiling that bites first is LiveKit Cloud Build: 5 simultaneous WebRTC connections across the whole project. Six people in a call will not fit.

Terminal commands

Some steps here are typed into a terminal and need Node.js installed. If you have never opened one, see "Before you start" in Requirements.

1. App: Render

Render is where the app itself runs, and it comes first on purpose. It is what generates the https://YOUR-SERVICE.onrender.com address that three variables depend on, and it is where every other variable gets pasted. Creating the service now means you fill each variable in the moment it appears, instead of hoarding everything in a notepad until the end.

You need a fork of the OpenCall repo in your account first β€” see GitHub repository.

2. Discord

Discord is how people log in β€” OpenCall has no email/password sign-up.

Follow Set up Discord. Since the service from step 1 already has an address, you can register the final Redirect URI on the first try:

https://YOUR-SERVICE.onrender.com/api/auth/callback/discord

NEXTAUTH_SECRET comes from Generate the session secret β€” one command, no account to create.

Paste into Render: DISCORD_CLIENT_ID, DISCORD_CLIENT_SECRET, NEXTAUTH_SECRET.

3. Voice: LiveKit Cloud

LiveKit is the server that actually carries the audio and video.

Follow LiveKit: Cloud on the Build plan (no card).

There is no command that creates a LiveKit Cloud project β€” this step happens in the browser, even when an AI is doing the rest.

Paste into Render: LIVEKIT_URL, LIVEKIT_API_KEY, LIVEKIT_API_SECRET.

4. Database: Neon

Neon is where the app stores users, messages and settings.

Follow the Option B: Neon (free) section of Database. Free plan, no card, and the whole project can be created from the command line with neonctl.

Use the pooled connection string β€” its host carries the -pooler suffix.

Paste into Render: DATABASE_URL.

5. Attachment storage (optional)

You can bring the demo up without it: voice, video, screen sharing and text chat all work. The only thing missing is attaching images in chat β€” the attachment button does not appear.

To have it, follow Neon Object Storage β€” the same account and the same API key from step 4, so there is no new provider and no card.

Cloudflare R2 also works and is what the production path uses, but it asks for a payment method to enable, even inside the free tier β€” which is the friction this page exists to avoid.

Images share the database's transfer allowance

Neon's 5 GB/month of network transfer covers the whole project, images and database alike, and running out suspends the compute until the next cycle. For a demo it is plenty.

Paste into Render: R2_BUCKET, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, NEXT_PUBLIC_R2_PUBLIC_BASE_URL, R2_ENDPOINT, R2_REGION.

6. Create the tables

The database exists but is still empty. This command creates the tables the app expects.

Render's Free instance has no terminal access, so run it from your own machine, in the folder where you cloned the OpenCall repo.

DATABASE_URL="PASTE_THE_POOLED_STRING" pnpm prisma db push

When it finishes it prints something like Your database is now in sync with your Prisma schema. Then follow the Final check.

Real limits

LimitValueConsequence
Simultaneous WebRTC connections (LiveKit Build)5ceiling on call participants, across all channels
WebRTC minutes/month (LiveKit Build)5,0005 people Γ— 3h is already 900 min
Egress bandwidth (LiveKit Build)50 GB/month
Idleness (Render Free)sleeps after 15 minthe first request after that takes ~1 min
Instance (Render Free)512 MB RAM, 0.1 CPUthe Next.js build is the most likely thing to blow past it
Hours/month (Render Free)750 h per workspace
Database (Neon Free)0.5 GB, 100 CU-h/monthonce the quota runs out, compute stays suspended until the next cycle
Attachment storage (Neon Free)5 GB per projectduring the beta
Network transfer (Neon Free)5 GB/month per projectshared by database and images; running out suspends the compute
Idleness (Neon Free)suspends after 5 minadds ~1s to the first query

Presence, live chat and the call notice live in the process's memory: when Render tears the instance down for idleness, anyone in a call is disconnected and that state resets.

Moving off this

Once 5 simultaneous people is too few: Production deploy (Railway) plus paid LiveKit Cloud or LiveKit self-host. Same variables, pointing somewhere else.

On this page