Frequently Asked Questions

Accuracy

WakaTime’s open source plugins only track when you’re typing in your editor. Stop typing, and the WakaTime plugin stops tracking your stats.

WakaTime is accurate to 1 microsecond (0.000001 seconds), but the plugins depend on you computer’s clock and operating system. On Windows, precision is only ±16 milliseconds (0.016 seconds).

To achieve this accuracy, WakaTime plugins send heartbeats from your editor when the file you’re typing in changes, when you save a file, and every 2 mins of typing in the same file. Heartbeats are joined into durations based on your timeout preference, then displayed on your dashboard.

For contractors, you might want to increase your timeout preference to capture all your billable hours. More info in this blog post.

Your keystroke timeout preference is the maximum time allowed between durations when calculating your total coding activity for a day. Think of it like a granularity setting. It can’t make you code more or less, it just combines durations with more or less accuracy.

For ex, if you typed code for 2 mins, took a 13 min break, then typed code for 1 min:

  • 10 min timeout: Your dashboard shows 3 mins of coding activity (2 mins + 1 min).
  • 15 min timeout (default): Your dashboard shows 16 mins of coding activity (2 mins + 13 min break + 1 min).
  • 30 min timeout: Your dashboard still shows 16 mins of coding activity (2 mins + 13 min break + 1 min; the timeout preference only affects time between heartbeats not surrounding).

A visual example of the affect on accuracy of durations:

timeout’s affect on durations

When working offline with supported editors* your coding activity is saved in an sqlite3 database at $HOME/.wakatime.db. The next time you use your IDE when online, your coding activity is synchronized to your WakaTime dashboard.

* All editor plugins using the wakatime-cli have support for offline coding, except the Chrome and Brackets extensions.

Daily average is the number of hours you coded on average each day. It can be seen on your personal dashboard, private leaderboards, and if you make your coding activity public also on your public profile and public leaderboard.

The formula for daily average is:

Daily Average = Hours / Days

Where:

Hours is the sum of the total number of hours you coded in the last seven days.

Days is the number of days you coded at least one minute in the last seven days.

This means daily average skips weekends or days where you didn’t code!

For example: If you wrote some code for 2 hours on Monday and 4 hours on Tuesday last week, your daily average would be (2 + 4) / 2 = 3 hours.

Also, leaderboards and public profiles use a slightly different formula than your personal dashboard.

Leaderboards and profiles calculate daily average over the last seven days starting from yesterday, while your personal dashboard calculates daily average from today.

Your public profile uses the default 15 minute timeout value with a time range of the Last 7 Days from Yesterday.

We also subtract coding activity from language Other.

The leaderboards use the same formula as your public profile.

Setting your preferences to the defaults, matching the leaderboard time range, and subtracting coding activity categorized as language Other will show the same coding activity as your dashboard.

Editor Colors

Using each IDE’s icon image, we’ve extracted a list of the most dominant colors for each IDE. We use these colors when displaying IDEs on WakaTime dashboards.

Language Colors

Based off GitHub’s language colors, we’ve built a list of colors for each language used on all WakaTime dashboards.

Operating System Colors

Using each operating system’s logo, we’ve defined colors for each os used on all WakaTime dashboards.

Category Colors

Here’s the list of colors for each category used on all WakaTime dashboards.

Data & Privacy

WakaTime sends heartbeat events triggered from user actions inside your text editor to the WakaTime API.

Heartbeat events contain data such as:

  • path of the currently opened file, website, or app
  • project names
  • branch names
  • editor names, for example ‘Vim’ or ‘VS Code’
  • languages, for example ‘Python’ or ‘JavaScript’
  • libraries/imports used, for example ‘Django’ or ‘Rails’
  • line counts of opened files
  • position of your cursor in opened files
  • your computer’s hostname, like ‘MacbookPro.local’ or ‘HOME-PC’
  • category, for example ‘Debugging’, ‘Building’, or ‘Coding’
  • your computer’s operating system name
  • your computer’s timezone
  • …and of course, timestamps

Heartbeat events are sent:

  • every 2 minutes if you are actively using your text editor
  • when you switch between files
  • every time you write to a file

Your file contents are never sent to WakaTime servers. Only the file paths, or the location of the files on your machine, are sent to WakaTime servers.

All WakaTime plugins are open source, so you’re protected by the eyes of the community.

If the file paths or project names are sensitive, you can tell WakaTime plugins to not send certain projects, files, folders, or obfuscate them before sending to WakaTime servers.

The config options for privacy are:

  • hide_project_folder - turns /Users/username/projects/flask/src/main.py into src/main.py
  • hide_project_names - turns flask into a random generated project name, for ex: AutumnTree43
  • hide_branch_names - disables sending Git branch names
  • hide_file_names - turns /projects/flask/src/main.py into HIDDEN.py, and disables other metadata including line counts and dependencies used
  • exclude - prevents sending any data on folders where the path matches a list of regex patterns
  • include - used in combination with exclude to only send an allowed list of folder paths, for ex: exclude .* then include a list of allowed folders
  • include_only_with_project_file - prevents sending any data on folders which don’t contain a .wakatime-project file in the project folder

Add the line:

hide_project_folder = true

to your in your ~/.wakatime.cfg file to send only relative paths to WakaTime servers.

For example, /Users/username/projects/flask/src/main.py would be sent relative to the project folder flask as src/main.py. When no Git project can be detected, only the file name is sent.

Use hide_file_names with a list of folders in your ~/.wakatime.cfg file.

Any files inside those folders will be replaced with HIDDEN.ext before they leave your computer, where ext is the original extension of the file.

For ex:

hide_file_names = /Users/username/private/ /Users/username/projects/[\d+]/

Will change /Users/username/private/secret_project/main.py and /Users/username/projects/1337/src/main.py into HIDDEN.py before sending to WakaTime servers.

Note: That means time spent in those two files will be combined and displayed as one file on your dashboard.

Note: To obfuscate all files in all folders, use hide_file_names = true.

Note: Sublime Text users won’t have a ~/.wakatime.cfg file, so create one using this example config.

After obfuscating, delete any past coding activity using the Coding Activity Delete Tool.

Use hide_project_names with a list of folders in your ~/.wakatime.cfg file.

Any files inside those folders will have their project names replaced with a random string, for ex:

[settings] hide_project_names = /Users/username/private/ /Users/username/projects/[\d+]/

With a Git project at /Users/username/private/secret_project/, will create a .wakatime-project file at /Users/username/private/secret_project/.wakatime-project that overrides your secret_project project name with a randomly generated name.

After obfuscating, rename the old project to merge it with the new random project name.

Note: To obfuscate all project names, use hide_project_names = true.

Note: Sublime Text users won’t have a ~/.wakatime.cfg file, so create one using this example config.

Your file contents are never sent to WakaTime servers. Only the file paths, or the location of the files on your machine, are sent to WakaTime servers.

However, sometimes even the names of your projects are sensitive.

To exclude folders from WakaTime,use exclude with a list of folders in your ~/.wakatime.cfg file.

[settings] exclude = /Users/username/private/ /Users/username/projects/[\d+]/

/Users/username/private/ is a regex, so any file path matching the regex is ignored by your WakaTime plugin.

After excluding folders, delete the project to remove it from your WakaTime dashboard.

Note: Use forward slash to separate folders, even on Windows.

Note: Sublime Text users won’t have a ~/.wakatime.cfg file, so create one using this example config.

Yes, you can export all your coding activity in JSON format from your account settings.

There are two export options: Heartbeats or Daily Totals.

Heartbeats are a raw dump of each timestamp ping we received when you were activitly coding in your IDE, and is the same format we store your code stats to power all WakaTime dashboards.

The Daily Totals option is a sum of your total code time per day, expanded by project, file, language, etc. It’s what you see for each day’s data point on the charts from your dashboard, and great for doing analysis where you only need granularity per day.

However, for backing up your code stats or to analyze what time of day you were coding, you must select the Heartbeats export option.

Your coding activity is stored forever, even when using the Free plan. If you decide to upgrade to a paid plan in the future, then your dashboard unlocks your historical coding activity.

Projects

WakaTime detects and creates projects for you automatically based on your coding activity.

This means you don’t manually create projects. Instead, use your IDE like normal and projects will appear on your WakaTime Dashboard.

WakaTime detects the project’s name these 3 ways:

  1. Revision control software (git init)

  2. A .wakatime-project file inside your root project folder. Type the project’s name as the first line of your .wakatime-project file and any future coding inside that folder will use the new project name.

  3. A [projectmap] section in your l~/.wakatime.cfg file matching a directory path.

  1. To rename a project, click rename project from the dropdown on the project’s dashboard.

    Renaming a project won’t prevent the project from being re-created again the next time you code in that project. To rename a project going forward, help WakaTime detect the correct project name.
  2. From your personal dashboard, click on a day in the chart to view the durations of time logged that day. Next, click on any file or time duration to edit the project, language, category, or branch.

  3. As a last resort, use custom rules*:

    * Warning: this will rename projects from past coding activity. Use with caution!

From your personal dashboard, click on a day in the chart to view the durations of time logged that day. Next, click on any file or time duration to edit the project, language, category, or branch.

Yes, to delete a project click the delete project item on a project’s dashboard. Be careful, the project and all it’s coding stats will be deleted permanently.

You can also delete coding activity for specific files using the Coding Activity Delete Tool.

To exclude projects in the future, add the project’s path to your $HOME/.wakatime.cfg file under the exclude setting.

Use custom rules to customize attributes of your code stats. Rules are applied to past and future coding activity sequentially from top to bottom.
For ex: If you have two rules:
If language contains python then change language to rust
and
If language contains python then change language to java
The second rule would never match any language because all python languages would already have been changed to rust.

Languages

WakaTime plugins use the Pygments syntax highlighter for language detection. See the languages supported by Pygments, which is also the list of languages detected by WakaTime.

You can manually override language detection using custom rules and file extension matching:

Custom rules modify future and past coding activity, so they’re useful for correcting languages displayed wrong on your dashboard.

However, for fixing languages going forward please email us and we’ll improve language detection for everyone.

Leaderboards

  • Are your code stats public? If not, edit your profile and check the boxes to make your stats public on the leaderboard.
  • Looking at the right dashboard range using 15 minutes keystroke timeout and subtracting Other language?
  • Are you in the top 100 pages? Check your dashboard, subtract the time spent in Other language, and make sure it’s more than the last person on the last page of the leaderboard.
  • Did you recently make your time public? Leaderboards only update a few times per day, so just keep coding and check back in a few hours.

Teams

Each person who displays their stats on team dashboards counts as a paid developer. You don’t need paid seats for view-only accounts. Usually programmers and designers need paid seats, while product managers do not. Only one paid seat is needed per developer no matter how many dashboards they’ve joined.

You have several ways to control projects on your team dashboard:

  • Hide all projects by default, then manually choose the ones your share with your team
  • Show all projets by deafult, then manually hide some from your team
  • Enable repo filtering on your team, so only projects matching your repository names are displayed on your team dashboards
  • Make a dashboard anonymous, where only aggregate totals are displayed for projects but not the time spent by individual developers

Troubleshooting

Make sure the plugin is correctly installed in your editor. ( Look for a WakaTime menu under File/Tools )

Check the plugin status page for when your editor was last seen, and if a new version is available. If your editor isn’t listed or hasn’t been seen in a while, first turn on debug mode then check for errors in your log files:

  • Most WakaTime plugins have a WakaTime Settings menu in the Tools or File menu of your IDE.
  • Vim can turn on debug mode with :WakaTimeDebugEnable
  • Sublime Text has a debug option in your WakaTime.sublime-settings

With debug mode on, check your IDE log file and your $HOME/.wakatime.log file for error messages.

If you use multiple computers, find when a computer’s hostname was last heard from using the Machine Names API.

The value is the Hostname and ip is the IP Address of your machine.

To see your recent raw coding activity, use the Heartbeats API.

Please create a new issue in the appropriate GitHub repo with any error messages.

  1. All WakaTime plugins use a common core (wakatime-cli) for communicating with the API.

    This common core writes errors to $HOME/.wakatime.log.

  2. Errors from the editor plugin go to your IDE’s log file:

    Locating your IDE’s log file

  3. Please create a new issue in the appropriate GitHub repo with your error messages.

Your api key is a secret code used to link coding activity from your WakaTime plugin to your personal dashboard:

View your API Key

Your api key is available on your WakaTime Account Settings page.

To generate a new api key, click the refresh button .

After generating a new api key, remember to update your plugin settings with your new key:

Use this form to send a confirmation email to your inbox.

WakaTime plugins have a proxy config in ~/.wakatime.cfg, that should be set the same as your browser's proxy settings.

For example:

proxy = https://user:pass@host:port

SOCKS5 proxies are also supported:

socks5://user:pass@localhost:12345

NTLM LDAP proxies are also supported:

proxy = https://domain\user:pass@host:port

To use a custom CA Cert bundle file, add this line to your ~/.wakatime.cfg config file:

ssl_certs_file = /path/to/cafile.pem

To disable SSL Cert verification completely (dangerous) add line:

no_ssl_verify = true

Yes, all WakaTime plugins play well together. You can switch between multiple supported editors and your coding activity will be synchronized correctly. If you use revision control software, your project will be detected even when using multiple editors.