3e090933fdd1301e33a7a1c8ba229ddbbd8b21e4
Match incoming direct-call events against every local identity alias - home id, entity id, peer id, and each provisioned signal-server actor id - instead of only oderId||id. A caller who met the callee through a room on the caller's signal server addresses the ring by the callee's provisioned actor id, so the old admission check silently dropped it: the caller went "In Voice" while the callee saw no modal, no ring audio, and no rail entry. Incoming self aliases are normalized onto the canonical local id (normalizeDirectCallPayloadSelfAliases) so they never appear as a phantom third participant, and remoteParticipantIds / the DM-header peer lookup skip all self aliases. Adds a DM-header call ring e2e including the cross-signal topology (callee homed on a secondary signal server) that fails on the old code. Co-authored-by: Cursor <cursoragent@cursor.com>
MetoYou / Toju
MetoYou is a desktop-first chat stack managed as an npm monorepo. The repository contains the Angular 21 product client, the Electron desktop shell, the Node/TypeScript signaling server, the Playwright E2E suite, and the Angular 19 marketing website.
Packages
| Path | Purpose | Docs |
|---|---|---|
toju-app/ |
Angular 21 product client | toju-app/README.md |
electron/ |
Electron main process, preload bridge, IPC, and desktop integrations | electron/README.md |
server/ |
Signaling server, server-directory API, and websocket runtime | server/README.md |
e2e/ |
Playwright end-to-end coverage for the product client | e2e/README.md |
website/ |
Angular 19 marketing site served separately from the product client | website/README.md |
docs-site/ |
Docusaurus app and plugin documentation served by the Electron Local API | docs-site/docs/intro.md |
Install
- Run
npm installfrom the repository root. - Run
cd server && npm installfor the server package. - If you need to work on the marketing site, run
cd website && npm install. - If you need to work on the Docusaurus docs, run
cd docs-site && npm install. - Copy
.env.exampleto.env.
Configuration
- Root
.envcontrols local SSL withSSL=true|false. - The server also honors an optional
PORTenvironment override at runtime. - When
SSL=true, run./generate-cert.shonce or let./dev.shgenerate local certificates on first launch. server/data/variables.jsonstoresklipyApiKey,releaseManifestUrl,serverPort,serverProtocol,serverHost, andlinkPreview. The server normalizes this file on startup.- When
serverProtocolishttps, the certificates in.certs/must exist and match the configured host or IP.
Main Commands
npm run devstarts the full desktop stack: server, product client, and Electron.npm run startstarts only the Angular product client intoju-app/.npm run electron:devstarts the Angular product client and Electron together.npm run server:devstarts only the server with reload.npm run buildbuilds the Angular product client todist/client.npm run build:docsbuilds the Docusaurus documentation site todocs-site/build.npm run build:electronbuilds the Electron code todist/electron.npm run build:allbuilds the product client, Docusaurus docs, Electron, and server.npm run testruns the product-client Vitest suite.npm run lintruns ESLint across the repo.npm run lint:fixformats Angular templates, sorts template properties, and applies ESLint fixes.npm run test:e2e,npm run test:e2e:ui,npm run test:e2e:debug, andnpm run test:e2e:reportrun the Playwright suite and report tooling.
Repository Map
| Path | Description |
|---|---|
toju-app/src/app/domains/ |
Product-client bounded contexts and domain facades |
toju-app/src/app/infrastructure/ |
Shared client-side technical runtime such as persistence and realtime |
toju-app/src/app/shared-kernel/ |
Cross-domain contracts shared inside the product client |
electron/ |
Electron bootstrap, preload surface, IPC handlers, CQRS, and desktop adapters |
server/src/ |
Express app, websocket runtime, config, CQRS, and persistence layers |
e2e/ |
Playwright tests, helpers, fixtures, and page objects |
website/src/ |
Marketing-site pages, assets, and SSR entry points |
docs-site/ |
Docusaurus source for Electron-hosted application and plugin documentation |
tools/ |
Build, release, formatting, and packaging scripts |
Product Client Docs
| Area | Docs |
|---|---|
| Domains index | toju-app/src/app/domains/README.md |
| Access Control | toju-app/src/app/domains/access-control/README.md |
| Attachment | toju-app/src/app/domains/attachment/README.md |
| Authentication | toju-app/src/app/domains/authentication/README.md |
| Chat | toju-app/src/app/domains/chat/README.md |
| Notifications | toju-app/src/app/domains/notifications/README.md |
| Profile Avatar | toju-app/src/app/domains/profile-avatar/README.md |
| Screen Share | toju-app/src/app/domains/screen-share/README.md |
| Server Directory | toju-app/src/app/domains/server-directory/README.md |
| Theme | toju-app/src/app/domains/theme/README.md |
| Voice Connection | toju-app/src/app/domains/voice-connection/README.md |
| Voice Session | toju-app/src/app/domains/voice-session/README.md |
| Persistence | toju-app/src/app/infrastructure/persistence/README.md |
| Realtime | toju-app/src/app/infrastructure/realtime/README.md |
| Shared Kernel | toju-app/src/app/shared-kernel/README.md |
Supporting Docs
Screenshots
Releases
39
Toju 1.0.210
Latest
Languages
TypeScript
63.7%
JavaScript
25.9%
HTML
9.4%
SCSS
0.7%
Java
0.1%
Other
0.1%