Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions site/.well-known/agent-skills/tinyclient/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: tinyclient
description: Answer questions about tinyclient, a local open-source chat client for Slack, Discord, Telegram, Teams, and Signal. Use when someone asks how to install it, where data lives, or whether tinyclient has an account or API.
description: Answer questions about tinyclient, a local open-source chat client for Slack, Discord, Telegram, Teams, Signal, and Android Messages. Use when someone asks how to install it, where data lives, or whether tinyclient has an account or API.
---

# tinyclient
Expand All @@ -17,7 +17,7 @@ tinyclient is a native desktop app. It has no tinyclient account, no tinyclient

## Do not invent

Do not tell a person to register an agent, mint an OAuth token, or call a tinyclient HTTP API. None of those exist. Sign-in happens inside the app, against Slack, Discord, Telegram, Teams, or Signal.
Do not tell a person to register an agent, mint an OAuth token, or call a tinyclient HTTP API. None of those exist. Sign-in happens inside the app, against Slack, Discord, Telegram, Teams, Signal, or Android Messages.

## What the site is

Expand Down
22 changes: 22 additions & 0 deletions site/.well-known/ai-catalog.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,28 @@
"where does tinyclient keep my messages"
]
},
{
"identifier": "urn:air:tinyclient.io:docs:using",
"displayName": "Using tinyclient",
"type": "text/html",
"url": "https://tinyclient.io/docs/using.html",
"representativeQueries": [
"tinyclient keyboard shortcuts",
"how do tinyclient updates work",
"systemd user service for chatd"
]
},
{
"identifier": "urn:air:tinyclient.io:docs:networks",
"displayName": "Networks and terms",
"type": "text/html",
"url": "https://tinyclient.io/docs/networks.html",
"representativeQueries": [
"does tinyclient support Android Messages",
"what can tinyclient do on Discord Slack Signal",
"which tinyclient features are not built yet"
]
},
{
"identifier": "urn:air:tinyclient.io:docs:privacy",
"displayName": "Privacy and security",
Expand Down
2 changes: 1 addition & 1 deletion site/auth.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

tinyclient does not run an account service. There is no agent registration, no client id, and no credential to claim or revoke.

The desktop app signs in to Slack, Discord, Telegram, Microsoft Teams, and Signal on the computer where it is installed. Those sessions stay in the operating system keychain. tinyclient.io does not issue access tokens, does not accept credentials, and does not proxy messages.
The desktop app signs in to Slack, Discord, Telegram, Microsoft Teams, Signal, and Android Messages on the computer where it is installed. Those sessions stay in the operating system keychain. tinyclient.io does not issue access tokens, does not accept credentials, and does not proxy messages.

## Audience

Expand Down
4 changes: 3 additions & 1 deletion site/docs/architecture.html
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
<h2>Documentation</h2>
<ul>
<li><a href="index.html">Getting started</a></li>
<li><a href="using.html">Using tinyclient</a></li>
<li><a href="build.html">Build from source</a></li>
<li><a href="architecture.html" aria-current="page">Architecture</a></li>
<li><a href="performance.html">Size &amp; performance</a></li>
Expand Down Expand Up @@ -111,6 +112,7 @@ <h2 id="adapters">Adapters</h2>
<tr><th scope="row">Teams</th><td>The chat service and push channel of Microsoft&rsquo;s Teams client, written in this repository</td><td>System</td></tr>
<tr><th scope="row">Telegram</th><td><a href="https://codeberg.org/Lonami/grammers">grammers</a>, a pure-Rust MTProto client</td><td>MTProto&rsquo;s own encryption</td></tr>
<tr><th scope="row">Signal</th><td><a href="https://github.com/whisperfish/presage">presage</a>, on libsignal-service-rs and Signal&rsquo;s libsignal</td><td>rustls, pinned to Signal&rsquo;s certificate authority</td></tr>
<tr><th scope="row">Messages</th><td>The same pairing <code>messages.google.com</code> uses, written in this repository. The phone stays the account.</td><td>System</td></tr>
</tbody>
</table>
</div>
Expand Down Expand Up @@ -149,7 +151,7 @@ <h2 id="sizes">Sizes</h2>
<footer class="site-footer">
<div class="wrap">
<div class="fine">
<p>tinyclient is open source under the MIT license; a <code>chatd</code> built with Signal support is a combined work under the AGPL-3.0. Not affiliated with Slack, Discord, Telegram, Microsoft or Signal; network icons from <a href="https://github.com/homarr-labs/dashboard-icons">Dashboard Icons</a> (Apache-2.0).</p>
<p>tinyclient is open source under the MIT license; a <code>chatd</code> built with Signal support is a combined work under the AGPL-3.0. Not affiliated with Slack, Discord, Telegram, Microsoft, Signal or Google; network icons from <a href="https://github.com/homarr-labs/dashboard-icons">Dashboard Icons</a> (Apache-2.0).</p>
<p>This website sets no cookies, runs no analytics and loads nothing from any other site. Cloudflare Pages hosts it and can see your request the way any web server can.</p>
</div>
</div>
Expand Down
5 changes: 3 additions & 2 deletions site/docs/build.html
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
<h2>Documentation</h2>
<ul>
<li><a href="index.html">Getting started</a></li>
<li><a href="using.html">Using tinyclient</a></li>
<li><a href="build.html" aria-current="page">Build from source</a></li>
<li><a href="architecture.html">Architecture</a></li>
<li><a href="performance.html">Size &amp; performance</a></li>
Expand Down Expand Up @@ -129,15 +130,15 @@ <h3 id="screenshots">Screenshots without screen recording</h3>
<h2 id="tests">Tests</h2>
<p>The <code>chatd</code> tests drive the daemon through its socket against local fakes of each network: HTTP and websocket fakes for Discord, Slack and Teams, and scripted wires for Telegram and Signal. <code>mediad</code>&rsquo;s tests run a whole encrypted call against a fake voice server. None of them needs an account or the network.</p>

<nav class="pager" aria-label="Previous and next"><a href="index.html"><span>Previous</span>Getting started</a><a class="next" href="architecture.html"><span>Next</span>Architecture</a></nav>
<nav class="pager" aria-label="Previous and next"><a href="using.html"><span>Previous</span>Using tinyclient</a><a class="next" href="architecture.html"><span>Next</span>Architecture</a></nav>
<p class="edit"><a href="https://github.com/itz4blitz/tinyclient/blob/main/site/docs/build.html">Edit this page on GitHub</a></p>
</main>
</div>

<footer class="site-footer">
<div class="wrap">
<div class="fine">
<p>tinyclient is open source under the MIT license; a <code>chatd</code> built with Signal support is a combined work under the AGPL-3.0. Not affiliated with Slack, Discord, Telegram, Microsoft or Signal; network icons from <a href="https://github.com/homarr-labs/dashboard-icons">Dashboard Icons</a> (Apache-2.0).</p>
<p>tinyclient is open source under the MIT license; a <code>chatd</code> built with Signal support is a combined work under the AGPL-3.0. Not affiliated with Slack, Discord, Telegram, Microsoft, Signal or Google; network icons from <a href="https://github.com/homarr-labs/dashboard-icons">Dashboard Icons</a> (Apache-2.0).</p>
<p>This website sets no cookies, runs no analytics and loads nothing from any other site. Cloudflare Pages hosts it and can see your request the way any web server can.</p>
</div>
</div>
Expand Down
22 changes: 14 additions & 8 deletions site/docs/contributing.html
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
<h2>Documentation</h2>
<ul>
<li><a href="index.html">Getting started</a></li>
<li><a href="using.html">Using tinyclient</a></li>
<li><a href="build.html">Build from source</a></li>
<li><a href="architecture.html">Architecture</a></li>
<li><a href="performance.html">Size &amp; performance</a></li>
Expand All @@ -59,7 +60,7 @@ <h1>Contributing</h1>
<p class="lede">From a typo to a network adapter. Talk it through on <a href="https://discord.gg/kJHK7BNvJP">Discord</a>, or follow <a href="https://github.com/itz4blitz/tinyclient/blob/main/CONTRIBUTING.md"><code>CONTRIBUTING.md</code></a>. This page is the short version.</p>

<h2 id="roadmap">Roadmap</h2>
<p>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.</p>
<p>The goal is a client as full as Slack, Discord, Telegram, Teams, Signal and Android Messages, 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 and Messages are partial: photos and files are named, not shown.</p>
<div class="table-wrap" tabindex="0" role="region" aria-label="Roadmap">
<table>
<thead><tr><th scope="col">Increment</th><th scope="col">Done when</th><th scope="col">Where it stands</th></tr></thead>
Expand All @@ -77,17 +78,17 @@ <h2 id="roadmap">Roadmap</h2>
<tr>
<th scope="row">3. Answer in kind</th>
<td>Threads, reactions, reply, edit, delete, paste, attach, mention completion, the emoji picker, and message search. Nobody can tell which client sent it.</td>
<td>All of that is in except message search. The switcher finds conversations by title in the local cache.</td>
<td>All of that is in the window except message search. <code>tinyclient --text --search</code> searches cached message text. The switcher finds a conversation, a person or a server. Opening a hit in the window, and searching the network, are not built.</td>
</tr>
<tr>
<th scope="row">4. Talk</th>
<td>A call in <code>mediad</code>, 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.</td>
<td>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.</td>
</tr>
<tr>
<th scope="row">5. Four networks</th>
<td>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.</td>
<td>Telegram and Teams chat are in at that level, except search and notifications. Teams personal accounts are not built.</td>
<th scope="row">5. Every network</th>
<td>Telegram, then Teams chat, at the level of increments 1 to 3, then Signal and Android Messages. 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.</td>
<td>Telegram and Teams chat are in at that level, except search and notifications. Signal and Messages send and receive text; their photos and files are a labelled line. Teams personal accounts are not built.</td>
</tr>
</tbody>
</table>
Expand All @@ -109,7 +110,7 @@ <h2 id="needed">Where help is needed</h2>
</tr>
<tr>
<th scope="row">Message search</th>
<td>Typing searches cached messages. Enter searches the network. Results are labelled with where they came from, and opening one lands on that message.</td>
<td>Typing in the window searches cached messages and opening one lands on that message. Enter searches the network. The text shell already searches the cache.</td>
<td><a href="https://github.com/itz4blitz/tinyclient/blob/main/docs/product/05-navigation.md"><code>05</code></a></td>
</tr>
<tr>
Expand All @@ -132,14 +133,19 @@ <h2 id="needed">Where help is needed</h2>
<td>Photos and files shown, safety numbers shown, and calls only if they fit the same <code>mediad</code> rules as Discord voice.</td>
<td><a href="https://github.com/itz4blitz/tinyclient/blob/main/docs/architecture.md"><code>architecture</code></a></td>
</tr>
<tr>
<th scope="row">Messages</th>
<td>Reactions, and photos and files shown. The phone stays the account. Calls stay on the phone until a design says otherwise.</td>
<td><a href="networks.html#messages">Networks</a></td>
</tr>
<tr>
<th scope="row">Terminal</th>
<td>An interactive UI on the existing socket. The protocol is the whole API. The window never has to change for it.</td>
<td><a href="https://github.com/itz4blitz/tinyclient/blob/main/docs/architecture.md"><code>architecture</code></a></td>
</tr>
<tr>
<th scope="row">Packaging</th>
<td>A notarized macOS app, Linux packages, and a Windows installer. Notifications on macOS need the bundle.</td>
<td>Linux packages and a Windows installer are published. Still open: a notarized macOS app, and code signing on Windows. Notifications on macOS need the bundle.</td>
<td><a href="https://github.com/itz4blitz/tinyclient/blob/main/docs/product/08-sign-in-accounts.md"><code>08</code></a></td>
</tr>
<tr>
Expand Down Expand Up @@ -207,7 +213,7 @@ <h2 id="license">License</h2>
<footer class="site-footer">
<div class="wrap">
<div class="fine">
<p>tinyclient is open source under the MIT license; a <code>chatd</code> built with Signal support is a combined work under the AGPL-3.0. Not affiliated with Slack, Discord, Telegram, Microsoft or Signal; network icons from <a href="https://github.com/homarr-labs/dashboard-icons">Dashboard Icons</a> (Apache-2.0).</p>
<p>tinyclient is open source under the MIT license; a <code>chatd</code> built with Signal support is a combined work under the AGPL-3.0. Not affiliated with Slack, Discord, Telegram, Microsoft, Signal or Google; network icons from <a href="https://github.com/homarr-labs/dashboard-icons">Dashboard Icons</a> (Apache-2.0).</p>
<p>This website sets no cookies, runs no analytics and loads nothing from any other site. Cloudflare Pages hosts it and can see your request the way any web server can.</p>
</div>
</div>
Expand Down
9 changes: 6 additions & 3 deletions site/docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
<h2>Documentation</h2>
<ul>
<li><a href="index.html" aria-current="page">Getting started</a></li>
<li><a href="using.html">Using tinyclient</a></li>
<li><a href="build.html">Build from source</a></li>
<li><a href="architecture.html">Architecture</a></li>
<li><a href="performance.html">Size &amp; performance</a></li>
Expand Down Expand Up @@ -123,6 +124,7 @@ <h3 id="linux-notes">On every distribution</h3>
<li>Sign-ins are kept in the Secret Service (GNOME Keyring or KWallet), which has to be running. Without it, <code>chatd</code> refuses to sign anyone in rather than keep a session it would lose.</li>
<li>The window needs Vulkan, and Wayland or X11.</li>
<li>Linux builds are tested in CI and have had far less hands-on use than macOS. Reports are welcome.</li>
<li>The <code>.deb</code>, <code>.rpm</code> and Arch package can install an optional systemd user service for <code>chatd</code>. It is off until you enable it. <a href="using.html#systemd">How to turn it on</a>.</li>
</ul>

<h2 id="windows">Windows</h2>
Expand All @@ -148,7 +150,8 @@ <h2 id="sign-in">Sign in</h2>
<tr><th scope="row">Slack</th><td>Slack&rsquo;s sign-in page, the same way. Every workspace that sign-in holds is added.</td></tr>
<tr><th scope="row">Teams</th><td>Microsoft&rsquo;s sign-in page. Work and school accounts only; your organization can refuse the sign-in.</td></tr>
<tr><th scope="row">Telegram</th><td>Scan the code tinyclient shows with Telegram on your phone, or enter your phone number and the code Telegram sends. Then your cloud password, if you set one.</td></tr>
<tr><th scope="row">Signal</th><td>On your phone, open Signal &rsaquo; Settings &rsaquo; Linked devices &rsaquo; Link new device, and scan the code. A linked device receives only what arrives after it was linked.</td></tr>
<tr><th scope="row">Signal</th><td>On your phone, open Signal &rsaquo; Settings &rsaquo; Linked devices &rsaquo; Link new device, and scan the code. A linked device receives only what arrives after it was linked. Your own conversation is labelled Note to Self.</td></tr>
<tr><th scope="row">Messages</th><td>Android Messages, paired the way <code>messages.google.com</code> is. Confirm a Google account with the emoji on your phone, or scan the code when the phone still shows a scanner. The phone stays the account and has to stay online.</td></tr>
</tbody>
</table>
</div>
Expand All @@ -174,15 +177,15 @@ <h2 id="sign-out">Sign out and remove</h2>
<h2 id="text">Without a window</h2>
<p><code>tinyclient --text</code>, or any build without the <code>gui</code> feature, prints account status and the inbox as lines of text and exits. An interactive terminal interface is not built yet.</p>

<nav class="pager" aria-label="Previous and next"><a class="next" href="build.html"><span>Next</span>Build from source</a></nav>
<nav class="pager" aria-label="Previous and next"><a class="next" href="using.html"><span>Next</span>Using tinyclient</a></nav>
<p class="edit"><a href="https://github.com/itz4blitz/tinyclient/blob/main/site/docs/index.html">Edit this page on GitHub</a></p>
</main>
</div>

<footer class="site-footer">
<div class="wrap">
<div class="fine">
<p>tinyclient is open source under the MIT license; a <code>chatd</code> built with Signal support is a combined work under the AGPL-3.0. Not affiliated with Slack, Discord, Telegram, Microsoft or Signal; network icons from <a href="https://github.com/homarr-labs/dashboard-icons">Dashboard Icons</a> (Apache-2.0).</p>
<p>tinyclient is open source under the MIT license; a <code>chatd</code> built with Signal support is a combined work under the AGPL-3.0. Not affiliated with Slack, Discord, Telegram, Microsoft, Signal or Google; network icons from <a href="https://github.com/homarr-labs/dashboard-icons">Dashboard Icons</a> (Apache-2.0).</p>
<p>This website sets no cookies, runs no analytics and loads nothing from any other site. Cloudflare Pages hosts it and can see your request the way any web server can.</p>
</div>
</div>
Expand Down
Loading
Loading