Weekly report
Frappe and ERPNext changes, 24 Aug to 30 Aug 2026
300 changes merged: 2 breaking, 64 new features, 10 speed-ups, 187 fixes, 37 refactors.
Breaking changes
Read these before you update. They can change how your site or app works.
- breaking German translations broken by corrupted CSV quoting Three lines had mismatched quotes breaking RFC 4180 parser; fixed quoting to restore German translations.
- breaking Refactor!: allowing page_length argument for controlling amount of fetched linked items Introduces `page_length` argument with default 0 (all linked records) for `frappe.db.get_link_options`. Breaking change.
- breaking Refactor!: allowing page_length argument for controlling amount of fetched linked items Introduces `page_length` argument with default 0 (all linked records) for `frappe.db.get_link_options`. Breaking change.
- feat Add ConditionBuilder, a nested and/or condition editor New UI component for building nested boolean condition trees, built on Filter's operator and value-control logic.
- feat Add a way for non desk apps to go desk page of the app feat: add a way for non desk apps to go desk page of the app
- feat Read doc and field-level permissions from the client Adds useUserRoles and enhanced useDoctypeMeta for SPA frameworks to check permissions without boot data.
- feat Serve apps by declared prefix under /apps Routes apps by declared URL prefix instead of hardcoding paths, unifying app hosting policy across the framework.
See all 63 changes
- feat Run contributed record customizations through the engine Record-page engine accepts contributed customizations (fields, sections, buttons) and runs them against the live form.
- feat Host the SPA shell at /apps from one bench-wide build Central SPA shell now hosts contributed record-page customizations through a seam; one build per bench instead of per-app.
- feat Run the record-page engine's tests from the shell Adds vitest harness to run 14 record-page unit test files from the frappe shell, closing test infrastructure gap.
- feat New creation flow Print format creation now starts with builder as the front door; new dialog for format type selection; HTML-only report formats route to form.
- feat Module sidebar Introduces module sidebars that will map 1:1 with module definitions.
- feat Add post_fixture_sync patch section for migrations New PatchType.post_fixture_sync runs patches after fixture and customization sync.
- feat Composer — intuitive API, host extensions, real-life stories Composer API refactored for intuitive prop handling with host extensions support.
- feat New control "Attachment Gallery" Adds Attachment Gallery form control for viewing, uploading, previewing, and deleting attachments.
- feat Add support to serve socketio and wsgi app through uvicorn single process Adds support to serve socketio, wsgi, and rq in single uvicorn process.
- perf Skip `_relevance` when search text is empty Eliminates unnecessary database calls when Link fields search with empty text on focus.
- perf Limit client cache size Adds configurable `client_cache_max_bytes` limit for doctype metadata cache.
- perf Lazy-import heavy dependencies to reduce memory usage in worker and cli Moves heavy dependencies to scoped imports to reduce memory usage in worker and CLI.
- perf Derive a test impact map from coverage, log selection in shadow mode Derives test impact map from coverage to run only relevant tests (shadow mode, no CI change).
- fix Calendar view breaks for users in a different timezone than the system Converts date range explicitly: start to start-of-day, end keeps its time to avoid excluding records on the last day. Backports: [#42255](https://github.com/frappe/frappe/pull/42255), [#42256](https://github.com/frappe/frappe/pull/42256)
- fix Enforce permission checks on list and delete fix(virtual): enforce permission checks on list and delete
- fix Check perm. before unzipping file fix(file): check perm. before unzipping file
- fix Escape Attach/Img./Sign./Barcode field values in print format temp. Escapes field values to prevent XSS in print templates.
- fix Revalidate redirect targets in get_web_image() fix(utils): revalidate redirect targets in get_web_image()
- fix Email dialog ignores document's print language Print language defaulted to system language despite document's setting; now respects guess_language() logic.
- fix Validate group_by args before saving report Validates `group_by` arguments against a strict whitelist before persisting report definitions.
- fix Attach files linked by url to attach fields Extends attach_files_to_document to handle http/https URLs and properly create File records on duplication.
- fix Honour ignore_if_duplicate on a unique key violation SQLite `bench new-site` was failing during frappe install; db_insert now honors ignore_if_duplicate flag consistently.
- fix Web form save fails when the form has a currency field fix: web form save fails when the form has a currency field
- fix Report PDF export clips columns beyond the page width fix: report PDF export clips columns beyond the page width
- fix Use espresso tokens in sidebar and dock fix: use espresso tokens in sidebar and dock
- fix Add help and menu items back fix: add help and menu items back
- fix Add the missing get_current_user_roles endpoint Record pages were failing to fetch user roles due to missing server endpoint.
- fix Apply consistent HTTP method validation to whitelisted callback dispatch Ensures callback dispatch validates HTTP methods consistently, closing a permission bypass.
- fix Keep a filtered sidebar item, and land on a doctype Allows a DocType to be the first item in a sidebar.
- fix Let the v16 sidebar conversion survive real v16 data Fixes v16 migration failure caused by bad data during sidebar conversion.
- fix Translate field labels in bulk edit dialog Builds translated field labels from parts so the Bulk Edit dropdown shows correct language labels.
- fix Allow non-system managers to print report with print format Allows non-System Manager users to print reports with custom print formats by skipping full Print Format read-permission checks.
- fix Allow null filters in custom html block link query Accepts `None` for the filters parameter in custom block link search.
- fix Removing unusable button that appears on clicking checkbox Removes an unusable button that appeared when clicking a grid checkbox.
- fix Support none filter to avoid stricter type validation Supports `none` filter to skip stricter type validation.
- fix Validate redirect target against parsed origin Adds validation layer to redirect target to prevent open redirect vulnerabilities.
- fix Validate request trace ID format Validates X-Frappe-Request-Id format before use in queries to prevent injection.
- fix Apply parent's row-level permissions to child table queries Enforces parent doctype's row-level permissions on child table queries.
- fix Escape backslashes in filter condition values on MariaDB Prevents backslash injection in filter condition values.
- fix Avoid duplicate DROP INDEX for accent/case-colliding fields during schema sync Handles case/accent-colliding column names on MariaDB during schema sync.
- fix Scope child item selection to filtered parents Scopes child item selection table to filtered parents instead of leaking all parent rows.
- fix Key link title lookups by doctype and value Report view now correctly resolves link titles when multiple Link columns contain same value.
- fix Data validation as guest in web forms Validates form data for guest users in web forms.
- fix Handle workspace rendering Makes workspace rendering robust against bad JSON.
- fix Align the timeline gutter line with the icon axis Timeline gutter icon now centered on line; even white space around comment/email avatar.
- fix Install mariadb client tools from ubuntu archives Removes dependency on external mariadb repo, uses ubuntu archives for client tools.
- fix Quote tabSingles during DocType rename PostgreSQL now finds tabSingles with quoted identifiers during Single DocType rename.
- fix Mask sensitive data in activity Masks sensitive field values in activity logs to prevent exposure.
- fix Raise error with actual reason of denial Permission error messages now show User Permission restrictions instead of generic denials.
- fix Skip link title lookup for blank Link columns in report view Stop requesting titles for null-valued Link fields in reports.
- fix Scroll to `role_html` field when click on Add Roles button Dialog closes and scrolls to Roles field instead of attempting a no-op route.
- fix Grant select on link targets to roles that need them Roles with write permission on a DocType now automatically get select on all its Link targets.
- refactor Add Pandiyan5273 to the VOUCHED list chore: add Pandiyan5273 to the VOUCHED list
- refactor Port realtime server to asyncio/uvicorn Realtime implementation ported from gevent to asyncio + uvicorn.
- refactor Release v15 chore: release v15
- refactor New util meta.get_translated_label Extract shared helper for retrieving translated field labels across DocTypes.
- refactor Vouch niraj (rtcamp) chore: vouch niraj (rtcamp)
- refactor Vouch g-sowani chore: vouch g-sowani
- feat Alternative finished goods conversion against work order Work orders can now regrade/convert to alternative finished goods during QC; remains linked to original work order.
- feat Batch split operation to produce child batches per piece BOM Operations gain Batch Split checkbox and Weight Per Piece field to auto-create child batches per unit during production.
- feat Erpnext sidebars and workspaces ERPNext adopts Sidebar fixtures replacing workspace sidebars for curated navigation.
- feat Filter sales and purchase analytics by entity Adds Entity multi-select filter to Purchase and Sales Analytics.
- feat Option to skip delivery note for service items in sales order New Selling Settings checkbox skips delivery note creation for service items (opt-in, off by default).
See all 65 changes
- feat Fix/payment-request-subscription-plans-population Payment Request now populated with subscription plan details when created from subscription-based invoices.
- feat Fix!: tax net_amount and not_applicable Adds net_amount fields to tax rows and 'Not Applicable' marker for Item Tax Template Detail.
- perf Remove dead `warehouse_condition` branch on `get_stock_ledger_entries` Backports: [#58553](https://github.com/frappe/erpnext/pull/58553), [#58554](https://github.com/frappe/erpnext/pull/58554)
- perf Restore ERPNext test coverage Restores bank reconciliation, work order overproduction, proforma PDFs, and multi-uom item-tax cases after runtime reduction.
- perf Improve ERPNext test isolation and runtime Removes manual transaction hooks, reuses shared master data, eliminates test sleeps with deterministic timestamps, and reduces redundant factories.
- fix Added permission checks on multiple payment entry whitelisted methods Added permission checks on multiple payment entry whitelisted methods
- fix Load available serial no report Fixed inventory-dimension helper referencing wrong report name, which left filters undefined. Backports: [#58561](https://github.com/frappe/erpnext/pull/58561), [#58562](https://github.com/frappe/erpnext/pull/58562)
- fix Check write permission in edit_note fix(crm): check write permission in edit_note
- fix Persist redistributed additional costs during stock entry repost fix: persist redistributed additional costs during stock entry repost
- fix Sum item and its alternate transferred qty on work order fix: sum item and its alternate transferred qty on work order
- fix Check quotation write permission before marking lost Validates write permission before the `declare_enquiry_lost` endpoint modifies a Quotation.
- fix Check sales order permission before work order creation Blocks unauthorized Work Order creation by users without read access to the Sales Order.
- fix Validate frozen accounts in period closing voucher Restores frozen-account validation that was being skipped due to argument order in version 15.
- fix Classify MRP items without a BOM as Purchase Sets type_of_material for items without a BOM so they appear and dispatch correctly in MRP reports.
- fix Translate doctype in map msg Translates doctype names in map validation messages.
- fix Ignore cancelled invoices in timesheet portal Excludes cancelled Sales Invoices from timesheet portal access checks.
- fix Sum item and its alternate transferred qty on work order Fixes transferred quantity calculation for items with alternates on work orders.
- fix Set pos profile on invoices respecting user permissions Respects user permissions when setting POS profile on invoices.
- fix Reset bin when a repost finds no stock ledger entries Zeros bin stock_value and valuation_rate when a repost finds no ledger entries, preventing bin totals from drifting.
- fix Preserve job card qty in mr transfer Keeps Job Card completed quantity through Material Request mapping instead of resetting to zero via Work Order logic.
- fix Improve message formatting and translation for validation issues Improves message formatting and translation for validation issues.
- fix Validate items against source Sales Order in Material Request Blocks Material Request from deviating from source Sales Order items.
- fix Respect zero currency precision When Currency Precision is set to 0, amounts now display without decimal places.
- fix Validate serial inventory dimensions Validates serial item availability at the inventory dimension level, not just warehouse.
- fix Account for pending job card qty Excludes pending quantity from Job Card validation to allow follow-up cards.
- fix Work Order picks wrong Delivery Date when Sales Order has the same item in multiple rows Work Order now uses the correct Delivery Date when created from rows with duplicate items.
- fix Prevent child table doctypes as accounting dimensions Hides child table/single doctypes from Accounting Dimension picker and blocks them server-side.
- fix Guard serial batch editor grid lookup Prevents grid lookup errors when form validation delays table initialization.
- fix Preserve LCV quantity across stock reconciliation Stops filtering next Stock Reconciliation by legacy batch number, preserving LCV repricing.
- fix Keep pick list links when refetching stock entry items Preserves pick list link when user re-fetches stock entry item details.
- fix Grant select on link targets to roles with write access Grants `select` permission on link targets to roles that have `write` access.
- fix Clarify duplicate internal party messages Error message now identifies which existing internal party blocks creation.
- fix Split bank charges from exchange gain/loss on multi-currency transfers Multi-currency transfers can now have both bank charges and exchange gain/loss on separate rows.
- fix Resolve subscription plans for any reference doctype in Payment Request Payment Request now resolves subscription plans for Purchase Invoice, not just Sales Invoice.
- fix Keep source rate on re-fetch when maintain same rate is enabled Skips price list fetch for rows mapped from source documents when "maintain same rate" is on.
- fix Reset hardcoded letter head on Incorrect Serial and Batch Bundle report Removes hardcoded letterhead from report configuration.
- fix Added missing filters for cost_center and projects Party Ledger Summary now filters by cost center and projects.
- fix Skip missing checkbox columns in asset type patch Asset type migration handles v15 upgrades by checking which checkbox columns exist.
- fix Carry accounting dimensions from Landed Cost Voucher charges Mandatory accounting dimensions now properly carried to Taxes and Charges rows on Landed Cost.
- fix Preserve job card transfer quantity Skip Work Order coverage cap when Stock Entry links to a Job Card, preserving transfer quantity for tracked semi-finished goods.
- fix Hide rfq status in supplier portal Hide submission status badge in supplier RFQ list to avoid confusion.
- fix Hide supplier name in rfq portal Remove redundant supplier name display in RFQ portal view.
- fix Fix/return qty validation different uom Fix return quantity validation for items where transaction UOM differs from stock UOM in partial returns.
- fix Prevent duplicate supplier quotations from portal Portal supplier users can now submit only one Supplier Quotation per Request for Quotation.
- fix Handle none price_list_rate in e-invoice xml generation Prevent Jinja template errors when price_list_rate is None during Italian E-Invoice generation.
- fix Aggregate child warehouses in Stock Qty vs Serial No Count report Report now includes stock from child warehouses when a parent warehouse is selected.
- fix Render missing terms before printing Company default Terms and Conditions now render on printed documents.
- fix Include time logs ending at midnight in timesheet billing summary Logs ending exactly at midnight or crossing into the next day are now included correctly.
- fix Supplier group filter not applied on accounts payable report Report now correctly filters suppliers by selected Supplier Group.
- fix Translate get_label results at presentation with DocType context Field labels now translate at presentation time using the correct DocType context.
- refactor Use db.count for the empty ledger check Consistency update: uses `frappe.db.count` instead of `frappe.db.exists` for the empty ledger check.
- refactor Release v16 chore: release v16
- refactor Notify support when a PR is released ci: notify support when a PR is released
- refactor Crowdin actions ci: crowdin actions
- refactor Use release token for crowdin translation push ci: use release token for crowdin translation push
- refactor Ignore python tests on update of **.po ci: ignore python tests on update of **.po
- refactor Crowdin actions to upload main.pot file ci: crowdin actions to upload main.pot file
- refactor Use Meta.get_translated_label Use new helper for translated labels throughout ERPNext.
- refactor Rename type field to secondary_item_type Rename secondary item type field to avoid generic Python field name, with migration patch for database column.
- refactor Bump po-review-action Update translation review CI action.
- feat Module sidebars HRMS navigation moves from workspace sidebars to per-module Sidebar fixtures, with nine semantic navigation-only modules.
- feat Show employer contribution in salary slip Employer contributions now shown on salary slip doc for transparency.
- fix Error message in html to text fix: error message in html to text
- fix Support custom attendance calendars Attendance calendars now pass sorting through to queries and respect custom view status colors.
- fix Skip reference field patch if payment_entry column is missing fix(expense_claim): skip reference field patch if payment_entry column is missing
- feat Migrate write TextEditor instances to frappe-ui/editor Migrates TextEditor, comment areas, email templates, and panels to reusable RichTextField component wrapping frappe-ui/editor.
- feat Backport Forms to main-hotfix Backports Forms feature from develop to main-hotfix branch.
- fix Kanban three-dot click — In Task Page Fixes kanban task card menu to open dropdown without the edit modal and adds delete confirmation.
- fix Keep deal activities visible when the lead is not readable Skips lead history when not readable instead of failing the whole activity load.
- fix Preserve scroll position in grouped list view Preserves scroll position when reopening a record in a grouped list view.
See all 9 changes
- fix Pin primary contact to top of Deal contacts list Orders CRM Contacts by is_primary before idx so primary contact always appears first.
- fix Validate form field mappings on save Form builder now re-validates field mappings against allowed catalog on save.
- fix Data field tab Selected tab in Data Fields layout is preserved after saving field edits.
- refactor Minor release v1.82.0 chore: Minor release v1.82.0
- feat Quiz proctoring with violation tracking Instructors can enable proctoring per quiz and set violation tolerance; learner camera is monitored during attempt with full event history for review.
- fix Keep the signup form independent of frappe develop Signup form broke on released frappe versions; now defines banner macro locally instead of importing from frappe develop.
- fix Show volume slider on lesson video player Volume control now visible on both embedded and uploaded lesson videos.
- fix Align sidebar icon spacing with CRM and Helpdesk fix: align sidebar icon spacing with CRM and Helpdesk
- fix Treat an unset profile field as empty, not as a change Clearing a never-set profile field no longer latches the "Not Saved" badge.
See all 8 changes
- refactor Merge main-hotfix onto main chore: merge main-hotfix onto main
- refactor Merge develop into main-hotfix chore: merge develop into main-hotfix
- refactor Revert "chore: Now, mon[dot]school domain is not owned by Frappe Team." Revert "chore: Now, mon[dot]school domain is not owned by Frappe Team."
b
Builder
1 new features · 1 speed-ups · 1 fixes · 2 refactors
- feat Published status across dashboard and editor Grid dashboard cards and editor toolbar now display publish status; heading truncation and pb-10 fixes applied.
- perf Stop the editor leaking memory, and stop pages carrying SVGs inline Fixes two memory leaks and moves large SVGs out of pages; measured on a 743 KB page: DOM nodes zero-growth after 20 cycles (was +56K), heap kept by undo −144 MB, event listeners zero-growth (was +12K).
- fix Block traversal segments in standard page export paths Developer-mode exports now reject `..` segments to prevent writing outside the app directory.
- refactor For v1.33.0 release Introduces Bob AI assistant for on-canvas page building and design tokens (Font, Dimension, Color) alongside variables.
- refactor Let the release job install past frontend peer conflicts ci: let the release job install past frontend peer conflicts
- fix Truncate long recipient names in the popover Truncates long contact names so option rows fit within the email recipient popover width.
- refactor Release hotfix to main Release hotfix to main
- refactor Agent availability through the document lifecycle Routes agent availability through document lifecycle instead of bypassing the controller via direct `set_value`.
- feat Draw a reference line where the data says Reference lines can now follow plotted data (average, median, min, max) instead of only fixed values, and update with filters or new periods.
- feat Add an end-to-end test suite Adds 61 browser-based E2E flows across eight areas (query, workbook, charts, etc.) with zero quarantined tests.
- feat Read the PR thread, answer questions, review the delta Iris review now reads PR thread, tracks settled findings, and reviews delta from prior commits.
- feat Acknowledge /iris review, report a failed run PR review bot now reacts to acknowledge reviews and reports failed runs.
- perf Name ADRs by slug, and stop writing one per ticket Removes numeric ADR numbering; ADRs now named by slug to prevent collisions on merge.
See all 20 changes
- fix Check the referenced document, not the one that names it Fixes five permission-check defects where endpoints read/wrote a second document without validating access.
- fix Let the client reach get_site_info, and land an invitee in Insights Changes `get_site_info` from GET-only to allow POST so frappe-ui's `call` succeeds.
- fix Run a public execution as its publisher, not with checks off Runs public executions as their publisher instead of as Administrator with checks disabled.
- fix Stop an unrelated comment from cancelling a review Moves iris review concurrency group to job level so unrelated comments don't cancel running reviews.
- fix Rendered output, exported files and database connections Eight independent fixes including credential permlevel, SSL certificate handling, and connection security.
- fix Mark an email alert as one, and check its recipients at save Validates alert recipients at save time and bounds them to site accounts.
- fix Tighten permission and input handling Expression context isolation, invitation key hashing, and permission boundary hardening.
- fix Do not force SSL verification on database connections Properly disable SSL certificate verification for self-signed database connections.
- fix Keep column names when the result is empty Preserve column schema in cached results to prevent KeyError on zero-row filter dropdowns.
- fix Remove the env probes that broke CI runs Fix CI environment variable checks and branch checkout for fork PRs in iris review bot.
- fix Key release notes on pull requests, not commits Release notes now build from pull requests instead of commits, avoiding duplication from backports.
- refactor Backport six fixes from develop Chart page redundant `set_value` every ~1.5s, timespan filters ignored Week Starts On, numeric x-axis plotted as series, import job state advance, and two others.
- refactor Pin the release tooling Pin release workflow dependencies to fix `conventionalcommits` version incompatibility.
- refactor Disclose the report format behind phase 3 Iris review bot now reads report format from dedicated doc instead of inline context.
- refactor Iris, a PR review bot for this repo Add three-phase PR review bot with standards from CONTEXT.md and ADRs.
p
Press
5 new features · 15 fixes · 1 refactors
- feat Add OOM kills chart to server analytics Adds OOM Kills chart to server analytics alongside Memory chart.
- feat Open advanced analytics by default Advanced analytics section now open by default; toggle still available to collapse.
- feat Allow renaming a press role Team owners can now rename Press Roles via title field.
- feat Link chart cards to the docs feat(dashboard): Link chart cards to the docs
- feat Add drag to zoom on the server and site line charts Drag-to-zoom gesture added to 19 server and site analytics charts for easier time range selection.
See all 21 changes
- fix Add press_otp and press_otp_sent cache to persistent cache keys fix: Add press_otp and press_otp_sent cache to persistent cache keys
- fix Replace the automatic table restore with a button Site updates that fail recovery now offer a manual restore button instead of attempting automatic recovery.
- fix Skip rate limit on all dedicated server plans Rate limiting now correctly skipped for all nine dedicated server plans, not just two.
- fix Require JSON config values to be an object or array fix(site-config): Require JSON config values to be an object or array
- fix Require JSON config values to be an object or array fix(site-config): Require JSON config values to be an object or array
- fix Reuse team prefix validation Reuses team prefix validation for remote files.
- fix Remove duplicate countries in local compliance dropdown Filters duplicate countries from the local compliance dropdown.
- fix Show the job error banner without impersonation Agent job error banner now visible to system users and support agents without impersonation.
- fix Show resource titles in the role resource picker Resource picker now shows title instead of autogenerated name for servers and benches.
- fix Oversample slow queries before normalizing Top Slow Queries chart now useful by oversampling before grouping by normalized text.
- fix Reuse team prefix validation Adds team prefix validation to remote file's new and restore methods.
- fix Ensure dependant apps are added before the main app Dependent apps now added before main app to resolve dependency order.
- fix Revert "fix(invoice): Set Amount due as zero once paid" Reverts previous invoice amount due change.
- fix Zoom the charts with a pinch on touch devices Touch devices now pinch-to-zoom charts instead of scroll-to-zoom.
- fix Audit and logo upload issues Resolves audit failures and logo upload issues in marketplace.
- refactor Invoice finalisation flow Moves invoice finalization from last day of month to 1st of next; increases frequency to every 30 min with same batch size per loop.
o
Other
1 breaking · 29 new features · 1 speed-ups · 62 fixes · 6 refactors
- breaking German translations broken by corrupted CSV quoting Three lines had mismatched quotes breaking RFC 4180 parser; fixed quoting to restore German translations.
- feat Bulk-add members with a searchable picker Replaced single-person picker with searchable multi-select list and "add everyone" one-click for communities with hundreds of members.
- feat First-class WebDAV server Drive now runs as an RFC 4918 Class 1+2+3 WebDAV server at `/dav/`, compatible with Windows Explorer, Finder, rclone, MS Office, and mobile file managers.
- feat Draft and declined events, plus follow-up fixes Adds isDraft and isDeclined flags to calendar events with dashed/struck-through rendering; fixes Tabs and related UI components.
- feat Draft and declined events, and a week-aware header Calendar events now distinguish draft (saved, unsent) from declined state; primary button adapts to Send/Save based on invitation status.
See all 99 changes
- feat Multi-day spans, a sidebar mini month, and upcoming events Draws multi-day events across their date spans, adds a sidebar mini-month calendar, and lists upcoming events.
- feat Let the add-app dialog accept a typed branch Extends the add-app dialog's branch picker to accept typed custom branches.
- feat Accept a custom frappe branch in the setup wizard Allows typing a custom Frappe branch in the setup wizard alongside the curated list.
- feat Add open presentation link to desk form Adds "Open Presentation" web link on Presentation Desk form.
- feat Size month rows to their events instead of hiding them Month view rows grow to fit their events instead of using fixed 5–6 row grids with "n more" buttons.
- feat Serve site storage from a six-hourly report Serves site storage sizes from a cached six-hourly report instead of computing inline on every request.
- feat Integration for S3 service Adds garage service backend for object storage with bucket creation on demand and pilot integration.
- feat Join or leave a community from Settings Settings dialog now includes entry in account menu and allows joining/leaving communities.
- feat Add co-host promotion in UI Meet Room owners can now promote authenticated participants to co-host with UI action.
- feat Add support for Garage S3 Adds S3 support for Garage object storage backend.
- feat Integrate logs using fluent-bit Adds `pilot setup logs` command to install fluent-bit and send logs to Datum.
- feat Manage the default whatsapp account automatically First account added becomes default; deletion blocked while others exist.
- feat Default a new bench to lite mode New benches default to lite mode (single process) by default.
- feat 'Allow Guest Access' option for pages Pages can now toggle guest access; guests redirected to login if disabled.
- feat WhatsApp notification channel + title case template enums Adds WhatsApp as Frappe Notification channel; fixes template enum capitalization.
- feat Notification channel support, auto default account management Adds notification channel support with automatic default account management.
- feat Reports Redesign, billing overview and payment dialog polish Design polish on billing console cards and dialogs; parking Payment log door for now.
- feat Feat(Calendar)!: span multi-day events across the days they cover Multi-day calendar events now span their full range with proper rendering for month and week views.
- feat Include the meet link in the ICS LOCATION Frappe Meet link appended to LOCATION property in generated ICS files.
- feat Enforce single participant connection Enforces at most one active Participant Connection per participant and Meet Room.
- feat Container security checks feat(actions): container security checks
- feat Add support for traces feat: Add support for traces
- feat Thread view cleanup Collapsed messages now show one-line summaries instead of full headers, saving ~50% viewport space per message.
- feat Surface meeting info in toolbar Meeting info popover added to toolbar showing E2EE state, fingerprint, and meeting options.
- feat Pick the reply identity from the original message's recipients Multi-identity reply now automatically selects the identity the message was addressed to.
- perf Cut AGENTS.md to what the code cannot teach Rewrites AGENTS.md to omit patterns agents can learn from codebase precedent.
- fix Fix negative tax rate adds to grand total instead of reducing it Tax amounts were passed through `.abs()` which stripped the sign from negative taxes like withholding tax.
- fix Use startsWith('Sales') for party labels in print templates Hard-coded `entryType === 'SalesInvoice'` caused non-invoice sales types to show wrong labels ("Supplier" instead of "Customer").
- fix Sum outstanding amounts across all references in payment validation Multiple invoice payment validation was using assignment instead of accumulation, keeping only the last value.
- fix SalesQuote list view shows 'Paid' status incorrectly Switched from invoice status column (which shows payment states) to document status, and removed misleading outstanding amount column.
- fix Force Latin digits in number formatting for all locales Arabic locales defaulted to Arabic-Indic numbering; now forced to Latin digits globally.
- fix Link field search stops working after clearing selection Component cached database results; clearing the field didn't invalidate cache, so subsequent searches returned stale results.
- fix Foreign currency invoices incorrectly marked as "Partly Paid" on submit Payment status checked were comparing base currency amounts instead of invoice currency amounts.
- fix General Ledger Ref Name filter dropdown empty & Accounting Entries navigation broken General Ledger Ref Name filter dropdown empty & Accounting Entries navigation broken
- fix Add currency details for Georgia in countryInfo.json Added missing `currency` and `currency_name` fields; fixed `currency_symbol`.
- fix Fix horizontal scroll, off-center page, and dynamic rescaling (ReportPrintView) Page preview had horizontal clipping, was offset right, and scale didn't update on window resize.
- fix Litmus prepare opts the user in; matcher handles CR lines WebDAV compliance setup now creates Drive Settings with webdav_enabled; ledger matcher handles carriage-return progress lines.
- fix Frappe-ui update fallout — tabs, mobile search, and the details chevron Migrated tabs to value-based selection, fixed mobile search, and restored chevron in details pane after frappe-ui v1 update.
- fix Don't hardcode studio file access to System Manager, check has perm directly fix: don't hardcode studio file access to System Manager, check has perm directly
- fix A user with no Gameplan role sees onboarding instead of a 403 SPA now correctly renders 403 errors instead of showing onboarding; permission queries fixed to check user roles before returning empty list.
- fix Unify appearance preferences Consolidated theme preference to User.desk_theme; removed divergent Mail, Calendar, Writer, and Meet theme implementations.
- fix EPF calcualtion logic Fixes EPF wage calculation to use basic wages plus dearness allowance per EPF Act 1952, not gross minus allowances.
- fix Render search palette content Binds Mail's search content to the dynamic overlay's default slot so the desktop palette renders.
- fix Exclude the app-update poller from task listings server-side Hides the `fetch-all-app-updates` poller from task listings by adding an `is_listed` flag.
- fix Expand chat composer to four lines Raises chat input max-height from 44px to 88px to prevent long messages from being clipped.
- fix Reduce mobile camera workload Requests lower-resolution, lower-frame-rate camera on mobile and uses distinct simulcast layers to reduce encoding load.
- fix List every branch via one git ls-remote Lists all branches using `git ls-remote` instead of paginated REST API, ensuring version branches like `version-16-hotfix` appear.
- fix Open sites on their served origin and hint when the host cannot resolve Opens sites on their actual served origin (handles http/non-default ports) and clarifies errors when the host cannot resolve.
- fix Ignore xss filter for block & route fields Ignores XSS filter for block and route fields since the framework now sanitizes JSON fields.
- fix Encode presentation slug and fix statement terminators Encodes presentation slug with `encodeURIComponent` and adds missing semicolons for style consistency.
- fix Keep the remembered position when leaving the tray Stops overwriting remembered panel position when expanding out of the tray.
- fix Mark fully discounted order lines as free items Marks 100% discounted Shopify order lines as free items so ERPNext keeps the zero rate.
- fix Use --dev flag instead of --serve-assets for frappe runner Uses `--dev` flag for frappe runner and installs dev extras on dev benches.
- fix Repair chromium exec bit when the binary is already downloaded Restores executable bit if chromium binary exists but lost permissions.
- fix Polygon tool icon reads as freeform, not a fixed pentagon Changes polygon tool icon from fixed pentagon to freeform shape.
- fix Pen/highlighter middle size dot Evens out preview dot sizes for pen/highlighter size pickers.
- fix Selection box paints above shapes on the unified canvas Selection chrome now renders above shapes on unified canvas.
- fix Curved connector's control-point drag now tracks the cursor at any zoom/pan Curved connector control-point drag now uses correct coordinate transformation.
- fix Sync-image reconstitution must not flatten rootfs ownership Distributed images preserve /home/frappe ownership on all hosts.
- fix Run scheduled backups from cron and save schedules in UTC Scheduled backups now run from cron with correct module imports and UTC schedule storage.
- fix Derive ssh public key when the .pub sibling is absent Derives public key from private key with ssh-keygen when .pub file missing.
- fix A dangling default_user_image link must not block every Server op Server operations no longer fail due to dangling Atlas Settings links.
- fix Fix/create sites before dns config Creates sites directory before writing dns_multitenant config.
- fix Ensure tmp env uses bench python version Temporary environment uses correct bench Python version.
- fix Hide attachments from home DocType attachments excluded from default home listing.
- fix Restrict presence previews Unapproved users in restricted meetings no longer receive SFU presence-preview tokens.
- fix Restore app switcher navigation Replaces deprecated custom menu rows with native app-switcher actions.
- fix Simplify muted toolbar buttons and pfp in chat panel Removes filled red background from muted toolbar controls; adds participant profile images to chat.
- fix Return search results the caller can actually read Drive search now filters permission before pagination instead of after.
- fix Source keys from Frappe Cloud Keys sourced from Frappe Cloud instead of hardcoded.
- fix Merge dialog navigation and global admin access to private communities Merge dialog navigation fixed; global admin access to private communities enabled.
- fix Verify full host stack before skipping packages Full system dependency check before skipping package installation.
- fix Page lists on the server's `has_next` signal Drive pagination now relies on server's has_next signal instead of client row counting.
- fix Refine home scheduling UI Refines home scheduling UI with shared AM/PM options and improved avatar grouping.
- fix Hide tooltips with toolbar Toolbar button tooltips hidden when Meet auto-hides controls.
- fix Resolve missing kwargs for get_sql fix: resolve missing kwargs for get_sql
- fix Remove unclosed string from headers fix(nginx): Remove unclosed string from headers
- fix Remove dead get_docs_attached_to endpoint Removes an unreachable endpoint that loaded File objects without permission checks, closing a thin existence-only permission gap.
- fix Stop querying dropped old_name field in translate_old_name Stop SQL errors from legacy `/drive/{file,folder,document}/` redirects on migrated sites.
- fix Partial Settlement overshoot no longer creates orphan principal demand Extra principal payments in overshoot settlements are now linked to the repayment schedule.
- fix Remove orphaned temp upload file on quota rejection Temp files from rejected uploads are now cleaned up to prevent disk leaks.
- fix Compare against actual writer-home route name Error page Go Home button no longer renders on the home error page itself.
- fix Don't keep sender copies of custom invite emails Custom calendar invites are destroyed after sending so they don't clutter sender's mailbox.
- fix Bound participant snapshot retries Participant snapshot recovery is limited to three retries and escalates on exhaustion.
- fix Fail recovery on snapshot errors Snapshot errors now properly fail recovery instead of silently accepting degraded state.
- fix Clip slideshow overflow Slideshow root clips overflow to prevent scrollbars across different monitor viewports.
- fix Correct service name retrieval (WRT-7) Use full shipping service name instead of product name to distinguish between services.
- fix Preserve recorder integration evidence Upgrade Suite CI actions to Node 24-compatible releases and fix artifact upload permissions.
- refactor Remove dead per-app www page controllers Removes legacy www controllers for drive, mail, writer, meet, calendar, and slides apps.
- refactor Update frappe-ui beta Updates Frappe UI submodule and frontend dependency to v1.0.0-beta.54.
- refactor Remove pre-commit autoupdate workflow ci: remove pre-commit autoupdate workflow
- refactor Release v3 Beta Release v3 Beta
- refactor Port sshpiper recipe port sshpiper recipe
- refactor Port garage recipe port garage recipe