Nongkrong Try it live
Web app, PWAlive

Sit at a table. Only your table can hear you.

A free 3D warung, kopitiam, angkringan or pub for your city. Walk in, sit at a table, and text and voice stay inside that table.

Web app, PWA
nongkrong · live demolive demo
Nongkrong screenshot
1platform: Web app, PWA
MITopen source licence
How it works

How it works (and what that means for privacy)

  1. 1

    Your name and last city are stored only in your browser (localStorage).

  2. 2

    Browsers find each other through public Nostr relays using Trystero (MIT, bundled in vendor/).

  3. 3

    After that, text and voice go directly from browser to browser over WebRTC (DTLS/SRTP encryption).

  4. 4

    Each city is one presence room (names and seat positions only).

What's inside

What happens at the table

Make the coffee yourself

Step behind the bar as barista: grind, tamp, pull the shot, steam the milk and pour, with close-up sound for every step. Watch from your own eyes, over the shoulder, or a mix of both.

Run the cafe

Open the store as owner: set prices, buy beans and milk, serve the queue and watch the day's income and profit. Play money only, saved in your browser.

Order as a guest

Sit down, pick from the menu board and the barista makes your drink at the bar.

CrewCup Lounge

CrewCup has a Lounge card on the employee home page that opens the same cafe in CrewCup colours.

Table-only chat

Messages go to the people at your table and nobody else.

Table-only voice

Turn on voice and only your table-mates hear you.

Walk around in 3D

Tap the floor or use WASD to walk. Tap a table and your avatar walks over and sits; everyone else moves live.

Every city, its own branch

A kopitiam, a kissaten and a pub each get their own room. Branches of the same place in different cities seat people differently (round cafe tables, square two-tops or long communal benches) and get their own walls, floor, counter and lighting.

Your city on the wall

Each room hangs a print of its city's landmark, like Monas in Jakarta or the Barelang bridge in Batam, and the owner minds the counter.

Local time

The clock shows the time in the region on screen, so you know if people there are on lunch or on a night shift.

Share a table

"Copy link to this table" makes a link that drops a friend at the same table.

Block a person

Block anyone at your table and their messages and voice stop reaching you. Unblock any time.

Light and dark theme

Works on phones, installs as an app (PWA), and the app shell works offline.

Run it yourself

Run it yourself

From the README’s “Run it yourself” section. Full options, requirements and troubleshooting are there too.

Open the README
shell
$ python -m http.server 8000
Your data

How it works (and what that means for privacy)

  • bundled in vendor/). The relays only pass the WebRTC handshake, which is encrypted with a key derived from the room name.
  • Your name and last city are stored only in your browser (localStorage).
  • Browsers find each other through public Nostr relays using Trystero (MIT, bundled in vendor/).
  • After that, text and voice go directly from browser to browser over WebRTC (DTLS/SRTP encryption).
Good to know

Honest limits.

Straight from the README, so you know what you're getting before you try it.

  • Rooms are public: anyone who picks the same city can see your chosen name and seat.
  • There is no TURN relay server, so on some strict networks (some office or mobile networks) two browsers cannot connect directly and will not see each other.
  • Voice uses a full mesh between table-mates, which is why tables have 2 to 8 seats.
  • Moderation is personal (Hide).
  • Text messages are limited to 400 characters and a few per second.
Under the hood

How it's built.

Built with

Language
JavaScriptHTML/CSS
Platform
PWAOffline service worker
Testing
Automated tests

19 files in the repo · last updated 9 Nov 2026.

Browse the code

Recently shipped

  1. Cafe roles: order as a guest, make coffee as barista in three camera views, run the store as owner; CrewCup Lounge; versions gallery

  2. Branches seat people differently (round, square, communal benches), owner tag at the counter, walking tip fades

  3. City landmark prints and street boards, phone shows only your table and busy tables

  4. Pin Trystero 0.21.8 (0.22+ changed the API), layout fixes, online test against live site

  5. Virtual warung and cafe tables with table-only chat and voice

Full history on GitHub
Questions

Good questions.

What does it run on?

Web app, PWA. You can try it in the browser with nothing to install.

How do I get it running?

The commands in the “Run it yourself” box above come straight from the README. Paste them into a terminal; the README covers options and troubleshooting.

Where does my data go?

bundled in vendor/). The relays only pass the WebRTC handshake, which is encrypted with a key derived from the room name. Your name and last city are stored only in your browser (localStorage).

What doesn't it do yet?

Rooms are public: anyone who picks the same city can see your chosen name and seat. There is no TURN relay server, so on some strict networks (some office or mobile networks) two browsers cannot connect directly and will not see each other.

Is it finished?

Not yet: it's marked “live” and still changing. The README always has the current state.

Is it free?

The source is public on GitHub under the MIT licence.

Who made it?

Juwen Lie, an R&D mechanical engineer in Batam, Indonesia, as an independent personal project.

Keep exploring

More from the same workbench.

Mari nongkrong. Pull up a stool.

Sit at a table. Only your table can hear you.