Skip to content

Repository files navigation

Hang

Real-time communication platform built on Media over QUIC.

Try it at hang.live.

Architecture

Hang combines a closed-source application layer with an open-source media streaming library:

  • app — Web frontend built with SolidJS, Vite, and Tailwind CSS v4
  • api — Backend running on Cloudflare Workers with Hono and Drizzle ORM
  • native — Desktop/mobile app using Tauri v2 The frontend and backend share types via Hono RPC. Real-time media is streamed over WebTransport using the MOQ protocol, consumed as published npm packages (@moq/*).

Project Structure

app/        Web frontend (SolidJS + Vite)
api/        Backend API (Cloudflare Workers + Hono)
native/     Desktop/mobile app (Tauri v2)
dev/        Local relay server config

Prerequisites

Required:

  • bun — package manager and runtime
  • just — command runner
  • Rust — for the native app

Recommended:

  • Nix + direnv — handles all dependencies automatically via flake.nix

Getting Started

Clone the repo:

git clone https://github.com/moq-dev/hang.live.git
cd hang.live

With Nix + direnv (recommended):

direnv allow
just dev

Without Nix:

bun install
just dev

just dev starts three services concurrently:

  • api — Cloudflare Workers dev server (via wrangler)
  • app — Vite dev server on port 1420
  • relay — MOQ relay server

Commands

Command Description
just dev Run all dev servers
just check Run linting and type checks
just fix Auto-fix formatting and lint issues
just build Build all packages
just deploy Deploy the live API and app to Cloudflare
just native Run the native desktop app

MOQ (Media over QUIC)

Hang uses moq — an open-source library for real-time media streaming over WebTransport and QUIC. The @moq/* npm packages provide the protocol implementation, and the moq-relay binary (via nix flake) runs the local relay server. See moq.dev for full documentation.

License

Dual-licensed under MIT or Apache 2.0, at your option.

MoQ source dependency

This migration pins MoQ as the moq submodule until the room package is released. Clone with git clone --recurse-submodules, or run git submodule update --init in an existing checkout, then bun install --frozen-lockfile. The app uses the submodule's MoQ workspaces, so CI and local builds use the same source.

About

hang.live

Resources

Stars

27 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages