tyto-chat/desktop

TypeScript

0

42 commits

updated Oct 1, 2026

See the code

See what people are saying

SourceMessageScoreDate

Yet another, MIT self-hostable Discord alternative: tyto.chat (r/homelab)

Hello! I would like to share a project that I've been working on for the past \~7 months, which started as a small solution I prepared for myself and a small group of close friends: an open-source, MIT-licensed, decentralized alternative to Discord that you can self-host:…

0

Oct 1, 2026

README

tyto.chat desktop

The desktop app for tyto.chat, for macOS, Windows and Linux.

It is a thin Electron shell around the Tyto web client built in desktop mode. The shell adds what a browser tab cannot: credentials kept in the operating system keychain, a tray icon, native notifications, tyto:// links and automatic updates. All chat features live in the client.

Requirements

  • Node.js 22.12 or newer
  • git and bash
  • Linux only: a running secret service such as GNOME Keyring or KWallet

Development

npm install
npm run build:client   # builds the client pinned in client-ref into app/renderer
npm start

To run the shell against a client dev server instead of the bundled build:

TYTO_DEV_URL=https://client.ddev.site npm start

To bundle a local client checkout instead of the pinned one:

TYTO_CLIENT_REPO=/path/to/client TYTO_CLIENT_REF=my-branch npm run build:client
CommandWhat it does
npm testUnit tests
npm run typecheckType check
npm run lintLint
npm run format:checkFormatting check
npm run smokeStarts the app with its window hidden and checks that it boots and the bridge works. Needs a display: use xvfb-run where there is none
npm run packUnpacked build for the current platform in dist/
npm run distInstallers for the current platform in dist/
npm run dist:archArch Linux package in dist/. Run it in the electronuserland/builder Docker image; the packaging tool does not start on Arch itself
npm run iconsRegenerates app and tray icons from build/icon.svg

Which client gets bundled

client-ref holds the commit or tag of tyto-chat/client that a build packages. Changing the bundled client means changing that file and releasing a new desktop version.

Releasing

  1. Set version in package.json.
  2. Update client-ref if the release should carry a newer client.
  3. Commit, then tag the commit v<version> and push the tag.

The release workflow builds installers for all three platforms and publishes them to the GitHub release for that tag. A platform without a signing certificate is still built, unsigned, and its release is marked as a prerelease.

Security

The page runs sandboxed with context isolation and no Node.js access. The preload script is the only privileged code and exposes one narrow object to the page. The shell refuses to start rather than store credentials without operating system encryption.

Report vulnerabilities as described in the client security policy.

License

MIT, see LICENSE.

tyto-chat/desktop

TypeScript

0

42 commits

updated Oct 1, 2026

See the code

See what people are saying

SourceMessageScoreDate

Yet another, MIT self-hostable Discord alternative: tyto.chat (r/homelab)

Hello! I would like to share a project that I've been working on for the past \~7 months, which started as a small solution I prepared for myself and a small group of close friends: an open-source, MIT-licensed, decentralized alternative to Discord that you can self-host:…

0

Oct 1, 2026

README

tyto.chat desktop

The desktop app for tyto.chat, for macOS, Windows and Linux.

It is a thin Electron shell around the Tyto web client built in desktop mode. The shell adds what a browser tab cannot: credentials kept in the operating system keychain, a tray icon, native notifications, tyto:// links and automatic updates. All chat features live in the client.

Requirements

  • Node.js 22.12 or newer
  • git and bash
  • Linux only: a running secret service such as GNOME Keyring or KWallet

Development

npm install
npm run build:client   # builds the client pinned in client-ref into app/renderer
npm start

To run the shell against a client dev server instead of the bundled build:

TYTO_DEV_URL=https://client.ddev.site npm start

To bundle a local client checkout instead of the pinned one:

TYTO_CLIENT_REPO=/path/to/client TYTO_CLIENT_REF=my-branch npm run build:client
CommandWhat it does
npm testUnit tests
npm run typecheckType check
npm run lintLint
npm run format:checkFormatting check
npm run smokeStarts the app with its window hidden and checks that it boots and the bridge works. Needs a display: use xvfb-run where there is none
npm run packUnpacked build for the current platform in dist/
npm run distInstallers for the current platform in dist/
npm run dist:archArch Linux package in dist/. Run it in the electronuserland/builder Docker image; the packaging tool does not start on Arch itself
npm run iconsRegenerates app and tray icons from build/icon.svg

Which client gets bundled

client-ref holds the commit or tag of tyto-chat/client that a build packages. Changing the bundled client means changing that file and releasing a new desktop version.

Releasing

  1. Set version in package.json.
  2. Update client-ref if the release should carry a newer client.
  3. Commit, then tag the commit v<version> and push the tag.

The release workflow builds installers for all three platforms and publishes them to the GitHub release for that tag. A platform without a signing certificate is still built, unsigned, and its release is marked as a prerelease.

Security

The page runs sandboxed with context isolation and no Node.js access. The preload script is the only privileged code and exposes one narrow object to the page. The shell refuses to start rather than store credentials without operating system encryption.

Report vulnerabilities as described in the client security policy.

License

MIT, see LICENSE.

Languages

TypeScript

94.4%

JavaScript

3.6%

Shell

2.0%