1. Make sure that you have a working database backup before you start the update
  2. Check UPGRADING for required manual changes between your current and the new version
  3. You can upgrade multiple version at once, eg. from 1.6 to 1.8 while skipping 1.7

Updating Kimai

Change into your Kimai directory, then fetch the latest code and install all dependencies:

git fetch --tags
git checkout 1.25.0

You might have to prefix the next commands with sudo and/or php (depends on your environment):

Update all composer dependencies:

composer install --no-dev --optimize-autoloader -n

And run the Kimai updater:

bin/console kimai:update

Remember to adjust the file permissions if necessary.

Adjust file permission

You have to allow PHP (your webserver process) to write to var/ and it subdirectories.

Here is an example for Debian/Ubuntu (to be executed inside the Kimai directory):

chown -R :www-data .
chmod -R g+r .
chmod -R g+rw var/

Test Kimai before executing these commands (they are likely not required in a shared-hosting environment). You probably need to prefix them with sudo and the group might be called different than www-data.

That’s it, Kimai is running the most current version. Enjoy the latest time-tracking features!


Please check with git status if your directory is without changes, to make sure you really can upgrade. If the following statement looks different for you, keep on reading:

$ LANG=en_US git status
Not currently on any branch.
nothing to commit, working tree clean

If you experience an issue like this (file name can vary) while performing the git update:

error: Your local changes to the following files would be overwritten by checkout:
Please commit your changes or stash them before you switch branches.

It means you have changes in at least one of the files in your installation. This can happen by installation of the additional LDAP packages, or a changed configuration file (which was not meant to be changed).

These changes need to be reverted before the update can be executed. One possible solution is to use git stash, which will store your changes in a temporary location. If that fails for some reason, the other (rather extreme) option is to run git reset --hard, which will wipe all local changes.