konvene

Run your own Konvene

Konvene is a folder of static files plus one optional function. Put it on Netlify, Vercel or any web host, under your own name and with your own settings. The code is at https://github.com/rakeshmenon/konvene.

The site you're on is the public demo. Your own copy works exactly the same, and calls on it never touch the demo.

Deploy in one click

Both buttons copy the code into your own GitHub account, build it and give you a web address. Every change you push goes live on its own.

Deploy to Netlify Deploy to Vercel

The build settings are already in the code (netlify.toml and vercel.json), so there is nothing to fill in. Add settings later under Environment variables in your host's dashboard, then redeploy.

Run it on your computer

You need Node.js 22 or newer and git.

git clone https://github.com/rakeshmenon/konvene
cd konvene
npm install
npm run dev

Open http://localhost:8790. To try a call on one computer, open http://localhost:8790/?local=1 in two tabs. Browsers only allow the camera on localhost and on HTTPS addresses, so a real call between two computers needs the site deployed.

Deploy to any web host

npm run build makes a dist/ folder. Upload that folder to any static host. The only rule: send unknown paths to /index.html, because call links look like /abc-def-ghj.

Static hosts can't run the relay function. Calls still work; see the relay section for what that means.

Settings

Everything is optional. Set these as environment variables in your host's dashboard, or copy .env.example to .env on your computer. KONVENE_ settings end up in the page, so anyone can read them. Secrets never start with KONVENE_ and stay on the server.

VariableWhat it does
KONVENE_APP_IDCalls only meet browsers with the same app ID. Set your own (for example acme-calls) to keep your calls apart from other copies.
KONVENE_OPERATORYour name or organisation, shown on the privacy page.
KONVENE_CONTACT_URLA contact link for the privacy page (a web page or mailto: link).
KONVENE_REPO_URLWhere your copy's code lives. The GitHub links on the site point here.
KONVENE_RELAYSYour own Nostr relays for the handshake, comma separated. Leave empty for the public defaults.
CLOUDFLARE_TURN_KEY_ID
CLOUDFLARE_TURN_API_TOKEN
Secret. Cloudflare relay for strict networks (see below).
TURN_URLS, TURN_USERNAME, TURN_CREDENTIALSecret. Any other TURN server, such as your own coturn.

A relay for strict networks

Most calls connect directly. Some networks (strict offices, hotels, some mobile carriers) won't allow that, and those calls need a TURN relay. The relay passes the call along still encrypted; it can't see or hear it.

  1. In the Cloudflare dashboard, open Realtime, then TURN Server, and create a TURN key. Cloudflare has a free allowance.
  2. Copy the key ID and the API token.
  3. In Netlify or Vercel, add them as CLOUDFLARE_TURN_KEY_ID and CLOUDFLARE_TURN_API_TOKEN, marked secret, and redeploy.

The included function (/api/turn) swaps your secret for passwords that expire after a few hours, so the secret never reaches a browser. On a host without functions you can set KONVENE_TURN_URLS, KONVENE_TURN_USERNAME and KONVENE_TURN_CREDENTIAL instead, but those are visible to anyone, so only use credentials made for that.

Licence

Konvene is licensed under the GNU AGPL v3. You can use, change and share it for free, including commercially. If you run a changed version for other people, you must offer them its source code: put your copy on GitHub and set KONVENE_REPO_URL, and the links on your site do that for you. Keep the licence notices for the bundled libraries and models (they travel inside app.js).

Help and contributing

Questions, bugs and ideas go to GitHub issues. Want to help? Read CONTRIBUTING.md.

Back to Konvene ยท Privacy