v16.9.0

frappe/hrmsv16.9.0Jun 11, 2026by frappe-pr-bot

AI Summary

This release improves user experience with password reset options and pre-built app files for easier installation. It also fixes several logic bugs related to loan repayments, tax exemptions, and data caching.

Key Highlights

  • Adds pre-built app files to GitHub Releases for easier updates.
  • Adds 'Forgot Password?' functionality to the login page.
  • Fixes Salary Component caching to reflect formula changes immediately.
  • Fixes Goal tree view permissions and filters.

New Features

  • Pre-built app files in GitHub Releases.
  • Forgot Password feature.

Full Release Notes

## Features
* Adds ready-made app files to GitHub Releases, so installs and updates can use them instead of building them from scratch. (https://github.com/frappe/hrms/pull/4629)
* Adds a "Forgot Password?" button on the login page so users can reset their password, and a change password option on the profile page. (https://github.com/frappe/hrms/pull/4642)

## Bug Fixes
* Loan repayments created from **Salary Slip** now use the slip's _End Date_ instead of today's date, so loan instalments due in that pay period are included in the repayment. (https://github.com/frappe/hrms/pull/4639)
* The **Employee Incentive** form no longer limits the _Salary Component_ field by _Company_. This avoids the error that can appear when selecting a salary component. (https://github.com/frappe/hrms/pull/4659)
* The **Goal** tree view now shows only goals you have permission to see, matching the records available in the list view. Date range filters also apply correctly when you browse goals in this view. (https://github.com/frappe/hrms/pull/4668)
* **Salary Slip** now uses the _Exempted From Income Tax_ setting for deductions added through **Additional Salary**. Exempt deductions lower the taxable amount when the slip is submitted through **Payroll Entry**. (https://github.com/frappe/hrms/pull/4671)
* The roster view now checks permissions before showing **Leave Application** and **Shift Assignment** records. This keeps roster details limited to items the user can access. (https://github.com/frappe/hrms/pull/4666)
* Updating a **Salary Component** now clears the cached **Salary Structure**, so recent formula and condition changes are used without waiting for a manual refresh. (https://github.com/frappe/hrms/pull/4675)

## Other Changes
* Lets you leave _Reason for adjustment_ blank when creating a **Leave Adjustment** from **Leave Allocation**. (https://github.com/frappe/hrms/pull/4636)

## New Contributors
* @sahil170401 made their first contribution in https://github.com/frappe/hrms/pull/4659

**Authors**: @deepeshgarg007, @elshafei-developer, @sahil170401, @Hemil-Sangani, @iamkhanraheel, @krishna-254, @rmehta, @Nihantra-Patel
**Reviewers**: @deepeshgarg007, @asmitahase

<details>
<summary>AI content</summary>

 For these release notes, we used an LLM (OpenAI gpt-5.4-mini) to review and summarise the code changes, along with the associated issue and PR descriptions. It may contain typical errors and inaccuracies. You can read the prompt [here](https://github.com/barredterra/pretty_release_notes). 

Changes with the following labels were excluded:
- skip-release-notes

Changes with the following types were excluded:
- chore
 - test
 - ci
 - docs
 - style
 - build
 - refactor

</details>