Contributing

From a typo to a network adapter. Talk it through on Discord, or follow CONTRIBUTING.md. This page is the short version.

Roadmap

The goal is a client as full as Slack, Discord, Telegram, Teams, and Signal, that stays small and fast. These five increments are what is underway. Each one is usable on its own. Discord and Slack came first, because they signed in first. Signal is partial.

IncrementDone whenWhere it stands
1. Looks real A normal conversation reads here: avatars, names, images, files, links, formatting, mentions, emoji, edits, deletions, reactions, scrollback, a multi-line composer. In, on Discord, Slack, Teams and Telegram. On Signal a photo or file is a labelled line, not the file.
2. Everything and everyone Every server, channel and group is listed. People, presence, typing, starting a DM, the quick switcher, unread, mentions and mutes are right. A DM or mention notifies, and the Dock badge matches. The lists, people, presence, typing, unread and mutes are in. Notifications and the Dock badge are not.
3. Answer in kind Threads, reactions, reply, edit, delete, paste, attach, mention completion, the emoji picker, and message search. Nobody can tell which client sent it. All of that is in except message search. The switcher finds conversations by title in the local cache.
4. Talk A call in mediad, which runs only while the call does. Discord voice first, then one screen share each way. Slack huddles after a spike that is heard on a real huddle. Telegram 1:1 calls. Teams calls and meetings open in Teams. Discord voice is in, including its end-to-end encryption. Video, screen share, Slack huddles and Telegram calls are not. Their buttons open the official app.
5. Four networks Telegram, then Teams chat, at the level of increments 1 to 3. Teams meetings open in Teams until the native join ships. A work or school Teams account can still be blocked by the tenant, and nothing here changes that. Telegram and Teams chat are in at that level, except search and notifications. Teams personal accounts are not built.

What is not built yet opens in the official app, on the exact item. That includes admin, moderation, bot buttons, app platforms, canvases, a video gallery, and Teams meetings. Those are part of the goal. Each one ships when it can pass the same memory, speed, and idle budgets. The line is in docs/product/01-persona-scope.md.

Where help is needed

Say which area you want on Discord, and it is yours until it ships or you hand it back. One area at a time.

The product documents are the spec. Read the one named for your area before you write code. Where a document still leaves a choice open, propose the answer in Discord. Once there is general agreement, the decision goes into that document in the same change as the code. A bug report with the redacted log counts, and so does testing an area someone else owns, on a real account, on Linux or on Windows.

The order below is the order we would build them. A later row is still open if that is the one you want.

AreaDone whenSpec
Notifications and the Dock badge A DM or mention while the window is in the background posts one notification. Reading it on another device clears it here. The settings that control posting, sound, quiet hours and the badge are real, and each one passes the check in the settings doc. 04, 09
Message search Typing searches cached messages. Enter searches the network. Results are labelled with where they came from, and opening one lands on that message. 05
Discord video and screen share Watch one share, then send one. One surface, never a grid. mediad is gone when the call ends. 06
Slack huddles A spike that joins a real huddle and is heard. Audio ships only if that spike holds. Until then the button opens Slack. 06
Telegram calls A 1:1 call. Group calls stay a hand-off. 06
Signal Photos and files shown, safety numbers shown, and calls only if they fit the same mediad rules as Discord voice. architecture
Terminal An interactive UI on the existing socket. The protocol is the whole API. The window never has to change for it. architecture
Packaging A notarized macOS app, Linux packages, and a Windows installer. Notifications on macOS need the bundle. 08
Real-account testing Teams, Telegram and Signal, and the whole app on Linux and Windows, exercised on a real account. The deliverable is a bug report with the redacted log. 07
Voice messages A voice message plays. Recording one is later. 03
Teams personal accounts Sign-in and chat for a personal Microsoft account, or a written finding that the flow does not work. 08
The rest of Settings The settings rows marked v1 that are still absent, after notifications. Light theme is the last of them. 09

Start here

git clone https://github.com/itz4blitz/tinyclient
cd tinyclient
cargo test --workspace
TINYCLIENT_DIR=/tmp/tinyclient-demo cargo run -p chatd -- --seed-demo=live
TINYCLIENT_DIR=/tmp/tinyclient-demo cargo run -p tinyclient --features gui

Work against the demo or the tests’ local fakes. Run chatd with TINYCLIENT_DIR set while developing, so a half-finished change never touches your real sessions or cache. Build from source lists the prerequisites.

What a change must keep true

Where the documentation lives

DocumentAnswers
docs/architecture.mdHow the processes fit, the socket contract, where data lives, what an adapter must do
docs/stories.md, docs/product/What is in the product and what is not built yet; budgets and account risk
docs/design.md, docs/design/The visual system, with an HTML mockup per area
SECURITY.mdHow to report a vulnerability

License

The source is MIT. A chatd built with the default signal feature links AGPL-3.0 libraries and is distributed under the AGPL-3.0 as a combined work.

Edit this page on GitHub