Advertisement
About

One account, four things

Koula Chat started as a Minecraft mod. The idea was simple enough: put a speaker block, a microphone block and a screen block into the game so players could actually talk to each other and share things in-world instead of alt-tabbing to another app.

The mod needed somewhere to send that audio and those messages, so a companion web service went up next to it. Then the web service needed accounts, then the accounts needed somewhere to hang out while nobody was in Minecraft — and that is how an arcade ended up bolted to a voice chat platform. It sounds like an accident because it is one, but the parts fit together better than they have any right to.

🎮

Play before you register

Ten games open with no account. Sign-up exists to save your scores, not to unlock the door. If the games are not good enough to make you want an account, that is a problem with the games.

🔒

Collect as little as possible

No email at sign-up. No analytics. No ad scripts. Passwords are salted hashes and messages are encrypted at rest. Data that is never collected cannot leak.

🔧

Boring protocols win

The bridge is line-delimited JSON over TCP because that is implementable in an afternoon in any language and debuggable with netcat. Clever formats create support tickets.

The stack

LayerWhat it is
Web serverFlask with Flask-SocketIO, threading async mode
Core dataSQLite for users, servers, messages and the KAL ledger
Arcade dataAtomic JSON files for scores, profiles and tickets
RealtimeSocket.IO for presence, signalling and ringing
CallsBrowser-native WebRTC, peer to peer, public STUN
GamesPlain canvas and JavaScript. No framework, no build step
BridgeThreaded TCP server speaking line-delimited JSON
ModFabric for Minecraft 26.1.2, Java 25, Fabric Loom

Where it is going

Core mod working

Blocks, items and registration all running on Minecraft 26.1.2 after the API migration.

Website and bridge

Accounts, servers, DMs, calls and a live bridge status monitor.

Arcade

Ten games, guest play, XP, achievements and leaderboards.

Embedded browser on the screen block

MCEF via Keksuccino's fork, with right-click passthrough and an input lock for typing.

Multiblock screens

Adjacent screen blocks merging into one larger display.

In-game VoIP

Device enumeration and audio I/O through javax.sound.sampled, relayed over the existing server connection rather than peer to peer.

Custom 3D block models

Proper Blockbench models so the blocks stop being cubes.

Built by KOULA

A hobby project that got out of hand, in the best way. Found a bug or want something added? Open a ticket — they get read.