- New feature: Userfields
  - Attach any custom field to any entity (Products, Locations, Euqipment, etc.)
  - Userfields can have types (Text, Number, Date, etc.)
  - Will be shown / can be filled on the edit page of the corresponding entity and will also optionally show in the corresponding tables (inclcudes overview pages)
  - => Can be configured under Master data / Userfields
- New feature: Meal planning
  - Simple approach for the beginning (more to come): A week view where you can add recipes for each day (new menu entry in the sidebar, below calendar)
  - Of course it's also possible to put missing things directly on the shopping list from there, also for a complete week at once
- General improvements
  - The "expires soon" or "due soon" days (yelllow bar at the top of each overview page) can now be configured
    - => New settings page for each area under the settings icon at the top right
- Stock improvements
  - It's now possible to have multiple / named shopping lists
    - Automations still use the default shopping list and also the default shopping list cannot be deleted
  - More information on the product card like "Spoil rate" or "Average shelf life"
  - It's now possible to set a price for added products during inventory
  - It's now possible to customize the default amount for purchase/consume (see stock settings under the settings icon on the top right)
- Chores improvements
  - New recurrence patterns - chores can now also be "scheduled" to repat daily/weekly/monthly
  - It's now possible to track the day of a chore execution only (without the time, option per chore)
- Recipe improvements
  - It's now possible to enter a "variable amount" (e. g. if a recipe needs "1 - 2 cups"), the original amount is still used for stock fulfillment checking (if enabled for that recipe ingredient)
- New translations: (thanks all the translators)
  - Swedish (demo available at https://sv.demo.grocy.info)
  - Polish (demo available at https://pl.demo.grocy.info)
- Internal improvement: Localizations are now handled via gettext, both on server and client side
  - Mainly to properly handle languages with more than 2 plural forms
  - This involved some string changes which results in a needed (re)translation of about 20 strings (excluding demo data)
  - Also applies to quantity units, n-plural forms can be entered on the quantity unit edit page
  - It's not required to install the PHP gettext extension, on both, server and client, managed implementations of gettext are used ([oscarotero/Gettext](https://github.com/oscarotero/Gettext) & [oscarotero/gettext-translator](https://github.com/oscarotero/gettext-translator))
- Some other small fixes and improvements
  - The "Add as barcode to existing product" product picker workflow failed to add the barcode to the given product
  - Recipes can now be filter by stock availability
  - Added a feature flag (`config.php` setting) to also be able to hide all stock related UI elements and routes
