Ultrafast, slim and beautiful Slack TUI.

One small Rust binary, no browser inside. It has all the important features and hotkeys from Slack.

$ curl -fsSL https://slick.leonavas.com/install.sh | sh
# install
slick APP09:10

1. Install it. On Linux (x86_64 and arm64):

curl -fsSL https://slick.leonavas.com/install.sh | sh

On Windows 10/11 (x86_64), in PowerShell:

irm https://slick.leonavas.com/install.ps1 | iex
slick APP09:11

2. Run it. The first time, a small window opens Slack's own sign-in page.

slick

Optional: slick login acme goes straight to that workspace's email-and-password form.

# features
slick APP11:30

What the TUI does today:

  • Channels, private channels, DMs and group DMs. Start a new DM or channel with Ctrl+N.
  • Hotkeys for everything: Ctrl+K to jump to any conversation, j k to move, Tab to write, Shift+J K to reorder sections. Full list in .
  • Your Slack sidebar sections. Fold them, drag them, and the new order syncs back to Slack. Unread DMs float to the top.
  • Starred conversations, unread state and mention badges.
  • Search conversations by several words at once, with the matches highlighted.
  • Threads in a side panel, with “also send to channel”.
  • Reactions and a reaction picker, : emoji autocomplete, and your workspace's custom emoji, animated ones playing at the GIF's own pace.
  • Message actions: edit, delete, forward, save for later, remind me, mark unread, copy the link or the text, follow a thread.
  • Pinned messages, in their own tab in each conversation.
  • Avatars and images right in the conversation, in terminals with kitty, sixel or iTerm2 graphics (half blocks elsewhere). Click one to enlarge it; open or download shared files.
  • Block Kit and attachments drawn the way Slack draws them, with buttons you can click.
  • Your account: active or away, pause notifications, custom status, edit your profile. Other people's presence, status and profile cards.
  • Mouse support: drag to select messages and copy them, right-click menus, a sidebar you can resize.
  • A tray icon that lights up with unread DMs and mentions.
  • Updates itself from the GitHub releases, with one click.
  • Your terminal's own colors. Press t to see what that means.
  • In English or Brazilian Portuguese, switched in Settings.
  • Slack events for your system: new messages, mentions, reactions, presence, unread counts and pauses as a stream of JSON events, as hooks and as a state file, so any script, bar or notifier can react to them. Commands too: slick open, slick status, slick dnd.
# hotkeys
slick APP11:00

The keyboard is the main interface. The mouse works too.

↑ ↓  j kMove through the list
Enter · clickOpen a conversation or fold a section
Ctrl+K · /Find a conversation
Tab · EscMove between the list, the message box and the thread
g · GFirst · last conversation
Shift+J · Shift+KMove a section (the order syncs with Slack)
m · right clickMenu for a conversation or a message
Enter · Shift+EnterSend · new line
:Emoji autocomplete
Ctrl+B · Ctrl+IBold · italic; Ctrl+Shift+X strike, Ctrl+Shift+C code, Ctrl+Shift+9 quote
↑ in an empty boxPick a message
E R T F A U L DelOn a picked message: edit, react, reply in thread, forward, save, mark unread, copy link, delete
Ctrl+CCopy the picked or selected messages
Ctrl+BIn a thread, also send the reply to the channel
PgUp PgDn · wheelScroll; at the top, load older messages
Ctrl+U · Ctrl+WClear the box · delete a word
Ctrl+NNew message or channel
Ctrl+PYour account, status and profile
Ctrl+RReload channels and users
Ctrl+LSign in to Slack
click an imageEnlarge it (o opens it, d downloads it)
q · Ctrl+CQuit

Most of these work on this page too. Try q.

Coming from Slack? On this page its shortcuts work as well: Ctrl+K jumps to a conversation, Alt+↑ ↓ go to the previous or next channel, Alt+Shift+↑ ↓ to the next unread one, and Esc marks the current one read.

# why-so-fast
you10:12

ok, but why is it so fast?

slick APP10:12

Rust, mostly. Here's my trust me bro benchmark: slick and the Slack desktop app, same two workspaces, running side by side on my machine right now:

                 slick    Slack
memory           73 MB    828 MB
processes        1        10
threads          6        124
install          10 MB    295 MB
cache on disk    21 MB    803 MB

Here's what makes that possible:

  • Native code, not a browser. slick is written in Rust and compiled ahead of time to machine code. No JavaScript engine to boot, no garbage collector pausing to clean up, nothing to warm up.
  • Light on memory. About 70 MB with my two workspaces open, against 830 MB spread over Slack's 10 processes. The terminal only redraws when something on screen changed.
  • Cache first. Users, channels, your recent conversations and their last 50 messages are saved locally, so they're on screen before Slack answers.
  • Never blocks. Every request runs on its own thread, and Rust guarantees those threads can't corrupt each other's data. Typing and scrolling never wait on the network.
  • One small binary. About 10 MB (Slack installs 295 MB), no runtime to install. No webview, no Electron. A browser window shows up only to sign in.
  • Asks for less. The open conversation checks for new messages every 3 seconds and only fetches what's newer than what you have.
you10:13

fair.

# disk-usage
slick APP10:05

Slack's desktop app keeps growing on your disk. slick doesn't.

  • Only what's useful is cached. Users, channels, your 8 most recent conversations and their last 50 messages, in a single file.
  • Old images go away. Photos, avatars and emoji you haven't seen in 7 days are deleted when slick starts. What you keep looking at stays.

No more bloated disk space for a chat app. On my machine, right now:

$ du -sh ~/.cache/slick ~/.config/Slack
21M   ~/.cache/slick
803M  ~/.config/Slack
omarchy
slick APP12:30

slick fits right into Omarchy.

It opens like any other Omarchy TUI app: from the launcher, in its own window, with its own icon. And it follows your Omarchy theme: slick draws with your terminal's colors, so when you switch themes, slick switches with them.

  • Slack in your bar. The leonavas.slack plugin for the Omarchy bar runs on slick and shows what's waiting without opening anything.
  • Slack events in Omarchy. What slick receives (new messages, mentions, reactions, presence, unread counts, pauses) is passed on as events, hooks and a state file, so your own plugins and scripts can react to it and do whatever you want. The bar plugin is built on it.
  • Badges. Red counts unread DMs and group DMs, blue counts channel mentions. Or one combined badge, or a dot without numbers.
  • Hover. The unread conversations with their last message, mention counts and how long ago, plus the reactions to your messages. Click one to jump straight to it in slick.
  • Reactions float up. When someone reacts to your message, the emoji rises out of the icon, the workspace's own emoji included.
  • Click to show or hide. slick lives in Omarchy's scratchpad (Super+S) and keeps running and counting while hidden. Middle click quits it.
  • Right click. Launch on Login, Launch in Foreground, Open in Scratchpad, Group notifications, Show reactions, and pause notifications for 30 minutes, 1 or 2 hours, until tomorrow or until a date and time. The pause is Slack's own do-not-disturb, so it follows you to every client.
  • Yours to tune. Icon style, badge colors, what the blue badge counts, how many rows the preview shows, all in the bar's widget settings.
The Slack plugin in the Omarchy bar: badges, the hover list, the right-click menu and reactions floating up

Install the plugin:

omarchy plugin add https://github.com/leonavas/omarchy-slack.git
omarchy plugin enable leonavas.slack --section right

Code, settings and details: github.com/leonavas/omarchy-slack

[soon] In Omarchy's plugin list, a click away.

# roadmap
slick APP12:00

Nothing in this channel works yet. This is where slick is headed:

  • [planned] Themes. Colors and layout in a config file, beyond your terminal palette.
  • [planned] Multiple workspaces. Sign in to several Slack workspaces and switch between them without leaving the app, with unread counts for each one.
  • [planned] Desktop notifications. New DMs and mentions pop up on your desktop, following the notification level you set in Slack, and a click takes you to the conversation.
  • [planned] Later. The messages you saved for later and your reminders in one list, like Slack's Later tab, to mark done or open right in the conversation.
  • [planned] Panes and tabs, tmux style. Split the screen and keep conversations side by side, open each one in its own tab, and move between them with the keyboard.
  • [planned] Plugins. Scripting to extend it with your own commands.

Want one of these sooner, or something else? Tell me in .

● slick
slick APP07:20

slick 0.4.6 is out.

  • Messages from apps show the app's name and picture instead of "bot". Click the name, the APP badge or the picture for the app's profile, with its description.
  • Sidebar sections show their emoji, the workspace's custom ones too.
  • Right-click a section to rename it and pick its emoji, or to create a new one.
  • At the top of a channel, the emoji of its section: click it to move the channel to another section, to a new one or out of it.
slick APP16:38

slick 0.4.5 is out.

  • Drag the sidebar past its narrowest and it folds to a rail of photos: mentions as a red badge over them, initials when photos are off, channels only while they have something new, the name on hover.
  • Scrollbars on the conversation, the thread and the sidebar.
  • The "z" of paused notifications shows for everyone in your DMs, not just you, as in Slack.
  • Searching for someone puts your DM with them before the group DMs they're in.
  • A new version shows up in the account menu too, under "Check for updates".
slick APP13:47

slick 0.4.4 is out.

  • Unread conversations stand out: a bar on the left of the row, besides the bold. In Settings, turn it off or add a tinted row behind them.
  • Hover a reaction to see who reacted, with the emoji in large; skin-toned emoji show up as images.
  • The red mention badge keeps its color on the selected row in the sidebar.
  • In DMs, messages in a row from the same person stay together, without the blank row between them.
slick APP19:42

slick 0.4.3 is out.

  • A new search window: Ctrl+K opens a large centered modal with tabs All, Conversations and Messages, the matched parts highlighted, and a preview with the message's surrounding context (or its thread), or a channel's info and recent messages. Enter jumps right to the message.
  • Search finds channels you're not in, from the whole workspace directory, archived ones too: read them and join with one key. Matching works like Slack's (word starts, accents ignored, initials, small typos), active conversations first, then by latest message.
  • Messages are searched with Slack's own search, highlighted and paged as you scroll. Channel mentions show the channel's name instead of its id.
  • A red New line above the first unread message.
  • 24-hour clock by default; the 12-hour one is in Settings.
  • More breathing room: a blank row between messages (Comfortable or Compact in Settings) and above the message box.
slick APP17:37

slick 0.4.2 is out.

  • Hover a message and a + button shows up to add a reaction, in the conversation and in the thread panel. Reacting to a reply in the thread panel works now; before, it silently did nothing.
  • Joins and leaves in a row collapse into one compact line, like the official app: "Igor and 6 others left #x. Also, shirley rejoined."
  • Ctrl+←→ move by word and Ctrl+Delete deletes the next word in the text boxes.
  • The sign-in window's ~120 MB browser cache is dropped once you're signed in (the session stays, so no new password): slick now takes about 31 MB on disk.
  • Status lines and errors under the message box go away after 10 seconds.
slick APP17:52

slick 0.4.1 is out.

  • Every keyboard shortcut in one searchable guide: Ctrl+/ or F1, or from the account menu. Search in English or Portuguese.
  • The official app's shortcuts: Alt+Shift+↑↓ for the next unread, Alt+←→ back and forward, Shift+Esc marks everything read, Ctrl+Shift+T Threads, Ctrl+, settings, Ctrl+Tab next workspace, and more.
  • P pins a picked message, Ctrl+Shift+\ reacts to the last one, and code blocks and lists have their own shortcuts.
  • Ctrl+Shift+9 makes a quote again instead of switching workspace.
slick APP16:35

slick 0.4.0 is out.

  • Pictures follow your terminal's zoom: avatars, icons and images are redrawn for the new font size, smooth and sharp, instead of breaking or turning blocky.
  • Code looks like code: `inline` in your theme's warning color with a thin frame, and ``` blocks in a framed box, easy to tell apart even on a selected message.
  • Channel mentions show the icon right next to the name, like the official app.
slick APP12:53

slick 0.3.0 is out.

  • Several workspaces: add one from the workspace menu, switch with Ctrl+1…9, and see what is waiting in each. The logo stacks up and shows a badge when another workspace needs you. They all keep notifying, and pausing pauses them all.
  • Formatting: *bold*, _italic_, ~strike~, `code`, ``` blocks, quotes and lists, styled as you type and sent as rich text, like the official app. Ctrl+B, Ctrl+I, Alt+X and Alt+C for the markers.
  • Code blocks come in a box of their own, spaces and blank lines kept, with a button to copy them.
  • Invite people to your workspace from the account menu, by email, with a message and the channels to join.
  • Pause notifications until next week, or until the day and time you pick, letting your VIPs through if you want.
  • Delete a channel from its settings, after a confirmation.
  • Topic changes, joins and renames read in the app's language. The Threads view marks threads read as you see them, and the search box looks like one.
  • For your scripts: every event and item says its workspace, the state file lists them and adds up the counts, and slick open takes a Slack link or --team.
slick APP11:27

slick 0.2.0 is out.

  • Threads: a row at the top of the sidebar with a badge for new replies, and a Threads view with every thread you follow, the unread ones first, to read and reply in place. Replies notify like any message.
  • Channel details: click the channel name or press Alt+I to star it, pick what notifies you, edit the name, topic and description, see and invite members, leave, make it private or archive it.
  • Slash commands: type / for your workspace's commands and apps, with their usage. Replies only you can see show up in the conversation.
  • Archived channels are found by the search, marked as archived, and read-only until you unarchive them.
  • Statuses change live, custom emoji included, and a DM shows the other person's status in the message box.
  • Deactivated accounts say so in their profile and next to their name. Custom sidebar sections keep all their channels.
  • A "More unreads" pill in the sidebar, a softer selection in the autocomplete lists, and "Jot something down" in your own DM.
  • For your scripts: thread activity in the state file and events, with the count of new replies.
slick APP05:22

slick 0.1.4 is out.

  • A DM with a deactivated account says so in place of the message box, and stays read-only, as in Slack.
  • Skin tones on ✌ ☝ ✍ and the other emoji drawn as text by default now show in color, in messages and reactions.
  • "(you)" next to your own name is dimmer than the name.
  • "Email copied" and every other "copied" leave the screen after 2 seconds.
  • For your scripts: message previews also come as HTML, with your workspace's emoji, up to 5 per conversation, and each channel's notification preference. The state file waits for the real counts, so no stale badges on start.
slick APP04:50

slick 0.1.3 is out.

  • Real time: new messages, reactions and read state arrive through Slack's websocket the moment they happen. Polling stays as the fallback.
  • Who is typing: dots in the sidebar in place of the avatar, and a line under the message box.
  • The message box shows emoji as emoji, your workspace's animated ones included, and @ and # complete people and channels into real mentions.
  • Mentions and channel links in messages look like Slack's. Click one to open the channel or the DM.
  • Paste a screenshot with Ctrl+V: it shows as a thumbnail in the box and goes out with your message.
  • Channels you muted in Slack move to a folded "Silenced" section at the end of the sidebar and stay quiet, except when they mention you.
  • An "Unread mentions" pill in the sidebar points to mentions scrolled out of view.
  • For your scripts: a state file, slick events, hooks, and slick open, mark-read, dnd and status. Events for new messages, reactions, presence, unread counts and pauses.
  • One slick per session: running it again brings the open one to the front. The Omarchy bar widget is built on all of this.
  • Copying an ID or e-mail from a profile now says it was copied.
slick APP02:36

slick 0.1.2 is out.

  • On Linux the sign-in window is a small helper slick unpacks once and keeps, so slick starts even without WebKitGTK installed.
  • A bolder tray icon, easier to spot in the bar.
  • "slick is up to date" leaves the status bar after 10 seconds.
slick APP01:37

slick 0.1.0 is out, the first release.

  • Channels, private channels, DMs and group DMs, with threads in a side panel, reactions, pinned messages and every message action Slack has.
  • Your Slack sidebar sections, starred conversations, unread state and mention badges. Sections fold and reorder, and the order syncs back to Slack.
  • Avatars, images, Block Kit and your workspace's emoji, animated ones included, in terminals with kitty, sixel or iTerm2 graphics.
  • Keyboard first: Ctrl+K to jump to a conversation, j k to move. Mouse works too, down to selecting and copying messages.
  • Opens from a local cache, refreshes the open conversation every 3 seconds and marks it read.
  • Sign in on Slack's own page in a small window: slick login [workspace] or Ctrl+L in the app. A token in the config file or environment variables work too.
  • Your account and status, a tray icon for unread messages, and one-click updates from the GitHub releases.
● feature-bugfix-requests
slick APP09:03

Missing something? Tell me what slick should do next: threads, reactions, a theme, a key you can't live without.

Write your proposal in the box below and press Enter. After a quick check that you're human and a confirmation by email, it's sent.

● advanced-setup
slick APP09:20

Build from source.

You need Rust, cargo and the WebKitGTK development package (libwebkit2gtk-4.1-dev on Debian/Ubuntu).

cargo install --locked --git https://github.com/leonavas/slick
slick APP09:21

A token or environment variables instead of the sign-in window.

Put one of these in ~/.config/slick/config:

# A) internal Slack app (official): create it from
#    slack-app-manifest.yml, install it, use the User OAuth Token
token = xoxp-…

# B) browser session, no admin needed
token = xoxc-…
cookie = xoxd-…

Or set SLACK_TOKEN and SLACK_COOKIE in the environment. You can also paste the token and the cookie straight into the sign-in screen.

slick APP09:22

Your session. It's saved to ~/.config/slick/config, readable only by you. The sign-in window keeps its own profile, so signing out of Slack in your browser doesn't sign you out here. If the session expires, slick asks you to sign in again; Ctrl+L opens the same screen any time.

slick APP09:23

Linux. The script downloads the latest release for your machine, checks its SHA-256 and puts slick in ~/.local/bin, no sudo. SLICK_INSTALL_DIR changes the folder.

Windows. It installs to %LOCALAPPDATA%\Programs\slick and adds it to your PATH. Use Windows Terminal (or another terminal with colors and images); there's no tray icon on Windows yet.