Open source

WhatsApp

Realtime chat across web, mobile and desktop, on one Go API.

Surfaces
web, admin, mobile, desktop
Architecture
triple

What it looks like

  • Conversations, with unread counts and the last message.

    Conversations, with unread counts and the last message.

  • A chat: photos, read ticks and typing.

    A chat: photos, read ticks and typing.

  • A group, and who has read what.

    A group, and who has read what.

Screenshots of the running application, with its demo data. Nothing here is a mock-up.

{ What you open it for }

The parts that are actually hard.

Every application shows how to build an application, and that sentence helps nobody choose. These are the specific problems this one has already solved.

  • One conversation model reaching four clients without four implementations

  • Message delivery and read state over the domain event bus

  • Attachments through the same storage the rest of the app uses

  • An Expo app and a Wails desktop app against the same shared types

{ Run it }

Six commands, then it is running.

No Docker and no database server. Every blueprint runs on SQLite with files on local disk, so the only thing between a clone and a working application is pnpm install.

What you need first

  • Go 1.21 or newer
  • Node 20 or newer
  • pnpm 10.33.4
  • The Grit CLI, 3.301.0 or newer (grit update)
  • No Docker: it runs on SQLite

What each one does

  1. git clone https://github.com/MUKE-coder/grit-whatsapp && cd grit-whatsapp

    Open source, so there is nothing to buy and nothing to accept.

  2. grit env

    Writes .env from .env.example with every secret freshly generated. The repository has no secrets in it.

  3. pnpm install

    The monorepo: API, web, admin, mobile and desktop.

  4. grit migrate

    Creates the SQLite database and every table.

  5. grit seed

    The admin account.

  6. grit start

    API on 8080, web on 3000, admin on 3001.

whatsapp / terminal
git clone https://github.com/MUKE-coder/grit-whatsapp && cd grit-whatsapp
grit env
pnpm install
grit migrate
grit seed
grit start

Then open

http://localhost:3000/register

Open it in two browsers, make two accounts, and start a chat between them. Messages, typing and read ticks are live.

http://localhost:3001

admin@example.com / admin123

The admin panel: conversations, messages and reported content.

Worth knowing

The phone and the desktop

The Expo app and the Wails desktop app talk to the same API. Both need the API reachable from the device, so set the host to your machine on the network rather than localhost.

pnpm --filter mobile start        # Expo
cd apps/desktop && wails dev      # desktop

Push notifications

Expo push works on a physical device with a development build. The web and desktop clients use the in-app notifications instead, so nothing is required to see the feature work.