# Upgrading Kimai - Version 2.x

_Make sure to create a backup before you start!_ 

Read the [updates documentation](https://www.kimai.org/documentation/updates.html) to find out how 
you can upgrade your Kimai installation to the latest stable release.

Check below if there are more version specific steps required, which need to be executed after the normal update process.
Perform EACH version specific task between your version and the new one, otherwise you risk data inconsistency or a broken installation.

## [2.58.0](https://github.com/kimai/kimai/releases/tag/2.58.0)

The official Docker image no longer runs with the default `APP_SECRET=change_this_to_something_unique`.
If you did not explicitly set your own `APP_SECRET` (via `-e APP_SECRET=...` or your compose/environment
config), the container now generates a unique secret on first start and persists it as `var/data/.appsecret`
inside the `data` volume that the documented Docker setup already mounts.

As a one-time effect of this upgrade, all existing sessions, "remember me" cookies and pending
password-reset links become invalid — every user has to log in again once. No manual action is required;
the container starts as before. It is recommended to configure your own `APP_SECRET` explicitly.

## [2.56.0](https://github.com/kimai/kimai/releases/tag/2.56.0)

The required minimum PHP version is now 8.2, read https://www.php.net/supported-versions.php

If you are still using PHP 8.1, please be aware it is EOL and does not receive any security updates.

If you have to upgrade to a newer version, do yourself the favor and upgrade directly to PHP 8.5.
The requirement for 8.2 is an intermediate solution for the near future, and the requirement will be raised to 8.5 rather sooner than later. 

## [2.0.30](https://github.com/kimai/kimai/releases/tag/2.0.30)

The `DATABASE_URL` in your environment settings (e.g. [.env](https://github.com/kimai/kimai/issues/4246), [docker-compose.yaml](https://github.com/tobybatch/kimai2/issues/531) or webserver config)
now requires the `charset` and `serverVersion` params, e.g.: `DATABASE_URL=mysql://user:password@127.0.0.1:3306/database?charset=utf8mb4&serverVersion=10.5.8-MariaDB` (examples in `.env`).

## [2.0](https://github.com/kimai/kimai/releases/tag/2.0)

**!! This release requires minimum PHP version to 8.1 !!**

### Breaking changes

- All plugins need to be updated: delete all previous version from your installation (`rm -r var/plugins/*`) before updating!
- The `local.yaml` is not compatible with old version, remove it before the update and then re-create it after everything works
  - removed: configuring the `dashboard` is not supported any longer
  - removed: custom translation files via `theme.branding.translation`
  - removed: changing the plugin directory via `kimai.plugin_dir`

### Developer

Developer read the full documentation at [https://www.kimai.org/documentation/migration-v2.html](https://www.kimai.org/documentation/migration-v2.html).

- Invoice renderer and templates for XML, JSON and TEXT were moved to the [Extended invoicing plugin](https://www.kimai.org/store/invoice-bundle.html) (install if you use one of those)
- Moved `company.docx` to [external repo](https://github.com/kimai/invoice-templates/tree/main/docx-company) (needs to be re-uploaded if you want to keep on using it!)
- Role names are forced to be uppercase 
- Removed unused `public/avatars/` directory 
- Time-tracking mode `duration_only` was removed, existing installations will be switched to `duration_fixed_begin`
- Removed Twig filters. You might have to replace them in your custom export/invoice templates:
  - `date_full` => `date_time`
  - `duration_decimal` => `duration(true)`
  - `currency` => `currency_name`
  - `country` => `country_name`
  - `language` => `language_name`
- Removed support for custom translation files (use [TranslationBundle](https://www.kimai.org/store/translation-bundle.html) instead or write your own plugin)
- Removed all 3rd party mailer packages, you need to install them manually (ONLY if you used a short syntax to configure the `MAILER_URL` in `.env`): 
  - `composer require symfony/amazon-mailer`
  - `composer require symfony/google-mailer`
  - `composer require symfony/mailchimp-mailer`
  - `composer require symfony/mailgun-mailer`
  - `composer require symfony/postmark-mailer`
  - `composer require symfony/sendgrid-mailer`
