Zlack is a lightweight, optimized desktop wrapper for Slack, built with Tauri. It provides a native application experience with robust desktop notifications, handling deep links and window focus correctly even when minimized.
- Native Desktop Notifications: Integrated directly with Windows native toast notifications.
- Unread Tray & Title Badges: The tray icon shows a red badge for unread DMs/@mentions and a blue badge for other unread messages, and the window title is prefixed with
!for unread DMs — handy if you prefer ambient indicators over toast popups. - Custom CSS & Icon: Place
zlack.css,zlack.png,zlack.ico, orzlack-taskbar.pngnext to the executable to customize Slack's UI and Zlack's running icons. - Private WebView2 Runtime (optional): On Windows, Zlack uses a private
webview2-runtimefolder next to the executable when present, otherwise it falls back to the shared system WebView2 runtime. - Smart Context: Extracts
Team IDandChannel IDfrom Slack's console logs to ensure notifications take you to the exact right place. - Background Reliability: Includes a custom rust backend to ensure clicking a notification properly restores the window from the system tray and focuses it.
- Multi-Workspace Support: Handles navigation for multiple Slack workspaces via standard webview login.
- Lightweight: Uses Tauri's minimal footprint (WebView2 on Windows) instead of a full Chromium bundle (Electron).
- Frontend: Vanilla HTML/JS (Slack Web Client) +
preload.jsfor bridge. - Backend: Rust (Tauri) for system integration.
- Notification Engine:
tauri-winrt-notificationfor advanced Windows Toast features (Inputs, Activation Callbacks).
Download the installer for your OS:
| Platform | File |
|---|---|
| Windows | Zlack_${version}_x64-setup.exe (installer) or Zlack_${version}_x64_en-US.msi |
| macOS | Zlack_${version}_x64.dmg |
- Run the installer.
- Launch Zlack.
- Log in to your Slack workspaces.
Install Dependencies:
npm installRun in Development Mode:
npm run tauri devNote: In dev mode, clicking notifications may not reliably restore the window due to Windows AUMID restrictions. This works fully in the built release.
Build for Production (Windows):
npm run build:dist:windowsThis will compile the application and place the installer (.exe and .msi) into the dists/ folder.
Build for Production (macOS/Linux):
npm run build:dist:unixThis requires running on a Mac or Linux machine. It will generate .dmg/.app (macOS) or .deb/.AppImage (Linux) in the dists/ folder.
Optional private WebView2 runtime (Windows):
By default Zlack uses the shared, system-wide WebView2 runtime. Because that runtime is shared, allowing it through a software firewall effectively allows any app to reach the internet through it.
To use a private runtime instead, get the Fixed Version WebView2 runtime for your architecture from the WebView2 download page, extract it, and place it next to Zlack.exe as:
Zlack.exe
webview2-runtime/
msedgewebview2.exe
...
If webview2-runtime/msedgewebview2.exe exists, Zlack uses it. Otherwise, it falls back to the shared system runtime.
Place optional customization files next to Zlack.exe:
Zlack.exe
zlack.css # injected into Slack
zlack.png # preferred custom running icon
zlack.ico # fallback custom running icon
zlack-taskbar.png # optional Windows taskbar-only override
The custom icon is used for the window, taskbar, and tray badge base. If zlack-taskbar.png exists, it overrides only the Windows taskbar icon. The embedded exe/installer icon remains fixed until rebuilt.
Slack's web client sends telemetry traces to /traces/v1/list_of_spans. Zlack's preload.js intercepts this network traffic:
- Captures
notification:sentspans to reliably identify theTeam IDandChannel IDassociated with the event. - Intercepts the browser's
NotificationAPI request. - Merges the content with the captured network context and sends it to the Rust backend.
Clicking a notification on Windows while an app is minimized is notoriously tricky due to OS foreground rules. Zlack solves this by:
- Main Thread Architecture: Creates notification objects directly on the main thread to ensure proper COM listener persistence.
- Staged Restoration: Explicitly calls
set_skip_taskbar(false),unminimize(), andshow()in the correct order. - Focus Hack: Uses a temporary "Always On Top" toggle to force the window into the foreground even if Windows tries to suppress it.
MIT