Frequently Asked Questions

Accuracy

WakaTime uses open-source plugins to track your coding activity when you’re actively typing in your text editor. This means when you’re not typing, the “timer” automatically stops and doesn’t count you as coding.

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 anytime the file you’re typing in changes, you save the file, or after 2 mins of active typing in the same file. Heartbeats are then joined into durations based on your personal timeout preference.

Your 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 example: 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).

And a visual example of the affect on accuracy of durations:

timeout’s affect on durations

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 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.

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

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

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 files are never sent to WakaTime servers, only the file names are sent by WakaTime plugins. All WakaTime plugins are also open source , so you’re protected by the eyes of the community.

If the names of your files are sensitive, you can configure WakaTime plugins to exclude files or whole folders from tracking. You can also obfuscate file names instead of exluding them.

To exclude files/folders from WakaTime add paths to the exclude array in your $HOME/.wakatime.cfg config file. For example:

[settings] exclude = /private/folder

/private/folder is a regex, so it matches both files /private/folder/file.txt and /home/user/private/folder/file.txt and prevents tracking time against both those files.

For Windows use escaped backslashes or a character class to match both forward slash and backslash:

[settings] exclude = \\private\\folder\\ [/\\]secret[/\\]stuff[/\\]

You can list multiple paths in your config file, and each path is a POSIX regular expression:

[settings] exclude = ^/var /private_\d+/

Which excludes any path starting with /var and any path containing private_123 where 123 is any number.

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

After excluding file names, to delete any related coding activity from your dashboard use the Coding Activity Delete Tool.

Yes, WakaTime plugins can replace file names with HIDDEN.ext before they leave your computer, where ext is the original extension of the file.

To obfuscate file names, add hide_file_names = true to your $HOME/.wakatime.cfg file.

Alternatively, only obfuscate files inside certain folders with:

hide_file_names = /path/to/private/folder/ /another/folder[\d+]/matched/by/regex/

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

After obfuscating file names, to delete any related coding activity from your dashboard use the Coding Activity Delete Tool.

To obfuscate your project names, add this setting to your ~/.wakatime.cfg file:

[settings] hide_project_names = true

Alternatively, a list of regex paths are also accepted:

[settings] hide_project_names = ^/home/username/private_projects /private_\d+/

Yes, you can export all your coding activity in JSON format here.

Your coding activity is kept safe, 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 creates projects for you automatically, using one of these methods.

This means you don’t manually create projects.

Instead, use your IDE like normal and projects are created automatically in the background.

We work hard to keep WakaTime completely passive, so it never gets in your way.

WakaTime recognizes the project’s name one of four ways:

  1. Revision control software (Ex: Git, Mercurial, or Subversion):

    To set the project name for a folder, go to that folder in a terminal and type:

    git init

    Files inside that folder will be assigned to a project with that folder’s name.

    * only renames projects for new coding activity

  2. Create a .wakatime-project file inside your project directory. Type the project name as the first line of this file and WakaTime will use that project name for all files inside this directory.

    * only renames projects for new coding activity

  3. Adding the project directory to your ~/.wakatime.cfg file under the [projectmap] section.

    * only renames projects for new coding activity

  4. As a last resort use custom rules:

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

To delete a project, first remove it’s coding activity using the Coding Activity Delete Tool.

After removing the project’s coding activity, you can delete the project from the project’s dashboard. A project dashboard without coding activity will have a “trash icon” in the top right corner.

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

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 also available on your 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:

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