Sonix is a native, keyboard-first Mastodon client for Windows.
Windows 10 or 11
The main window has two lists:
Tab and Shift+Tab move between them.
Timeline switching, reordering, and closing work from either list; post
actions work from the Posts list.
Timelines are opened from the Timelines menu, from a
post (user timelines, threads, hashtags), or with their shortcut. Every
open timeline appears in the Timelines list and stays open until you
close it with Ctrl+W (or Backspace in Quick
Action Keys mode).
| Timeline | How to open |
|---|---|
| Home | Timelines -> Home Timeline |
| Notifications | Timelines -> Notifications |
| Mentions | Ctrl+Shift+M |
| Sent | Timelines -> Sent |
| Local | Ctrl+L |
| Local for another instance | Ctrl+Shift+I, then type a domain |
| Federated | Timelines -> Federated Timeline |
| Direct Messages | Ctrl+D |
| Bookmarks | Timelines -> Bookmarks |
| Favorites | Timelines -> Favorites |
| List | Timelines -> Open List... |
| User | Ctrl+T on a post, or Ctrl+U to type a
handle |
| Hashtag | Ctrl+H on a post, then View
Timeline |
| Thread | Alt+Enter on a post |
| Search | Ctrl+/ |
Home and Notifications are opened automatically at startup, but they are not special: you can close them like any other timeline and reopen them from the Timelines menu.
Timelines -> Sent opens your own account’s timeline
in a buffer, so you can see everything you have posted, including
replies and boosts, with your pinned posts at the top. Posts you publish
or delete are reflected there live.
Reorder timelines with Shift+Left Arrow and
Shift+Right Arrow from either list. Switch between them
with Left Arrow/Right Arrow or
Ctrl+1 through Ctrl+9.
Streaming timelines update themselves. F5 refreshes the
current timeline at any time, and . (Load More) fetches
older entries. If a streaming timeline loses its connection, Sonix
re-fetches it about once a minute until streaming comes back.
Show/HideExitCtrl+Alt+F).Options -> General -> Customize Window Hotkey....Ctrl+N opens the compose dialog; Ctrl+R,
Ctrl+Shift+R, Ctrl+Q, and Ctrl+E
open it for a reply, an author-only reply, a quote, and an edit
respectively. Every control has an access key, and the dialog title
shows the character count for your instance’s limit. You can type past
the limit, but you will hear a warning sound when you do.
The dialog offers:
If Use enter to send posts is enabled,
Enter posts from the content field; otherwise use the Post
button.
Open options with Ctrl+,.
Use enter to send postsAlways prompt to open linksRead link previews in timelinesStrip tracking parameters from URLsUse quick action keys in timelinesCheck for updates on startupStableDev (development builds)Customize Keyboard Shortcuts...Customize Window Hotkey... (Ctrl/Alt/Shift/Win
modifiers + custom key)Restore open timelines on startup (when off, only your
default timelines are reopened)1 to
40)Show oldest timeline entries firstAlways preserve thread orderLoad more on find nextCustomize Default Timelines...
Sonix plays a different sound for each kind of event, and every one of them can be swapped for a file of your own.
Enable notification sounds: master switch for every
sound below.Sound pack: the set of sounds to use. Switching packs
changes every event at once, while leaving anything you unchecked still
unchecked. A pack that is missing a sound says so in the list and
borrows that one from the default pack.Volume: 0 to 100, applied to all sounds.Sounds are tied to actions, not just to things arriving. Where an action has two directions, both share one sound: favoriting a post and having one of yours favorited are both the favorite sound. Undoing an action reuses its sound, since the point is to confirm something happened and the screen reader already says which way it went.
| Event | When it plays |
|---|---|
| Mention | Someone mentions you in a public, unlisted, or followers-only post |
| Direct message | Someone mentions you in a direct post |
| New post in home timeline | Somebody you follow posts. The busiest event by far, so its sound is the shortest and quietest of the set; uncheck it to silence just this one |
| Followed someone, or gained a follower | You follow or unfollow an account or hashtag, or somebody follows you |
| Follow request | Somebody asks to follow you, or you accept or reject a request |
| Favorited a post, or yours was favorited | Either direction |
| Boosted a post, or yours was boosted | Either direction |
| Bookmarked or unbookmarked a post | Your own bookmarking |
| Pinned or unpinned a post | Your own pinning |
| Poll ended | A poll you voted in has finished |
| Voted in a poll | You cast a vote |
| Edited a post, or one you follow was edited | Either direction |
| Sent a post or reply | Your post or reply was published or scheduled |
| Deleted a post | You deleted one of your posts |
| Action failed | Any of the above failed |
Blocking, muting, and hiding boosts have no sound, since borrowing the follow sound for them would be misleading and the screen reader announces them anyway.
Sounds for things that arrive (mentions, direct messages,
new home posts, and notifications that somebody favorited, boosted,
followed, or edited) follow the notification mode on the General tab:
they play in Sound only and
Sound and notifications, and are silent in
Classic Windows Notifications or Disabled.
Sounds for things you do always play, subject only to this tab, because they confirm an action you just took rather than announcing something that arrived.
Buttons under the list:
Play: hear the selected event’s sound. This works even
when the event is unchecked, so you can audition a sound before
switching it back on.Change...: pick any .mp3,
.wav, .ogg, .flac,
.m4a, .aac, or .opus file.
Choosing a file also re-checks that event.Reset: hand the selected event back to the active pack,
dropping any file you chose for it.Reset all: hand every event back to the active
pack.Open sounds folder: open your personal sound folder,
filling it first with a copy of every pack Sonix ships with, so there is
something there to copy and edit.A pack is a folder of sounds named after the events they play for,
such as mention.mp3 and follow.mp3. Packs live
under packs in either the sounds folder Sonix installed or
your personal one, and your personal folder wins when both have a pack
of the same name.
To build your own, press Open sounds folder, copy one of
the existing pack folders, rename it, and replace the files inside. It
appears in the Sound pack list the next time you open the
options. A pack may use .mp3, .wav,
.ogg, .flac, or .m4a, and one
that does not provide a given sound borrows it from the default pack
rather than leaving that event silent.
Picking a file with Change... overrides the pack for
that one event and survives switching packs, until you press
Reset to hand the event back to the pack.
Updating Sonix replaces the packs it ships with but never touches your personal folder, so your own packs and edits survive an upgrade.
Customize how posts appear in each timeline using Jinja2-style templates.
Templates are rendered per-entry each time a timeline is displayed.
If a template contains a syntax error, the entry falls back to
author: content.
| Variable | Value |
|---|---|
{{ author }} |
Display name (respects emoji filtering setting) |
{{ username }} |
@acct handle |
{{ content }} |
Post text, HTML-stripped (respects content warning display setting) |
{{ content_warning }} |
Spoiler text, or empty if none |
{{ relative_time }} |
Relative timestamp, e.g. 2 hours ago |
{{ absolute_time }} |
Absolute local timestamp,
e.g. Feb 17, 2026 at 2:30 PM |
{{ visibility }} |
Public, Unlisted,
Followers only, or Direct |
{{ reply_count }} |
e.g. 3 replies |
{{ boost_count }} |
e.g. 1 boost |
{{ favorite_count }} |
e.g. 5 favorites |
{{ client }} |
Posting app name, or empty if unknown |
{{ media }} |
Media attachment summary, or empty if none |
{{ poll }} |
Poll summary, or empty if none |
{{ booster }} |
Display name of the person who boosted (boost template only; empty for regular posts) |
{{ booster_username }} |
@acct handle of the booster (boost template only) |
{{ quote_author }} |
Display name of the quoted post’s author (quote/boost templates) |
{{ quote_username }} |
@acct handle of the quoted post’s author (quote/boost
templates) |
{{ quote_content }} |
Text content of the quoted post (quote/boost templates) |
{{ quote_media }} |
Media summary of the quoted post (quote/boost templates) |
{{ quote_poll }} |
Poll summary of the quoted post (quote/boost templates) |
{{ app }} |
The application name (window title template only) |
{{ timeline }} |
The active timeline name (window title template only) |
{{ account }} |
Your @acct handle (window title template only) |
You can use {% if %} blocks to show text only when a
variable is non-empty:
{% if client %}, via {{ client }}{% endif %}
Hide post types per timeline, on the client side only. Select a timeline from the dropdown, then check the types you want to hide: - Original posts (not replies or boosts) - Replies to others - Replies to me - Threads (self-replies) - Boosts - Quote posts - Posts with media - Posts without media - Your posts - Your replies
These are separate from your instance’s own filters, which are
managed in Options -> Manage Filters....
Every shortcut in the table below can be changed in
Options -> Customize Keyboard Shortcuts.... Normal mode
and Quick Action Keys mode have their own independent bindings, and
actions listed as None have no default binding but can be
given one.
The dialog has a Quick Keys Mode tab and a Normal Mode tab. On each:
Enter
opening links with Alt+Enter viewing the thread, or the
reverse. Binding either action by hand shows this as
Custom.These are built into the lists and cannot be customized:
Tab / Shift+Tab: Move between the
Timelines list and the Posts listUp Arrow / Down Arrow: Move by one
entryHome / End: Jump to the first or last
entryPage Up / Page Down: Move by 20
entriesCtrl+1..Ctrl+9: Switch to timeline
1-91..9: Switch to timeline 1-9 (Quick Action
Keys mode only)Shift+F10 or the applications key: Open the actions
menu for the focused post, or for the focused user in the
followers/following dialogsCtrl+Alt+F: Show/hide the main window (global hotkey;
customizable in Options)| Action | Normal mode | Quick Action Keys mode |
|---|---|---|
| New Post… | Ctrl+N |
C |
| Reply… | Ctrl+R |
R |
| Reply to Author… | Ctrl+Shift+R |
Ctrl+R |
| Quote Post… | Ctrl+Q |
Q |
| Toggle Follow | Alt+F |
Alt+F |
| View Author Profile | Ctrl+P |
P |
| View Mentions | Ctrl+M |
M |
| View Hashtags | Ctrl+H |
H |
| Open Links | Enter |
Enter |
| Play Media | Ctrl+I |
I |
| Open in Browser | Ctrl+Shift+O |
O |
| Copy Post | Ctrl+Shift+C |
Ctrl+Shift+C |
| Copy Post Link | Ctrl+C |
Ctrl+C |
| View Post Details | Shift+Enter |
Shift+Enter |
| View Thread | Alt+Enter |
Alt+Enter |
| View Quoted Thread | None | None |
| Edit Post… | Ctrl+E |
E |
| Delete Post | Delete |
Delete |
| Pin / Unpin Post | None | None |
| Vote on Poll… | Ctrl+V |
V |
| Favorite | Ctrl+Shift+F |
F |
| Bookmark | Ctrl+Shift+K |
K |
| Boost | Ctrl+Shift+B |
B |
| View Boosts | None | None |
| View Favorites | None | None |
| Open User Timeline | Ctrl+T |
T |
| Open User… | Ctrl+U |
U |
| Search… | Ctrl+/ |
/ |
| Find in Timeline… | Ctrl+F |
Ctrl+F |
| Find Next | F3 |
F3 |
| Find Previous | Shift+F3 |
Shift+F3 |
| Home Timeline | None | None |
| Notifications Timeline | None | None |
| Sent Timeline | None | None |
| Local Timeline | Ctrl+L |
Ctrl+L |
| Open Instance Timeline… | Ctrl+Shift+I |
Shift+I |
| Federated Timeline | None | None |
| Direct Messages | Ctrl+D |
Ctrl+D |
| Mentions Timeline | Ctrl+Shift+M |
Ctrl+Shift+M |
| Bookmarks | None | None |
| Favorites | None | None |
| Open List… | None | None |
| Load More | . |
. |
| Close Timeline | Ctrl+W |
Backspace |
| Refresh | F5 |
F5 |
| Previous Timeline | Left |
Left |
| Next Timeline | Right |
Right |
| Move Timeline Left | Shift+Left |
Shift+Left |
| Move Timeline Right | Shift+Right |
Shift+Right |
| Previous Account | Ctrl+[ |
Ctrl+[ |
| Next Account | Ctrl+] |
Ctrl+] |
| Toggle Content Warning | Ctrl+X |
X |
| Toggle Quick Keys Mode | Ctrl+Shift+Q |
Ctrl+Shift+Q |
| Manage Accounts… | Ctrl+Alt+A |
Ctrl+Alt+A |
| Manage Filters… | None | None |
| Manage Lists… | None | None |
| Edit Profile… | Ctrl+Shift+E |
Ctrl+Shift+E |
| Options… | Ctrl+, |
Ctrl+, |
| Customize Keyboard Shortcuts… | None | None |
| Check for Updates… | None | None |
| View Help | F1 |
F1 |
Actions with no default binding are still reachable from the menu bar or the post context menu. View Boosts and View Favorites only appear in the Post menu when the selected post actually has boosts or favorites, and Edit Post, Delete Post, and Pin / Unpin Post only appear for your own posts.
Toggle with Ctrl+Shift+Q. While it is on, the
single-letter bindings in the table above act on the selected post
instead of being typed, and Backspace closes the current
timeline.
Ctrl+Alt+A opens the accounts dialog, where you can
Add, Remove, or Switch
To an account. Adding an account walks you through authorizing
Sonix on your instance in the browser. Ctrl+[ and
Ctrl+] cycle accounts directly; each account keeps its own
set of open timelines, and the newly active account’s handle is
announced when you switch.
Ctrl+Shift+E opens your profile for editing:
Require follow approvalBot accountDiscoverable in directoryMark media as sensitive by defaultOptions -> Manage Lists... shows your Mastodon lists,
with buttons to Add, Edit, view and
change Members, and Delete. Open a
list as a timeline with Timelines -> Open List....
Individual users can also be added to a list from the
Actions… menu in the profile and followers/following
dialogs. List timelines stream in real time.
Options -> Manage Filters... manages the filters
stored on your instance, which apply everywhere you use Mastodon, not
just in Sonix. Each filter has a title, the contexts it applies to, an
action, an optional expiry, and a list of keywords, each of which can be
marked whole-word.
Ctrl+F prompts for text and moves to the next matching
entry, respecting your timeline sort direction. F3 and
Shift+F3 repeat the search forwards and backwards. With
Load more on find next enabled in the Timeline options,
Sonix keeps fetching older posts while searching instead of stopping at
the end of what is already loaded.
Press Ctrl+I (or I in Quick Action Keys
mode) on a post with media attachments to open the media player. If the
post has multiple attachments, a dialog lets you choose which one to
play.
| Key | Action |
|---|---|
Space |
Play / Pause |
Left Arrow |
Seek backward 10 seconds |
Right Arrow |
Seek forward 10 seconds |
Up Arrow |
Volume up |
Down Arrow |
Volume down |
E |
Announce elapsed time |
R |
Announce remaining time |
T |
Announce total duration |
D |
Download media file |
Escape |
Close media player |
Ctrl+/ to open Search.Search: <query>) and support paging.Alt+Enter on an account or hashtag result opens its
timeline.Enter on a post opens its links. If the post has more
than one link, or Always prompt to open links is enabled, a
dialog lists them with Open and Copy
buttons. Tracking parameters are stripped from URLs unless you turn that
off in the General options.
%APPDATA%\Sonix\config.jsonconfig.json next to the
executableSound settings live under the sounds key:
enabled is the master switch, volume is 0 to
100, pack names the active pack, and events
maps an event name to its enabled flag and
file. An empty file means the event takes its
sound from the pack; a bare name is looked up in your
sounds folder and then in Sonix’s, and an absolute path is
used as given.
Sound and notifications notification mode, for
a Windows notification and a sound together.sounds in your
configuration folder, which takes precedence over the sounds Sonix ships
with and is left alone by updates.