Standalone Slack desktop client built with Go and Fyne.
api- Slack API client (channels, history, threads, media)gui- Fyne UI (pane layout, message rendering, realtime updates)
- Go 1.24+
- Slack token with scopes for conversations, history, posting, and users
Recommended Slack scopes:
channels:historychannels:readgroups:historygroups:readim:historyim:readmpim:historympim:readchat:writeusers:readusers:read.email(optional)emoji:read(optional, enables workspace emoji/reaction mapping)
Credential priority:
SLACK_BOT_TOKENSLACK_TOKEN.slack_config.jsonin project root
Optional environment variables:
export SLACK_BOT_TOKEN="xoxb-..."
export SLACK_APP_TOKEN="xapp-..." # optional, enables Socket Mode
export SLACK_API_BASE_URL="https://slack.com/api" # optional
export SLACK_CONFIG_PATH="/path/to/.slack_config.json" # optional overrideAuto-discovered config locations:
./.slack_config.json
go mod tidy
go build -o slack-gui ./cmd/slack-gui
./slack-guiLogs are written to ~/.slack-gui.log.
go fmt ./...
go test ./...
go build -o slack-gui ./cmd/slack-guiOptional packaging build:
./packaging/linux/build.sh --version 0.1.0Packaging assets and scripts are in packaging/linux.
Build release artifacts:
./packaging/linux/build.sh --version 0.1.0This can produce:
- tar.gz bundle
- AppImage (if
appimagetoolis installed) .deband.rpm(ifnfpmis installed)
- Channel list with search and unread indicators
- Multi-pane layout (horizontal/vertical split)
- Threads and inline replies
- Media/file links and image previews
- Realtime updates (Socket Mode with RTM fallback)
- Persistent UI state (window size, layout, view preferences)
Ctrl+Hsplit focused pane horizontallyCtrl+Jsplit focused pane verticallyCtrl+Wclose focused paneCtrl+Stoggle channel listCtrl+Nopen new windowCtrl+Kopen quick switcher