Skip to main content

A modern, non-modal terminal Slack client built on Textual

Project description

slak

Python License

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+1Alt+9 jump, Ctrl+W opens a filterable switcher.
  • Ctrl+K fuzzy channel/DM finder; Alt+←/Alt+→ walk channel history; Ctrl+B toggles the sidebar, Ctrl+T the 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+N new-message composer (DM and group DM); @/: mention & emoji autocomplete; Ctrl+O opens 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 ★ Starred section, or config-glob sections ([sections.<name>]) as a fallback — grouped, collapsible, live-updated on section/star events.
  • A ⚑ Threads row 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/*.toml and [theme] overrides), switched live with Ctrl+Y; the sidebar is auto-kept contrasting (CIELAB).
  • Optional user avatars beside messages ([appearance] avatars = on, off by default) — rendered as 4×2 half-blocks in a left gutter.
  • Private channels show a padlock — the single-width `` glyph when an installed font covers it (Nerd Font / FontAwesome, detected via fontconfig), else a narrow fallback (`[appearance] nerd_font = auto|on|off`).

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 with slak --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

GNU General Public License v3.0 or later.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

slak-0.1.3.tar.gz (142.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

slak-0.1.3-py3-none-any.whl (114.9 kB view details)

Uploaded Python 3

File details

Details for the file slak-0.1.3.tar.gz.

File metadata

  • Download URL: slak-0.1.3.tar.gz
  • Upload date:
  • Size: 142.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for slak-0.1.3.tar.gz
Algorithm Hash digest
SHA256 2d579cdf8bf1a51ca40f48d96c35b6d019198303c14c0cd2704086ed66d87427
MD5 432b270bc19bf7d954abc45f487b204b
BLAKE2b-256 1e98dead1d59b1aabaf2c3638789ed9a188a4fc9b25d6518f2baa1033f50b932

See more details on using hashes here.

Provenance

The following attestation bundles were made for slak-0.1.3.tar.gz:

Publisher: release.yml on Frodotus/slak

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file slak-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: slak-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 114.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for slak-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 b6d81a6626d5070127c515719621a6e94289c710a1e7c099087a4221f218211e
MD5 8dec1a7cd0931fd7593b1ae089a247f4
BLAKE2b-256 7f606b26fb47203e63d8a5213f97f1f5e4da9bb02de51656244a8bbb33bc15dc

See more details on using hashes here.

Provenance

The following attestation bundles were made for slak-0.1.3-py3-none-any.whl:

Publisher: release.yml on Frodotus/slak

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page