slk

module
v0.7.12 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 19, 2026 License: MIT

README

slk

A blazingly fast Slack TUI. Keyboard-driven, beautifully themed, and under 20MB. One static binary. No Electron required.

Marketing site: getslk.sh · Docs: Wiki

slk screenshot

slk is a daily-driver replacement for the official Slack desktop client, built in Go with bubbletea and lipgloss.

Why slk?

  • Fast. Cold start in milliseconds. Render-cached messages. SQLite-backed scrollback. Real-time over WebSocket.
  • Tiny. ~19 MB on disk. ~60 MB RSS for a live multi-workspace session vs. 500 MB–1.5 GB for the official client. No node_modules, no Chromium, no 1Gb RAM tax.
  • Keyboard-first. Vim-style modal editing. j/k, h/l, i, Esc.
  • Pretty. 12 built-in themes, lipgloss-styled panels, true-pixel avatars on kitty (half-block fallback elsewhere), emoji shortcodes, day separators, and pill-style reactions.
  • Multi-workspace. All your workspaces stay connected in parallel. 19 to instantly jump between them, with live unread badges in the rail.
  • Yours. TOML config, custom themes, custom channel sections via glob, XDG-compliant paths.

Highlights

  • Real-time messages, edits, deletes, reactions, typing indicators
  • Inline images (kitty graphics / sixel / half-block fallback) with full-screen preview
  • Threads side panel + a workspace-wide threads view
  • Smart paste: clipboard images, file paths, or text — multiple attachments + caption in one send
  • Slack-native sidebar sections, kept live; or glob-based config sections
  • Browser-cookie auth (xoxc + d) — no Slack App required
  • Vim-style modal keybindings, fuzzy channel finder, workspace picker
  • 12 themes + drop-in custom themes, live theme switcher
  • OS desktop notifications on DMs, mentions, and configurable keywords

Full feature breakdown: [[Features|https://github.com/gammons/slk/wiki/Features]]

Quick install

Homebrew (macOS and Linux):

brew install gammons/tap/slk

Linux/macOS tarball (auto-resolves the latest version):

VERSION=$(curl -fsSL https://api.github.com/repos/gammons/slk/releases/latest | grep -oE '"tag_name": *"v[^"]+"' | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' | sed 's/^v//')
# Linux x86_64
curl -fsSL "https://github.com/gammons/slk/releases/latest/download/slk_${VERSION}_linux_x86_64.tar.gz" | tar xz
# macOS Apple Silicon
curl -fsSL "https://github.com/gammons/slk/releases/latest/download/slk_${VERSION}_darwin_arm64.tar.gz" | tar xz
sudo mv slk /usr/local/bin/

Go:

go install github.com/gammons/slk/cmd/slk@latest

For .deb / .rpm / .apk packages, Windows, build-from-source, and checksums, see the Installation wiki page.

Setup

slk uses your existing browser session. Grab your xoxc token and d cookie from DevTools, then:

slk --add-workspace

Full walkthrough: Setup wiki page.

Debugging

Set SLK_DEBUG=1 to enable a comprehensive debug log written to slk-debug.log in the current working directory. The file is truncated each run, so reproduce the issue, quit slk, then copy the file before relaunching. Log lines are categorized ([cache], [imgfetch], [imgrender], [ws], [general]) so grep '\[cache\]' slk-debug.log slices to one focus area.

Documentation

Everything lives in the wiki:

Disclaimer

slk is an independent, unofficial project. It is not affiliated with, endorsed by, or sponsored by Slack Technologies, LLC or Salesforce, Inc. "Slack" is a trademark of Slack Technologies, LLC; it is used here only to describe the service this client interoperates with.

slk talks to Slack via the same internal browser protocol the official web client uses. This is unofficial and not sanctioned by Slack — see Tradeoffs and Non-Goals for details.

License

MIT © Grant Ammons

Directories

Path Synopsis
cmd
slk command
internal
avatar
Package avatar downloads Slack user avatars and renders them at a fixed 4×2 cell footprint.
Package avatar downloads Slack user avatars and renders them at a fixed 4×2 cell footprint.
debuglog
Package debuglog provides categorized debug logging for slk.
Package debuglog provides categorized debug logging for slk.
emoji
Package emoji provides utilities for measuring emoji display width based on probed terminal behavior, with caching across sessions.
Package emoji provides utilities for measuring emoji display width based on probed terminal behavior, with caching across sessions.
image
Package image renders bitmap images for terminal display via three protocols: kitty graphics (preferred), sixel, and unicode half-block.
Package image renders bitmap images for terminal display via three protocols: kitty graphics (preferred), sixel, and unicode half-block.
notify
Package notify provides desktop notification support.
Package notify provides desktop notification support.
slack
Package slackclient wraps the slack-go library with token management, Socket Mode event handling, and a simplified Web API interface.
Package slackclient wraps the slack-go library with token management, Socket Mode event handling, and a simplified Web API interface.
slack/mrkdwn
Package mrkdwn translates CommonMark-style markdown in the compose box into Slack's wire formats: a mrkdwn fallback string (for the chat.postMessage `text` field and notifications) and a rich_text block (for the `blocks` array).
Package mrkdwn translates CommonMark-style markdown in the compose box into Slack's wire formats: a mrkdwn fallback string (for the chat.postMessage `text` field and notifications) and a rich_text block (for the `blocks` array).
slackfmt
Package slackfmt formats Slack-internal identifiers (channel names, etc.) for human display.
Package slackfmt formats Slack-internal identifiers (channel names, etc.) for human display.
ui
internal/ui/app.go
internal/ui/app.go
ui/channelpicker
Package channelpicker provides an inline autocomplete picker for #channel references in the compose box.
Package channelpicker provides an inline autocomplete picker for #channel references in the compose box.
ui/compose
internal/ui/compose/model.go
internal/ui/compose/model.go
ui/confirmprompt
Package confirmprompt provides a small centered yes/no confirmation overlay used for destructive actions (e.g.
Package confirmprompt provides a small centered yes/no confirmation overlay used for destructive actions (e.g.
ui/imgrender
Package imgrender renders inline image attachments for any UI panel (messages pane, thread side panel) using the kitty / sixel / halfblock pipelines.
Package imgrender renders inline image attachments for any UI panel (messages pane, thread side panel) using the kitty / sixel / halfblock pipelines.
ui/messages/blockkit
Package blockkit attachments.go: renders Slack legacy `attachments` payloads.
Package blockkit attachments.go: renders Slack legacy `attachments` payloads.
ui/presencemenu
Package presencemenu provides the Ctrl+S overlay for setting presence (active/away) and DND snooze state on the active workspace.
Package presencemenu provides the Ctrl+S overlay for setting presence (active/away) and DND snooze state on the active workspace.
ui/scrollbar
Package scrollbar renders a 1-column proportional scrollbar gutter onto pre-rendered visible lines.
Package scrollbar renders a 1-column proportional scrollbar gutter onto pre-rendered visible lines.
ui/selection
Package selection provides anchor / range types for representing a user-driven text selection inside the messages and thread panes.
Package selection provides anchor / range types for representing a user-driven text selection inside the messages and thread panes.
ui/statusbar
internal/ui/statusbar/model.go
internal/ui/statusbar/model.go
ui/styles
internal/ui/styles/styles.go
internal/ui/styles/styles.go
ui/threadsview
Package threadsview is the UI model for the "Threads" panel: a vertical list of threads the user is involved in, sourced from cache.ThreadSummary.
Package threadsview is the UI model for the "Threads" panel: a vertical list of threads the user is involved in, sourced from cache.ThreadSummary.
wake
Package wake provides cross-platform detection of system suspend/wake-from-sleep events via a wall-clock-jump heuristic.
Package wake provides cross-platform detection of system suspend/wake-from-sleep events via a wall-clock-jump heuristic.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL