A modern, non-modal terminal Slack client built on Textual
Project description
slak
A modern, non-modal terminal Slack client built on Textual.
Unofficial. Uses Slack's internal browser protocol and may violate Slack's TOS. Not affiliated with Slack Technologies, LLC.
Features
Non-modal & keyboard-first. Borderless Textual UI — workspace rail, channel
sidebar, message pane, compose. The compose box is focused on launch, so you just
start typing; there are no vim-style modes. Tab cycles focus, Ctrl+P opens the
command palette (every action), and F1 shows the full keybinding reference.
Workspaces & navigation
- Multiple workspaces with concurrent live connections;
Alt+1…Alt+9jump,Ctrl+Wopens a filterable switcher. Ctrl+Kfuzzy channel/DM finder;Alt+←/Alt+→walk channel history;Ctrl+Btoggles the sidebar,Ctrl+Tthe thread panel.- Cache-first startup: your last context renders instantly while sync runs behind it.
Messaging
- Send, edit (
Ctrl+E), and delete messages; reactions (Ctrl+R); threads with a follow-the-cursor reply panel. Ctrl+Nnew-message composer (DM and group DM);@/:mention & emoji autocomplete;Ctrl+Oopens link(s) in a message.- In-channel (
Ctrl+F) and workspace-wide (Ctrl+Shift+F) search. - Typing indicators, both directions.
Sidebar
- Slack-native sections (
users.channelSections.list, linked-list order) with a pinned★ Starredsection, or config-glob sections ([sections.<name>]) as a fallback — grouped, collapsible, live-updated on section/star events. - A
⚑ Threadsrow opens the threads view (your subscribed threads, newest-reply first). DM and group-DM names are resolved to member display names.
Rendering
- Slack markdown, mentions, custom emoji (inline images on kitty), and Block Kit / legacy attachments (headers, sections, fields, context, dividers, controls).
- Inline images for files and attachments — kitty graphics on kitty,
▀half-blocks on any truecolor terminal. - ~70-slot color themes (12 built-in incl. terminal-following
ansi-dark/ansi-light, plus~/.config/slak/themes/*.tomland[theme]overrides), switched live withCtrl+Y; the sidebar is auto-kept contrasting (CIELAB).
Realtime & integration
- RTM with exponential-backoff reconnection and missed-history backfill.
- Desktop notifications, presence/DND, terminal tab-title unread indicator.
- Opt-in embedded MCP server (
[mcp] enabled = true) — an AI client reads your context (slak_get_context) and drafts a reply (slak_set_draft, draft-only). Run the adapter withslak --mcp(pip install 'slak[mcp]').
Underneath: a pluggable SlackClient (browser-cookie auth, with an in-memory fake
for offline/dev), a self-healing SQLite cache (WAL + FTS5), and round-trippable TOML
config. ~340 tests.
Not yet wired: the sixel image protocol (half-blocks cover non-kitty terminals).
Install
Recommended — pipx installs it isolated and puts slak
on your PATH globally:
pipx install slak
pipx install 'slak[mcp]' # with the optional MCP adapter
Or with pip (ideally in a virtualenv):
pip install slak
Either way you get a slak command:
slak --help
Use a real workspace
slak --add-workspace # paste your browser xoxc token + d cookie
slak # connects to it (falls back to demo if no token)
slak --demo # always use the seeded demo workspace
Develop
python3 -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"
python -m slak # run against a seeded demo workspace
textual run --dev slak/dev.py # run with live CSS hot-reload
textual console # (separate terminal) stream logs
pytest # run the test suite
The look is themeable CSS — edit slak/ui/styles/app.tcss while running under
--dev to restyle instantly.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file slak-0.1.1.tar.gz.
File metadata
- Download URL: slak-0.1.1.tar.gz
- Upload date:
- Size: 138.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a5f0ed04c425d8cd9ff70c920ccfb0cac35ddbd4da7273d0f40142a4f758c928
|
|
| MD5 |
2a39d4ef7331a3c8716854669b2a9dbd
|
|
| BLAKE2b-256 |
f3d4f28c9e6bcebdfdc15055a437793490817517cf3f739197083517b7212cff
|
Provenance
The following attestation bundles were made for slak-0.1.1.tar.gz:
Publisher:
release.yml on Frodotus/slak
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
slak-0.1.1.tar.gz -
Subject digest:
a5f0ed04c425d8cd9ff70c920ccfb0cac35ddbd4da7273d0f40142a4f758c928 - Sigstore transparency entry: 1841331896
- Sigstore integration time:
-
Permalink:
Frodotus/slak@bdc19b916b4b64055394e1eacca2b6dc5b51b8a9 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/Frodotus
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bdc19b916b4b64055394e1eacca2b6dc5b51b8a9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file slak-0.1.1-py3-none-any.whl.
File metadata
- Download URL: slak-0.1.1-py3-none-any.whl
- Upload date:
- Size: 111.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc1653f247833fbe7acf0ea958664c92cdbbd9881c8193a04d8953ee790221f7
|
|
| MD5 |
4b7a9af2b121ab66461fe5077cb853bc
|
|
| BLAKE2b-256 |
5e7dc7b66a0fadebc7648d580dc605a33051598e4ad7d00a91c69a508ae26464
|
Provenance
The following attestation bundles were made for slak-0.1.1-py3-none-any.whl:
Publisher:
release.yml on Frodotus/slak
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
slak-0.1.1-py3-none-any.whl -
Subject digest:
cc1653f247833fbe7acf0ea958664c92cdbbd9881c8193a04d8953ee790221f7 - Sigstore transparency entry: 1841332361
- Sigstore integration time:
-
Permalink:
Frodotus/slak@bdc19b916b4b64055394e1eacca2b6dc5b51b8a9 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/Frodotus
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@bdc19b916b4b64055394e1eacca2b6dc5b51b8a9 -
Trigger Event:
push
-
Statement type: