Skip to content

Latest commit

 

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Antiphon

A web-based DAW for recording group sessions: phones act as microphones, a laptop acts as the mixing desk, a server provides transport reliability and archival. See docs/ARCHITECTURE.md.

Layout

packages/              Rust crates (Cargo workspace) + shared TS packages
  core/                antiphon-core: chunk protocol, frames, reconciliation, ring buffer
  codec/               antiphon-codec: FLAC via flacenc (pure Rust)
  dsp/                 antiphon-dsp: correlation (realfft), drift (rubato)
  wasm/                antiphon-wasm: thin wasm-bindgen facade over core/codec/dsp
  protocol/            Zod schemas for all signaling messages (web + server)
  core-wasm/           npm wrapper around the built wasm — the ONLY way TS consumes Rust
apps/
  web/                 Vite + React 19 — desk (/session/:uuid) and phone (/join/:uuid)
  server/              Hono + node-datachannel on Node 24 — signaling, ingest, archive, db
e2e/                   Playwright
docs/                  architecture doc + protocol RFC + design references

Prerequisites

  • Node 24 LTS, pnpm 11 (corepack enable) — nvm users: nvm use (reads .nvmrc); Node < 24 fails fast (the server runs TS via built-in type stripping, so v20 dies with ERR_UNKNOWN_FILE_EXTENSION otherwise)
  • Rust (pinned by rust-toolchain.toml, includes wasm32-unknown-unknown)
  • wasm-pack
  • Docker (Postgres for the server: docker compose up -d postgres)

Commands

pnpm install
pnpm build          # turbo: wasm → packages, apps
pnpm dev            # turbo: web + server dev servers
pnpm lint           # biome (lint + format)
pnpm typecheck
pnpm test           # vitest (TS)
pnpm test:rust      # cargo test --workspace
pnpm test:e2e       # playwright
pnpm check          # all of the above

Real-iPhone testing needs HTTPS: cloudflared tunnel --url http://localhost:5173.

Optional: MinIO (local S3 blobs)

Blobs default to the filesystem (BLOB_DRIVER=fs). To exercise the prod S3 driver locally (Cloudflare R2 in prod), run MinIO and point the server at it:

docker compose up -d minio   # S3 API on :9100, console on :9101

Then in apps/server/.env:

BLOB_DRIVER=s3
S3_ENDPOINT=http://localhost:9100
S3_BUCKET=antiphon-dev
S3_ACCESS_KEY_ID=antiphon
S3_SECRET_ACCESS_KEY=antiphon-secret
S3_FORCE_PATH_STYLE=1
S3_REGION=us-east-1

The server creates the bucket at boot (ensureBucket) — no mc side-car needed. With MinIO up, pnpm --filter @antiphon/server test also runs the S3 driver integration suite (it skips itself when :9100 is unreachable).

Key documents

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages