Releases: frappe/frappe
Release list
v16.31.0
Features
- Adds a
betweenfilter for checking whether numbers, dates, and date-times fall within an inclusive range; date-only limits for date-times include the entire ending day. (#41622) - Adds document edits, milestones, and sharing events to the activity timeline, with milestone values shown only for fields the user can access. Allows users to load older milestones beyond the initial entries. (#41746)
Bug Fixes
- Updates the bundled Vite plugin for
@framework/uito resolve its dependencies through the host application, so fresh builds can find JavaScript and asset files such as Leaflet marker images. Documents the plugin’s dependency resolution and troubleshooting steps for missing asset imports. (#41591) - Skips creating duplicate Desktop Icon entries when an app or workspace uses a label that already exists, preventing app installation from failing with an integrity error. Fixes error reporting so the original icon-creation error is logged instead of being hidden by a secondary error. (#41493)
- Displays filter labels, conditions, and values in Dashboard Chart as plain text, so HTML entered in filters appears as text instead of being rendered. (#41598)
- Checks read access before retrieving Email Template records through standard email processing; login and workflow emails continue to use their configured templates. (#41607)
- Sends document follow-up emails only to enabled users who have opted in for the selected notification frequency. (#41615)
- Updates the
cryptographyandpyOpenSSLpackages to versions that address three reported security vulnerabilities. (#41632) - Allows List View filters to use child-table link fields with Ignore User Permissions enabled, so available values load instead of triggering a validation error. (#41672)
- Restores the "New" button in workspaces by displaying the complete action menu instead of replacing it with an "Edit"-only menu. (#41668)
- Removes the unused
cleanup_old_syncstask from the weekly schedule. (#41677) - Restricts ZIP extraction to POST requests and applies file-size limits to the combined contents of an archive, not just the existing File record. If extraction fails, removes files created during the attempt instead of leaving partial uploads. (#41674)
- Adjusts the end date for all-day events in calendar views so events spanning multiple days include their final day. (#41497)
- Removes the special case that always disabled two-factor authentication for the Administrator account, so its setting is checked like other User accounts. (#41689)
- Updates currency amounts in reports and list views to use the selected currency’s configured number of decimal places when no explicit precision is set; an explicit currency precision still takes precedence. (#41705)
- Preserves styling supplied by surrounding pages for notification rows, recipient selectors, and list views in production builds. Adds
section-headerandsection-bodystyling hooks to Form Layout Section for more reliable customization. (#41740) - Adds shared subscription tracking for document updates, so closing one of multiple views of a document no longer stops updates in the others. Restores live-update subscriptions for documents that remain open after a connection reconnects. (#41744)
- Adds input type checks to API-accessible actions, rejecting requests with incorrectly typed values before the actions run. (#41720)
- Adds the required input type information to test helper methods so UI tests can run with the framework’s new type checks. (#41751)
- Users see only their own Document Follow records in list and report views, while System Managers can access all records. Creating a follow now checks the user's permission to create Document Follow records. (#41764)
- Adds type information to the
publish_realtimetest helper, fixing type-checking errors in Cypress tests. (#41753) - Allows custom User Type records to be updated without requiring a custom Role. (#41656)
- Processes existing Notification Settings in batches of 5,000 when adding Notification Type Preference entries, reducing the risk of transaction limits being exceeded on large sites. (#41766)
- During database migrations, replaces blank values with the field default when a text field changes to a numeric field and the blank values cannot be converted. Interactive DocType saves still display an error when existing values cannot be converted. (#41695)
- Adds input type checks to methods exposed through the framework, so requests with values in an unexpected format are rejected before processing. (#41724)
- Adds clearer input handling to built-in actions across the Desk, reports, calendars, notifications, and setup screens, including support for documents and workspace widgets provided in different formats. (#41728)
- Adds clearer input and output definitions to many built-in functions used by integrations, workflows, printing, and account settings, making mismatched data easier to spot during development. (#41726)
- Adds a read-permission check before emails are marked as read or unread in the Inbox, preventing users from changing the status of Communication records they cannot access. (#41718)
- Moves
requestaccess from rendered templates to server-side scripts, so templates no longer receive this information while scripts can still use it. (#41659) - Updates outdated interface color names to the current color set so backgrounds, separators, and borders appear correctly in activity timelines, code previews, the composer, and list views. (#41772)
- Creates a new Workflow Action and sends an approval email when a document returns to a workflow state it previously left; saving the document without changing its state does not create another action or email. (#41770)
- Corrects app dependency checks that mistake an app for a required dependency when its name only appears within another app’s name. (#41679)
Performance Improvements
- Reduces repeated loading of Web Form details when displaying options in Link fields; the available options remain unchanged. (#41788)
Authors: @sokumon, @ps173, @AarDG10, @kaulith, @shariquerik, @barredterra, @Shllokkk, @krishna-254, @ruthra-kumar, @deepeshgarg007
Reviewers: @sokumon, @ankush, @iamejaaz, @NagariaHussain, @AarDG10, @shariquerik, @barredterra, @ruthra-kumar, @robinroy03
AI content
For these release notes, we used an LLM (OpenAI gpt-5.6-luna) 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.
Changes with the following labels were excluded:
- skip-release-notes
Changes with the following types were excluded:
- refactor
- style
- build
- docs
- chore
- test
- ci
v15.118.0
Features
- Adds a
betweenfilter for checking whether numbers, dates, and date-times fall within an inclusive range; date-only limits for date-times include the entire ending day. (#41621) - Adds document edits, milestones, and sharing events to the activity timeline, with milestone values shown only for fields the user can access. Allows users to load older milestones beyond the initial entries. (#41745)
Bug Fixes
- Displays filter labels, conditions, and values in Dashboard Chart as plain text, so HTML entered in filters appears as text instead of being rendered. (#41597)
- Updates the bundled Vite plugin for
@framework/uito resolve its dependencies through the host application, so fresh builds can find JavaScript and asset files such as Leaflet marker images. Documents the plugin’s dependency resolution and troubleshooting steps for missing asset imports. (#41590) - Published Web Page forms now load their fields when the form sidebar is turned off, instead of staying blank. (#41605)
- Checks read access before retrieving Email Template records through standard email processing; login and workflow emails continue to use their configured templates. (#41606)
- Sends document follow-up emails only to enabled users who have opted in for the selected notification frequency. (#41614)
- Updates the
cryptographyandpyOpenSSLpackages to versions that address three reported security vulnerabilities. (#41631) - Removes the special case that always disabled two-factor authentication for the Administrator account, so its setting is checked like other User accounts. (#41688)
- Restricts ZIP extraction to POST requests and applies file-size limits to the combined contents of an archive, not just the existing File record. If extraction fails, removes files created during the attempt instead of leaving partial uploads. (#41673)
- Adds shared subscription tracking for document updates, so closing one of multiple views of a document no longer stops updates in the others. Restores live-update subscriptions for documents that remain open after a connection reconnects. (#41743)
- Preserves styling supplied by surrounding pages for notification rows, recipient selectors, and list views in production builds. Adds
section-headerandsection-bodystyling hooks to Form Layout Section for more reliable customization. (#41739) - Adds input type checks to API-accessible actions, rejecting requests with incorrectly typed values before the actions run. (#41719)
- Updates API v2 responses for document creation, reading, and updates to include empty fields, so clients can distinguish a cleared field from one that is not returned. Includes the changed document after an API v2 document action runs, so clients can see updates such as status changes without fetching it again. (#41749)
- Updates custom searches for translated DocType records to match translated values before sorting and limiting results, allowing users to find records using translated text. (#41760)
- Users see only their own Document Follow records in list and report views, while System Managers can access all records. Creating a follow now checks the user's permission to create Document Follow records. (#41763)
- Adds the required input type information to test helper methods so UI tests can run with the framework’s new type checks. (#41750)
- Allows custom User Type records to be updated without requiring a custom Role. (#41655)
- Processes existing Notification Settings in batches of 5,000 when adding Notification Type Preference entries, reducing the risk of transaction limits being exceeded on large sites. (#41765)
- Adds type information to the
publish_realtimetest helper, fixing type-checking errors in Cypress tests. (#41752) - Adds clearer input handling to built-in actions across the Desk, reports, calendars, notifications, and setup screens, including support for documents and workspace widgets provided in different formats. (#41727)
- Adds input type checks to methods exposed through the framework, so requests with values in an unexpected format are rejected before processing. (#41723)
- Adds clearer input and output definitions to many built-in functions used by integrations, workflows, printing, and account settings, making mismatched data easier to spot during development. (#41725)
- Adds a read-permission check before emails are marked as read or unread in the Inbox, preventing users from changing the status of Communication records they cannot access. (#41717)
- Moves
requestaccess from rendered templates to server-side scripts, so templates no longer receive this information while scripts can still use it. (#41658) - Updates outdated interface color names to the current color set so backgrounds, separators, and borders appear correctly in activity timelines, code previews, the composer, and list views. (#41771)
- Displays currency amounts using the decimal places defined by the applicable currency when Currency Precision is not set and Use Number Format from Currency is enabled; otherwise, it uses the global number format instead of assuming two decimal places. (#41708)
- Creates a new Workflow Action and sends an approval email when a document returns to a workflow state it previously left; saving the document without changing its state does not create another action or email. (#41769)
Authors: @ps173, @AarDG10, @kaulith, @shariquerik, @barredterra, @Shllokkk, @deepeshgarg007, @netchampfaris
Reviewers: @sokumon, @ankush, @iamejaaz, @NagariaHussain, @AarDG10, @shariquerik, @barredterra, @robinroy03
AI content
For these release notes, we used an LLM (OpenAI gpt-5.6-luna) 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.
Changes with the following labels were excluded:
- skip-release-notes
Changes with the following types were excluded:
- refactor
- style
- build
- docs
- chore
- test
- ci
v16.30.0
Features
- Adds a settings dialog with grouped sections for related options. Adds a sliding on/off toggle for forms and dialogs. (#41376)
- Adds the shared features used by CRM and Helpdesk to v16, so those apps can use forms, phone number fields, notifications, and activity history. (#41513)
- Recorder adds a timeline view for document-related actions and shows how long each step takes and which apps are involved. Administrators can turn on Capture document lifecycle timeline in Configure Recorder. (#41560)
- Adds a copy button in the About dialog for the installed app versions. Clicking an app entry copies that app’s version, and the entries also work with the keyboard. (#41281)
Bug Fixes
- SQLite now records the last query it runs, so
assertQueryCountworks on that database too. The older copy ofassertQueryCountalso turns the recorded queries into plain text before showing them in a failure message. (#41317) - Restricts Report scripts to approved methods and blocks custom document code from using private methods. (#41357)
- Google sign-in now saves the return path with the sign-in details, so the response from Google can reach the right step. (#41370)
- The Custom Field rename action now accepts
POSTrequests only. This prevents field names from changing when the page is opened directly. (#41404) - Prevents File from resaving an image when optimization leaves it unchanged. (#41354)
- Users can open only Notification Log entries addressed to them. Administrators can still open all Notification Log entries. (#41392)
- Downloads additional markup-related file types instead of opening them in the browser. (#41386)
- The SMS Settings contact lookup now checks that you can view both the Contact and the linked document before it shows a phone number. It only shows a phone number when that Contact is linked to the document. (#41382)
- Viewing another user's Event entries now requires the System Manager role. Everyone else sees only their own events. (#41380)
- The File form checks the file path again before it loads content. This blocks invalid file paths from being used to open file content. (#41351)
- Outgoing emails show images only from
assets/,files/, orprivate/files/. Images from other paths no longer appear in the email. (#41347) - The calendar now checks that the selected fields for event start and end exist before it loads events. If one is missing, it shows a clear error instead of a database error. (#41345)
- When you run an SQL query in the System Console, the result columns appear in the same order as the query. (#41131)
- Link fields now show a record’s title only when you have permission to view that record. (#41406)
- During setup, your tracking preference now takes effect only after setup completes. Setup steps are still recorded before tracking is turned off. (#41408)
- Unpublished Web Forms no longer accept submit, delete, list, or form data requests, matching the form’s published status. (#41400)
- Bulk submit, cancel, update, and workflow approval actions now accept only
POSTrequests. Document title updates use the same rule, so they do not run from a simple page visit or link. (#41388) - Cancelling a document now converts its ID to text before checking related records, preventing a crash for documents that use numeric IDs. (#41411)
- Adds a check so only users who can view a Prepared Report can export it as CSV. (#41384)
- Adds permission filtering to Tag Link so list and report results show only tags on doctypes the current user can read. (#41396)
- Restricts Dashboard Settings so only the user it belongs to can open it, while Administrator remains an exception. (#41394)
- The app now uses a backup format for very large numbers when needed, so some pages no longer show an error. (#41310)
- The follow and unfollow actions for documents now apply only to your signed-in account. (#41402)
- Updates Communication relink search to use the same list of document types on screen and behind the scenes, so it only shows options you can open. (#41432)
- Long page titles in the header now shorten with an ellipsis, keeping the action buttons visible instead of pushing them off-screen. (#41456)
- Incoming Communication emails now link to the right document even when the document type name uses different capitalization. This keeps the related record attached to the email. (#41494)
- Permission errors for child rows now name the parent document instead of the row itself. This makes it clear which document the missing permission applies to. (#41495)
- Regional language packs now keep their own translations even when apps are installed in a different order. This keeps regional wording from being replaced by another app’s base-language text. (#41501)
- Restores the notification indicator in Desk and adds an unread count to the sidebar. The count updates as new notifications arrive, and marking notifications as read now happens in one step. (#41482)
- Limits contact form submissions to 100 per hour from the same IP address and adds a Send Acknowledgement Email option in Contact Us Settings to turn the automatic reply on or off. The acknowledgement email now contains only a short thank-you message and no longer includes the submitted message. (#41512)
- Bulk delete now returns the records that could not be deleted, and the list only removes records that were actually deleted. This keeps failed deletions and deletions scheduled for later visible in the list. (#41524)
- Removes deleted records and updates renamed records in the app’s copy, so old names and deleted entries no longer appear after the change. When records are merged, the remaining record keeps its existing details. (#41530)
- Limits the requests used to get, revoke, or check tokens to
POST, while the UserInfo endpoint acceptsGETandPOST. This blocks other request types from these endpoints. (#41554) - Reloads the app list used during installation when the app is not already listed. This avoids installation failures caused by outdated app information. (#41438)
- Exporting DocType or Page as fixtures now shows an error, since these items are meant to be created from the Desk in developer mode. This avoids fixture files that fail when they are imported later. (#41445)
- Adds the Sync In Batches setting in System Settings so you can choose whether data is copied to DuckDB in batches or all at once. It also removes older DuckDB Sync records after 45 days. (#41558)
- Keeps the form menu available when the sidebar is turned off in Form Settings. (#41492)
- Marks Recorder Event as virtual, so app updates do not attempt to create a separate empty table for it. (#41566)
- Sends the User Invitation expiry email to the invited person instead of the person who sent the invite. (#41567)
- Comments in the document timeline now expand to the full width when the full-width setting is turned on. The "Load more" area matches the same width instead of staying narrow. (#41297)
- Print formats linked to a document type now stay separate from the Print Format form, so a refresh keeps the version already open instead of replacing it with the stored copy. Print preview and email composer also read that separate copy when choosing a format. (#41552)
- Updates File folder links so nested folders open with the correct folder path, and the breadcrumb no longer shows
undefined. (#41580) - Fixes record lookups that return just one value so the result stays intact instead of splitting into letters or failing on numbers. Hidden values in those results still show as
XXXXXXXXfor users without permission to see them. (#41584)
Other Changes
- Report View exports now use the saved names for linked records again instead of the titles shown in the report. (#41336)
Authors: @barredterra, @ankush, @iamejaaz, @nextchamp-saqib, @tanmoysrt, @netchampfaris, @Bowrna, @KerollesFathy, @Vibhuti410, @kaulith, @diptanilsaha, @ruthra-kumar, @RitvikSardana, @Shllokkk, @ShrihariMahabal, @nishkagosalia
Reviewers: @barredterra, @sokumon, @iamejaaz, @ankush, @tanmoysrt, @nikkothari22, ...
v15.117.0
Features
- Autocomplete dropdowns now also search within option descriptions, letting you find items by typing words that appear in their description. (#41360)
- Adds the shared features used by CRM and Helpdesk to v16, so those apps can use forms, phone number fields, notifications, and activity history. (#41517)
Bug Fixes
- Restricts Report scripts to approved methods and blocks custom document code from using private methods. (#41356)
- Link fields now show a record’s title only when you have permission to view that record. (#41405)
- The Custom Field rename action now accepts
POSTrequests only. This prevents field names from changing when the page is opened directly. (#41403) - Prevents File from resaving an image when optimization leaves it unchanged. (#41353)
- Users can open only Notification Log entries addressed to them. Administrators can still open all Notification Log entries. (#41391)
- The File form checks the file path again before it loads content. This blocks invalid file paths from being used to open file content. (#41350)
- Outgoing emails show images only from
assets/,files/, orprivate/files/. Images from other paths no longer appear in the email. (#41346) - Downloads additional markup-related file types instead of opening them in the browser. (#41385)
- Adds a check so only users who can view a Prepared Report can export it as CSV. (#41383)
- Bulk submit, cancel, update, and workflow approval actions now accept only
POSTrequests. Document title updates use the same rule, so they do not run from a simple page visit or link. (#41387) - Cancelling a document now converts its ID to text before checking related records, preventing a crash for documents that use numeric IDs. (#41410)
- Viewing another user's Event entries now requires the System Manager role. Everyone else sees only their own events. (#41379)
- Restricts Dashboard Settings so only the user it belongs to can open it, while Administrator remains an exception. (#41393)
- Unpublished Web Forms no longer accept submit, delete, list, or form data requests, matching the form’s published status. (#41399)
- Updates Communication relink search to use the same list of document types on screen and behind the scenes, so it only shows options you can open. (#41431)
- Collapsible sections you open stay open as you edit fields, including in table rows. This keeps the field you're editing visible while you type. (#41414)
- Bulk delete now returns the records that could not be deleted, and the list only removes records that were actually deleted. This keeps failed deletions and deletions scheduled for later visible in the list. (#41523)
- Removes deleted records and updates renamed records in the app’s copy, so old names and deleted entries no longer appear after the change. When records are merged, the remaining record keeps its existing details. (#41529)
- Limits contact form submissions to 100 per hour from the same IP address and adds a Send Acknowledgement Email option in Contact Us Settings to turn the automatic reply on or off. The acknowledgement email now contains only a short thank-you message and no longer includes the submitted message. (#41511)
- Limits the requests used to get, revoke, or check tokens to
POST, while the UserInfo endpoint acceptsGETandPOST. This blocks other request types from these endpoints. (#41553) - Fixes a DuckDB sync error caused by an invalid parameter. Adds options to sync data all at once or in batches, with a cleanup option that can be turned on or off. (#41480)
- Regional language packs now keep their own translations even when apps are installed in a different order. This keeps regional wording from being replaced by another app’s base-language text. (#41500)
- Keeps the form menu available when the sidebar is turned off in Form Settings. (#41491)
- Print formats linked to a document type now stay separate from the Print Format form, so a refresh keeps the version already open instead of replacing it with the stored copy. Print preview and email composer also read that separate copy when choosing a format. (#41551)
- Updates File folder links so nested folders open with the correct folder path, and the breadcrumb no longer shows
undefined. (#41579) - Fixes a v15 update problem that could prevent the site from loading after an upgrade, and keeps existing notification email preferences from being reset. (#41577)
Other Changes
- Exports from reports keep linked values in their stored form instead of replacing them with the linked record’s display name. (#41335)
Authors: @ruthra-kumar, @diptanilsaha, @ankush, @ShrihariMahabal, @barredterra, @ps173, @RitvikSardana, @kaulith
Reviewers: @ruthra-kumar, @sokumon, @NagariaHussain, @barredterra, @iamejaaz, @sagarvora, @RitvikSardana, @surajshetty3416, @ankush
AI content
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.
Changes with the following labels were excluded:
- skip-release-notes
Changes with the following types were excluded:
- ci
- chore
- style
- docs
- refactor
- build
- test
v16.29.0
Breaking Changes
- CSV and Excel exports from reports now show the title of linked records when available instead of their internal names, so the exported file matches what appears in the report. (#41216)
Features
- Adds a Cloud Settings dialog in Desk for Frappe Cloud v2 single-site setups, so users can manage cloud settings from Desk. (#41311)
Bug Fixes
- When you sign in using a linked account, the app now uses a one-time sign-in code and remembers the page you were trying to reach until sign-in finishes. Expired or reused sign-in attempts are rejected, and valid logins still send you back to that page. (#41143)
- The List View Settings dialog now uses the right title when you open List View Settings itself. It no longer repeats the name twice. (#41146)
- Google sign-in now stores the sign-in details on the server instead of sending them through the browser. Altered or expired attempts are rejected with an error message. (#41169)
- Adds an
ignore_permissionsoption when removing User Permission entries, allowing them to be deleted even when the usual access check blocks the action. (#41104) - When a record links to another record, the access rules for the linked record now affect only that linked information, not the main record. Records with no linked item still appear, and restricted linked details stay hidden. (#41242)
- Email addresses for documents now replace spaces with
%20instead of+, which lets some email providers accept them. (#41234) - Image View now keeps the "Load More" button and record-count options at the bottom while you scroll through the images. (#41238)
- Search indexing now moves on when a group of records has nothing it can add, instead of repeating that group. (#41249)
- Collapsible sections you open stay open as you edit fields, including in table rows. This keeps the field you're editing visible while you type. (#41251)
- You can now select rows in tables by tapping the checkbox on tablets and other touch devices. (#41252)
- Read-only Text Editor fields now keep long content inside a scrollable area instead of stretching the whole form. This keeps the rest of the form in view while you read through the text. (#41279)
- Document actions now check the request type before they run. Actions that change a document no longer run when it is only being viewed. (#41265)
- Hides Microsoft Edge’s built-in password reveal icon on the login page so the password field shows only one eye button. (#41298)
- The desktop user menu keeps its built-in options in the usual order, and added items appear before "Logout". (#41275)
- The Desktop Icon setup now handles workspace icons without a link instead of stopping icon creation. (#41296)
- Limits automatic default assignment for Letter Head to new records, so saving an existing letter head does not make it the default by itself. You still set Is Default manually when you want to change it. (#41300)
Reverts
- The Administrator account no longer gets all permissions in the browser by default. The app also blocks attempts to submit forms that are not meant to be submitted. (#41280)
- Removes a restriction that blocks automatic submissions for records marked as non-submittable, so the system can still submit them when needed. (#41303)
Authors: @AarDG10, @sokumon, @ShrihariMahabal, @netchampfaris, @deepeshgarg007, @KerollesFathy, @prathameshkurunkar7, @Bowrna, @krantheman, @iamejaaz, @kaulith
Reviewers: @sokumon, @ShrihariMahabal, @deepeshgarg007, @iamejaaz, @kaulith
AI content
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.
Changes with the following labels were excluded:
- skip-release-notes
Changes with the following types were excluded:
- test
- chore
- docs
- ci
- style
- build
- refactor
v15.116.1
Breaking Changes
- CSV and Excel exports from reports now show the title of linked records when available instead of their internal names, so the exported file matches what appears in the report. (#41215)
Bug Fixes
- Fetching values from child table rows through a linked field now checks the parent document’s access rights instead of the row’s own rights. Users who can read the parent document no longer see a permission warning for those lookups. (#41153)
- Fixes access rules for related records so field names are handled correctly and valid records are not left out in some cases. (#41191)
- Adds an
ignore_permissionsoption when removing User Permission entries, allowing them to be deleted even when the usual access check blocks the action. (#41103) - List views now treat Markdown Editor fields like other text fields in the filter bar, so the bar appears for lists that include them. (#40904)
Performance Improvements
- Keeps empty page and report results for users without access to them. The sidebar reuses that result instead of repeating the same check for every workspace. (#41000)
Authors: @KerollesFathy, @kaulith, @AarDG10, @ShrihariMahabal, @deepeshgarg007
Reviewers: @deepeshgarg007, @iamejaaz, @ShrihariMahabal
AI content
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.
Changes with the following labels were excluded:
- skip-release-notes
Changes with the following types were excluded:
- docs
- test
- build
- chore
- style
- refactor
- ci
v15.116.0
Features
- Adds
N_so app text can be marked for translation without changing what users see now. (#40986) - Adds a "Resend Invitation" button to the User form so the invitation email can be sent again. (#41126)
- The Email Queue replaces the saved message with a brief note only after a successful send, so retries can still send the original text if the first attempt fails. If that update fails, the email is still marked as sent. (#41096)
Bug Fixes
- Custom reports with columns linked to other records load those values in smaller groups. This helps avoid report failures when a report includes too many linked values. (#40877)
- Large filters in list searches no longer trigger a query error during validation. The system still checks these queries before running them. (#40886)
- Skips the snapshot reports check in System Settings when there is no previous saved version to compare against, avoiding an error. (#40908)
- Data exports now load related rows in smaller batches instead of all at once. This reduces the chance of errors in large exports. (#40927)
- Adds escaping for Web Form content before it is added to the page, reducing the chance of errors when the content includes special characters like
<,>or&. (#40932) - Adds a check that the user can open the selected Reference Document before Auto Repeat updates it. This prevents saving a link to a document the user cannot view. (#40948)
- Markdown content now removes unsafe HTML before it is displayed. It keeps code block language styling and lets in-page links stay on the same page. (#40955)
- Adds missing type information for the
Geolocation,Signature,Icon, andLong Intfield types so custom app code can recognize them. (#40995) - When a failed request contains data that cannot be sent back, the app returns a JSON error instead of an HTML 500 page. If that detailed error response still cannot be built, it falls back to a minimal error message. (#41036)
- DuckDB Sync connects using the database port you configured, shows Filename in the DuckDB Sync list view, and lets you filter by it. Cancelling a DuckDB Sync record is allowed even when it has linked records, and the DuckDB table no longer makes
nameits main identifier. (#41052) - Long selected values in multi-select fields now truncate inside the field instead of overflowing past the edge. (#40914)
- On phones, Query Report pages keep the table tall enough to show the rows instead of shrinking into a short scroll area. Other tables keep their current size. (#40441)
- Adds permission checks when a Prepared Report is created and when it is opened. (#41100)
- Printouts now show attachments as images only if the file is an image. Empty or non-image attachments are skipped. (#40928)
- Adds a permission check when Connected App is used to connect another user's account. It also checks the return link so it only sends the user back to a safe page. (#41066)
- The comments section now handles the page address and comment information safely when creating login links and submitting comments, so login links and comment submissions work when they include special characters. (#40901)
- Website list filters now escape entered search text before displaying it in the search bar and results label, so special characters appear as plain text. (#40911)
- The Discussion Reply content now filters out unsafe HTML before it is shown, while keeping normal formatting like bold text, links, and code. (#40941)
- Updates the timezone list in User to show current names and skip deprecated entries. (#41124)
- When you sign in using a linked account, the app now uses a one-time sign-in code and remembers the page you were trying to reach until sign-in finishes. Expired or reused sign-in attempts are rejected, and valid logins still send you back to that page. (#41142)
Authors: @ruthra-kumar, @barredterra, @iamejaaz, @ShrihariMahabal, @krishna-254, @Shllokkk, @gajjug004, @kaulith, @Jatin3128, @AarDG10, @RitvikSardana
Reviewers: @surajshetty3416, @iamejaaz, @barredterra, @AarDG10
AI content
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.
Changes with the following labels were excluded:
- skip-release-notes
Changes with the following types were excluded:
- ci
- test
- refactor
- style
- build
- chore
- docs
v16.28.0
Features
- Adds
N_()so text can be marked for translation while keeping the original wording on screen. (#40984) - The Email Queue replaces the saved message with a brief note only after a successful send, so retries can still send the original text if the first attempt fails. If that update fails, the email is still marked as sent. (#41097)
- Adds "Print" to the menu on mobile for documents that can be printed, so you can print them without opening the sidebar first. (#41116)
- Adds a "Resend Invitation" button to the User form so the invitation email can be sent again. (#41127)
- Adds a private-link option for Web Form, so you can send a form to the people you choose without making it public. The link can also fill in some details ahead of time without showing hidden details. (#40843)
Bug Fixes
- Translated messages from background jobs now appear in the language of the user who started them. If no user is assigned, background jobs still use the site's default language. (#40777)
- The "Submit" button no longer appears on forms that cannot be submitted. (#40891)
- List views now treat Markdown Editor fields like other text fields in the filter bar, so the bar appears for lists that include them. (#40905)
- Adds escaping for Web Form content before it is added to the page, reducing the chance of errors when the content includes special characters like
<,>or&. (#40933) - List View columns now keep their field names in a separate
data-fieldnameattribute instead of using them as CSS class names. This keeps column width settings from being affected by field names in the list layout. (#40936) - The Discussion Reply content now filters out unsafe HTML before it is shown, while keeping normal formatting like bold text, links, and code. (#40942)
- Adds a check that the user can open the selected Reference Document before Auto Repeat updates it. This prevents saving a link to a document the user cannot view. (#40949)
- Report views now skip translation for empty field labels, so built-in fields without a label no longer trigger translation warnings. (#40959)
- Markdown content now removes unsafe HTML before it is displayed. It keeps code block language styling and lets in-page links stay on the same page. (#40956)
- Fields that show their description on click now display the translated text in the info card instead of always showing English. (#40944)
- Fixes a case where saving a Workspace fails after adding a new chart or widget. It now reads the added widget data in the format it receives, so the page can save instead of showing an error. (#40975)
- Adds missing type information for the
Geolocation,Signature,Icon, andLong Intfield types so custom app code can recognize them. (#40996) - Creates missing Notification Settings when Desk opens, so users can access Desk even if the settings were never created. (#41002)
- Administrator now uses the document’s permission settings in the browser, so custom permission types are taken into account when access is checked. (#40994)
- Filters now keep decimal numbers unchanged when your number format uses a comma as the decimal separator. Reopening a saved filter shows the same value instead of a different amount. (#41011)
- Updates the Dashboard Chart form so fields required by certain chart types, including Document Type, Time Series Based On, Group By Based On, and Aggregate Function Based On, are marked as required before you save. It also shows Time Series Based On for Count, Sum, and Average charts instead of hiding it behind the Time Series option. (#41030)
- Empty date fields and date/time fields now open the calendar on the current month and year instead of the month and year from an earlier date. Date/time fields with an existing date also open the calendar on the month and year of that date. (#41029)
- In the Form Builder, the Label field now resizes to fit the text, so pasted multi-word labels show in full right away. (#41031)
- The Getting Started widget now stays on screen in right-to-left languages. Its text and buttons follow the reading direction. (#41033)
- When a failed request contains data that cannot be sent back, the app returns a JSON error instead of an HTML 500 page. If that detailed error response still cannot be built, it falls back to a minimal error message. (#41037)
- DuckDB Sync connects using the database port you configured, shows Filename in the DuckDB Sync list view, and lets you filter by it. Cancelling a DuckDB Sync record is allowed even when it has linked records, and the DuckDB table no longer makes
nameits main identifier. (#41053) - Updates date and time fields when you switch between documents, so they show the current document's date and time instead of the previous document's. (#41071)
- Long selected values in multi-select fields now truncate inside the field instead of overflowing past the edge. (#40915)
- The Allow Bulk Edit option now stays checked for custom table fields in Customize Form after you save. (#40875)
- Adds a permission check when Connected App is used to connect another user's account. It also checks the return link so it only sends the user back to a safe page. (#41067)
- Adds permission checks when a Prepared Report is created and when it is opened. (#41101)
- Centers the close button in sidebar cards. (#41117)
- Website list filters now escape entered search text before displaying it in the search bar and results label, so special characters appear as plain text. (#40912)
- The comments section now handles the page address and comment information safely when creating login links and submitting comments, so login links and comment submissions work when they include special characters. (#40903)
- Updates outgoing emails with a card-style layout and more consistent spacing. Fixes a broken link in the email that confirms data deletion. (#41133)
- Updates the timezone list in User to show current names and skip deprecated entries. (#41125)
- Email buttons use the smaller compact spacing again, with less padding, a tighter line height, and the previous corner style. The new dark button colors stay in place. (#41134)
Performance Improvements
- Desk now reuses empty lists of pages and reports you can access instead of creating them again each time. This reduces repeated work when there is nothing to show. (#41032)
Authors: @AarDG10, @barredterra, @sokumon, @Bowrna, @ruthra-kumar, @KerollesFathy, @kaulith, @ShrihariMahabal, @umairsy, @iamejaaz, @gajjug004, @Shllokkk, @Abdeali099, @RitvikSardana
Reviewers: @AarDG10, @sokumon, @barredterra, @nextchamp-saqib, @surajshetty3416, @iamejaaz, @DanielRadlAMR
AI content
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.
Changes with the following labels were excluded:
- skip-release-notes
Changes with the following types were excluded:
- docs
- test
- chore
- style
- refactor
- build
- ci
v16.27.1
Bug Fixes
- The "Submit" button no longer appears on forms that cannot be submitted. (#40965)
Authors: @KerollesFathy
Reviewers: @ShrihariMahabal, @iamejaaz
AI content
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.
Changes with the following labels were excluded:
- skip-release-notes
Changes with the following types were excluded:
- build
- ci
- refactor
- test
- style
- docs
- chore
v15.115.4
Bug Fixes
- Data exports now load related rows in smaller batches instead of all at once. This reduces the chance of errors in large exports. (#40930)
Authors: @ShrihariMahabal
AI content
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.
Changes with the following labels were excluded:
- skip-release-notes
Changes with the following types were excluded:
- docs
- test
- build
- ci
- chore
- style
- refactor