Skip to content
Chatto v0.5.0

Chatto 0.5.0

Release notes

0.5.0 adds bots and webhooks, server-wide search, persistent notifications, a new composer, and desktop apps. Read the upgrade notes before you upgrade: review permissions, update configuration, and plan downtime.

0.5.0

Bots

The rise of the machines is finally upon us! Create bot accounts that post, reply, and react through the same API as members: ConnectRPC, realtime websocket protocol, inbound and outbound webhooks, and even a built-in MCP server make it easy to supercharge your Chatto server with integrations, chatbots, and more, while keeping things transparent and safe for your human users.

Search

Find that old conversation from last year/month/week! Chatto now ships with search built-in. Find stuff within a single room, a server, or even across all your connected servers.

Chatto Desktop

We now have a desktop app! It’s available for macOS, Windows, and Linux, and features auto-updates, native notifications and screen sharing on all platforms.

Notifications 2.0

An all-new notifications feed that shows you everything that’s happened until you dismiss it, with an equally all-new configuration matrix that lets you choose just how much Chatto can bug you when someone posts in that one channel.

Markown? WYSIWYG? Why not both?

Chatto now ships with not just one, but two composers; the Visual Composer gives you the same WYSIWYG editing experience you know from previous versions, but the new Markdown Composer gives you the true Markdown source editing experience with some extra syntax highlighting niceties on top. Both editors feature a useful formatting toolbar, and we’ve also added support for Markdown tables and footnotes.

Threads à la mode

Some rooms are better with threads, others… maybe not. Rooms can now be configured for one of four different threading modes, ranging from “we don’t have threads in this house” to “threads everywhere or else”.

Room invitations

That one private room not everyone is supposed to freely join? You can now lock it down and manually invite users to it. You’re welcome.

Upgraded attachments

Chatto 0.5 features an all-new attachment upload UI that will show you upload progress as it goes. Isn’t technology incredible? To top it off, it also ships with an all new attachment viewer that lets you zoom and pan around images and will even render HTML attachments (yes, h4x0rs, it’s sandboxed.)

Diagrams, ANSI, SVG, oh my!

You can now embed Mermaid diagrams, SVG images, and even ANSI art in code blocks.

Languages!

Chatto is now available in 22 languages. More will be added over time.

UI Customization

Choose an accent color, a flat or 3D style, and a contrast level from soft to pure black and white. Make the entire damn thing look the way that feels good to you. It’s fine.

Room information, notices, and pinned messages

On top of giving a room a description, you can now also publish room notices and pin messages for every memember to see.

  • Start a thread together with its first message with Post as thread.
  • Type # to find and link a room. Use the emoji picker or shortcodes to add emoji, including skin-tone variants.
  • Show a thread beside the room, in a pane that you can resize.
  • The message menu can copy the text, a link, an image, or a link to the message. Code blocks have a copy button.
  • Edited messages show an Edited label. A thread reply that was also posted to the room links to that copy.
  • Put a link in angle brackets, such as <https://example.com>, to send it without a preview.
  • HTML attachments open in a sandboxed preview only after you select Show preview. Download always gives you the original file.
  • When the server processes videos, you can seek in new videos.
  • The room timeline shows when a call starts and ends. The screen stays awake during a call, and system media controls can mute your microphone or end the call.
  • Room notices can stay in the room header or also appear as an announcement in the timeline.
  • Vimeo links can play inline after you select Show video.
  • Push notifications now work for remote servers, too.
  • Send yourself a test push notification from notification settings.
  • Unjoined rooms in a room group collapse into one row. Rooms, room groups, and servers have context menus.
  • Bots have a BOT badge beside their name.
  • Reorder servers in the sidebar, and open keyboard shortcut help with Cmd/Ctrl+Shift+K.
  • A new direct message stays hidden from the other person until you send the first message.
  • Pasted Markdown links keep their label and destination when you edit the message.
  • An edit that happens at the same time as a deletion cannot restore the deleted message.
  • Images and videos fit inside narrow messages.
  • The Files panel loads only when you open it.
  • Members with message.manage can edit their own messages after the edit window.
  • Each member can add up to 20 different reactions to one message.
  • The installed app asks before it reloads for an update. It no longer reloads while you write.
  • The chat stays visible while Chatto reconnects.
  • Active members stay signed in. Chatto no longer signs them out at a fixed deadline.
  • The app badge shows only important activity.
  • Push notifications on a custom domain open Chatto on that domain.
  • Email verification codes are valid for 30 minutes.

Privileged mode

Administrative and moderation permissions stay off during normal use. Enable privileged mode for 15 minutes when you need them. The event log records each activation.

Set up a server in the browser

A new server opens a setup wizard for the server name and the owner account. You do not need a command line or email delivery for the first login.

Invitation codes

Want to control who’s joining your server? Set the whole thing to invite only and hand out invite codes to the people who you actually want on there. Invite codes will work with any registration method (email/password, SSO, …) you’ve configured.

Faster restarts, less memory

Servers with a long history replay faster and use less memory. Optional encrypted snapshots shorten restarts further.

Deactivate or delete accounts

Administrators can deactivate an account to stop access and keep its data, reactivate it, or delete it.

Community badges

Show online and registered member counts on your website with Shields.io badges.

  • Server diagnostics show the health of background workers and asset cleanup, with LiveKit setup diagnostics for calls.
  • Use chatto init for guided configuration, and chatto config check to find unknown or deprecated settings before deployment.
  • HEIC uploads receive image previews that other members can view in their browser.
  • Back up and restore a Docker Compose installation with docker compose run. See Backup and restore.
  • The operator CLI can look up users by login or email address and clear a username cooldown.
  • Password managers find the password change page through /.well-known/change-password. Make sure that your reverse proxy forwards this path.
  • Set nats.embedded.sync_interval to control how often embedded NATS writes to disk.
  • The Chatto binary is smaller.
  • A server process recovers by itself after a short NATS outage.
  • Chatto sends Web Push requests only to public HTTPS addresses.
  • Link previews reject non-public network destinations. Preview logs no longer contain sensitive URL data.
  • The event log no longer contains password data.
  • Permission changes show a pending state.
  • The server description limit applies before you save.
  • The Docker Compose setup restarts services after a failure and uses real health checks.

One API for members and bots

Bots use the same ConnectRPC API and realtime connection as the Chatto client. Direct messages, mentions, and replies activate a bot through normal notifications.

A TypeScript client for integrations

Use @chatto/client for requests, live state, reconnects, and bot message handling. The npm package has no required UI framework and includes TypeScript declarations.

Realtime protocol 4

The realtime connection starts from an exact snapshot, sends semantic events, and resumes after a short disconnection without a full reload.

Model Context Protocol

Connect AI assistants to Chatto through MCP. They read and post messages with the permissions of the member or bot that authorized them. This feature is experimental.

  • Transfer a bot to a new owner. Its permissions and API keys stay.
  • Bots can start direct messages and perform administrative operations when their explicit permissions and their owner’s permissions allow them.
  • Chatto keeps outbound webhook delivery logs for 7 days.
  • Native apps and command-line tools can receive OAuth callbacks on a loopback address.
  • Server discovery reports the server version.
  • Large lists, such as the room directory and role members, now return pages.
  • Find archived rooms through the room directory API.

Review your permissions before you upgrade

Section titled “Review your permissions before you upgrade”

These notes cover the upgrade from 0.4.26, the last stable 0.4 release.

Version 0.5 adds new permissions. When a 0.4 server starts with 0.5 for the first time, Chatto adds these grants one time, so that existing access does not change:

  • message.read for everyone at server scope. Members can read messages as in 0.4.
  • room.remove-member for each role and user that had room.ban-member, at the same scope. room.ban-member has no effect in 0.5. Active bans continue as suspensions.
  • Each call.* permission for everyone.

Chatto does not add these grants again. If you remove or deny one later, it does not return.

Do these steps on every upgraded server:

  • Grant user.manage-invites and bot.manage to the admin role if administrators must manage all invitation codes and bots. Grant user.invite to members who need to create and manage their own codes.
  • Grant bot.create to the roles that can create bots. A new server grants it only to admin.
  • Grant room.manage to delegated room managers. Room group management used role.manage in 0.4.
  • Allow message.post for admin and owner in the announcements room if they must post there without privileged mode. A new server has these grants, but an upgraded server keeps its current settings.
  • Check thread posting. message.post now also allows thread replies. A 0.4 setup that allowed message.post and denied message.post-in-thread now allows replies.
  • Check everyone denies. An allow for a named role or a user now overrides an everyone deny at the same or a narrower scope.

Administrators, moderators, and the owner must now enable privileged mode before they use their administrative permissions. This also applies to custom room.create grants. Owners also need privileged mode to see, join, or read rooms that deny these actions to everyone when no explicit grant allows access. Give the owner role a room-level allow if owners need this access during normal use.

See Permissions for the complete list.

  • Make a backup before you upgrade. Back up S3 assets and encryption keys separately.
  • Stop every 0.4 server process and worker before you start 0.5. Do not use a rolling update. Upgrade the bundled client at the same time.
  • You cannot go back to 0.4 after a 0.5 server accepts traffic. To roll back, restore the backup. Writes after the backup are lost. See Backup and restore.
  • Video processing moved. Rename video.ffmpeg_path, video.ffprobe_path, video.max_concurrent, and video.temp_dir to asset_processing.ffmpeg_path, asset_processing.ffprobe_path, asset_processing.max_concurrent_jobs, and asset_processing.temp_dir. Set asset_processing.enabled = true, or new videos stay in processing. Chatto ignores the old keys without an error. New videos use HLS; existing MP4 videos continue to play. See Video processing.
  • Set one upload-size limit. Use core.assets.max_upload_size for all attachments, including GIFs and videos. Remove video.max_upload_size; until you do, the larger limit applies to all files. The default is now 25 MB for every file. Set 100MB explicitly if you need to keep the old default video allowance. See Upload limits.
  • Remove [core.assets.cache], CHATTO_CORE_ASSETS_CACHE_ENABLED, and CHATTO_CORE_ASSETS_CACHE_TTL. The asset cache is always enabled and keeps entries for seven days. See Asset cache upgrades.
  • Remove webserver.oauth_redirect_origins. Clients on other origins no longer need configuration. Use webserver.allowed_origins only for additional origins of the bundled client behind your reverse proxy. Chatto does not start if an origin has a path, or if one host has both an HTTP and an HTTPS origin.
  • The Content Security Policy is now enforced. The browser blocks scripts that a reverse proxy adds to the page, and other sites cannot show Chatto in an iframe.
  • Search is off by default. To use it, enable [search] and [search_provider]. See Search.
  • The CLI no longer accepts --passphrase. Use --passphrase-file or --passphrase-stdin in scripts.
  • The chatto_service_info metric is removed. Use chatto_model_info.
  • The notification list starts empty. Notification settings start with the new defaults.
  • Members stay signed in to the bundled client. Members of other servers in the multi-server client, and OAuth clients, sign in again once.
  • The 0.5 client does not connect to 0.4 servers.
  • New direct message conversations support two people. Existing group direct messages remain accessible; use a channel room for new group conversations.

Regenerate every custom client from the 0.5 protobufs. The public API and the realtime protocol have breaking changes, and 0.5 servers accept only realtime protocol 4. See API compatibility.

The generated GitHub release lists every PR and commit: github.com/chattocorp/chatto/releases/tag/v0.5.0