WakaTime for Zed
Automatically track your coding activity in Zed with WakaTime.
The extension listens for document open, edit, and save events, then sends heartbeats to WakaTime without interrupting your workflow.
Features
- Tracks coding activity across all languages registered by the extension.
- Reports the current file, language, cursor position, and project metadata.
- Sends save events immediately and throttles repeated edit heartbeats for the current file to once every two minutes.
- Shows today's total coding time in Zed's status bar, refreshed every two minutes.
- Uses an existing
wakatime-clifrom your shellPATH, or downloads it automatically when needed. - Downloads and manages the matching
wakatime-lslanguage server automatically. - Supports macOS, Linux, and Windows on x86_64 and ARM64.
How it works
Zed document events -> wakatime-ls -> wakatime-cli -> WakaTime APIwakatime-ls translates Zed's language-server events into
wakatime-cli heartbeats. The Zed
extension installs the required binaries, starts the language server, and
provides the current workspace as the WakaTime project.
Installation
- Open Zed's Extensions view.
- Search for WakaTime.
- Select Install.

The extension downloads wakatime-ls on first use. If wakatime-cli is not
available in your shell PATH, it downloads that as well.
Configuration
Copy your secret API key from your WakaTime account settings, then choose one of the following configuration methods.
Option 1: WakaTime configuration file (recommended)
Create ~/.wakatime.cfg (%USERPROFILE%\.wakatime.cfg on Windows):
[settings]
api_key = your-api-keyThis configuration is shared with WakaTime integrations in other editors. See
the wakatime-cli configuration reference
for options such as project mappings, proxy settings, and file exclusions.
Option 2: Zed settings
Open your Zed settings and add the API key under the wakatime language
server:
{
"lsp": {
"wakatime": {
"initialization_options": {
"api-key": "your-api-key"
}
}
}
}For a self-hosted or compatible WakaTime API, you can also provide api-url:
{
"lsp": {
"wakatime": {
"initialization_options": {
"api-key": "your-api-key",
"api-url": "https://wakatime.example.com/api/v1"
}
}
}
}Status bar
Today's total coding time is shown in Zed's status bar. It is read from
wakatime-cli --today, so it follows the same account and API settings as your
heartbeats. To hide it, disable the status bar in ~/.wakatime.cfg, the same
setting used by the VS Code and JetBrains integrations:
[settings]
status_bar_enabled = falseReload the workspace or restart Zed after changing the configuration so the language server receives the new values.
Important
Treat your WakaTime API key like a password. Do not commit it to this or any other repository.
Troubleshooting
- No activity appears: confirm that the API key is valid, reload Zed, edit and save a file, then allow a few minutes for the WakaTime dashboard to update.
- A binary cannot be downloaded: check access to GitHub Releases. You can
also install
wakatime-cliyourself and ensure it is available in the shellPATHinherited by Zed. - Need more detail: run the
zed: open logcommand and search the log forWakatimeorwakatime-lsmessages.
Prebuilt binaries are configured for macOS, Linux, and Windows, but macOS is currently the most thoroughly tested platform. Please open an issue with your OS, CPU architecture, Zed version, and relevant logs if you encounter a problem.
Development
The repository contains two Rust crates:
zed-wakatime: the Zed extension that installs and launches the required binaries.wakatime-ls: the language server that converts document events into WakaTime heartbeats.
Run the standard workspace checks before submitting a change:
cargo fmt --all --check
cargo clippy --workspace --all-targets
cargo test --workspaceContributions and bug reports are welcome.
License
This project is available under the MIT License.