Skip to content
yesokcoolPublic

About

No description, website, or topics provided.

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Yap

Yap in its Windows 98 look: channels and a voice call on the left, a conversation with a poll and dice rolls on the right

A small, calm voice and chat app for one group of friends: text channels and voice channels, plus a few extras. You run it yourself, for free, on Cloudflare. Voice goes straight between friends as high-quality Opus, so it sounds better than most chat apps and costs nothing to run.

Yap was built for one friend group and is shared as is. You're welcome to run your own copy and change it, but there's no support: issues and requests may go unanswered.

What makes it different

  • No presence. No online dots, no "last seen", no read receipts. People only see you in a voice channel or on a shared place.
  • Deleting a message erases it from the server.
  • No ads, analytics or tracking. Your server is yours, and so is the data.
  • Nothing to keep you hooked: no streaks, badges or "you've been away" nags, and quiet hours at night.
  • Light: a web app with no framework, and native apps instead of Electron.

What's in it

  • Chat: channels, replies, reactions (and tiny doodle reactions), @mentions, pins, search, GIFs, pictures, custom emojis, polls, /roll and /flip, spoilers and edits.
  • Voice: peer-to-peer calls at 128 kbps by default (up to Opus's 510). Each packet also carries the one before it, so choppy Wi‑Fi doesn't make voices robotic.
    • Noise suppression (RNNoise, the same AI filter in the browser and the desktop app), echo cancellation, push-to-talk (double-tap to stay live) and push-to-mute, a reminder when you talk while muted, and per-person volume shown on their row.
    • Screen sharing with sound, a soundboard with a loudness cap, and join chimes.
    • A call report you can copy when a call sounded off.
  • Places next to the chat, so the call keeps going:
    • Draw, a shared easel with layers, and a bulletin board of the drawings you've saved (each with its history);
    • Space, a little top-down world where rooms are voice zones;
    • Watch together for YouTube;
    • When's good, a weekly planner with reminders;
    • Questboard, an optional add-on: a shared backlog of Steam games with live prices and voting. It's a separate project you run yourself, and it opens inside Yap.
  • Personal space: notes only you can see, optionally end-to-end encrypted with a passcode.
  • Accounts that fit friends:
    • an invite link is the door, and newcomers wait until the owner or a mod lets them in;
    • an account is a name and a password;
    • sign-in alerts, a device list, and an owner with mods.
  • One look: Windows 98 / AIM, in light or dark.

Apps

  • Web: any modern browser. It can be added to a phone's Home Screen.
  • Desktop: a native Rust app for Windows, macOS and Linux, with global push-to-talk. Your server hosts the downloads and its signed updates (desktop/README.md).
  • iPhone, iPad and Mac: a SwiftUI app. Build it with your own Apple developer account (apple/README.md).

Run your own

You need a free Cloudflare account and Node.js. It takes about ten minutes: SELF_HOSTING.md. Then send your friends the invite link.

Voice is a mesh, with each person connected to everyone else in the call, so one call suits up to about eight people.

How it works

  • Server: one Cloudflare Worker with SQLite-backed Durable Objects (worker/). It's the whole backend: accounts, history, and signaling for voice.
  • Web client: plain JavaScript and CSS (web/), with no framework and no build step.
  • Desktop: Rust and egui (desktop/). iPhone/Mac: SwiftUI (apple/).
  • Voice: WebRTC, straight between people, so audio never touches the server. That's what keeps it free.

PROTOCOL.md describes the wire protocol every client speaks. SECURITY.md explains what protects what, in plain words. PHILOSOPHY.md explains what Yap is and refuses to become.

Build on Yap

The server is a complete chat-and-voice backend on its own, so you can keep it and write your own client, bot or bridge on top:

  • The server is worker/. SELF_HOSTING.md sets one up.

  • The protocol is PROTOCOL.md: every message a client sends and receives, signing in, history, uploads, and how voice connects (WebRTC, person to person).

  • A tiny example client is examples/tiny-client.mjs. It's under 100 lines, needs Node 22 and nothing else, signs in, shows a text channel live and sends what you type:

    node examples/tiny-client.mjs https://chat.example.com <invite key> <name> <password>

    Add --signup to make the account first (the first account on a new server is the owner) and --channel <name> to pick a channel.

  • Full clients to borrow from: the web app (web/, plain JavaScript), the desktop app (desktop/, Rust) and the iPhone/Mac app (apple/, SwiftUI).

Developing

npm install
npm run test:all     # every test, on a test server of its own
# A local server with the test settings. NTFY_SERVER keeps its phone pushes
# on this machine (where the protocol test's fake ntfy listens), never on
# ntfy.sh; TEST_HANGS lets a hang start a second from now.
npm run dev:test -- --port 8787 --persist-to .wrangler/dev-test \
  --var NTFY_SERVER:http://127.0.0.1:8790 --var TEST_HANGS:1

Open http://localhost:8787/#key=testkey. The first person to sign up becomes the owner. For npm run dev (with your own wrangler.jsonc), copy .dev.vars.example to .dev.vars first. CLAUDE.md has the commands and conventions, and docs/DECISIONS.md the design decisions, written for both people and coding agents.

License

Yap is under the MIT License: use it, change it and run it for anyone, as long as the license notice stays with the code. If you run your own copy, you can set SOURCE_URL so the app's Source link points to your code.

Copyright © 2026 yesokcool.

Credits

Yap's icon is the "message-text" glyph from Pixelarticons by Gerrit Halfmann, under the MIT License:

MIT License

Copyright (c) 2019 Gerrit Halfmann

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

About

No description, website, or topics provided.

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages