Weekly report
Frappe and ERPNext changes, 3 Aug to 9 Aug 2026
182 changes merged: 59 new features, 23 speed-ups, 82 fixes, 18 refactors.
- feat Ability to disable / enable app Allows disabling/enabling apps without uninstalling, hiding their APIs, pages, doctypes, scheduled jobs while keeping data intact.
- feat Add between operator to evaluate_filters Filters can now use the `between` operator for range queries.
- feat Add depreacted flag for doctype Deprecated badge shown on doctypes.
- fix Remove request from render globals & place in exec globals Removes request object from safe_exec render globals where it poses a security risk, moving it to exec globals.
- fix Fall back to record name for card title Displays record name as fallback when a Kanban card's title field is missing or empty.
See all 22 changes
- fix Fix user level validation fix user level validation
- fix Print the doctype default when a print format name does not resolve Falls back to doctype default when print format name is stale or missing, covering renamed/deleted formats and null parameters.
- fix Honour the doctype default print format in generator downloads Resolves omitted print_format through the same choke point as printview so generator downloads honor the doctype default consistently.
- fix Bump cryptography past three advisories Addresses CVE-2026-69247 (Bleichenbacher oracle in pkcs7_decrypt), CVE-2026-69248 (wildcard SAN escape), and a third advisory.
- fix Add perm. chk. to get_email_template Prevents unauthorized access to email templates.
- fix Virtulization and pagination issue due to variable card height Kanban board with mixed-height cards broke virtualization math; fixed by normalizing card heights.
- fix Keep quick-list controls buttons visible without hover fix(quick-list-widget): keep quick-list controls buttons visible without hover
- fix Form does not render when form sidebar is disabled fix: form does not render when form sidebar is disabled
- fix Return `Self | None` type from `doc.get_latest()` Fixes return type annotation for better IDE and type checker support.
- fix Only check for enabled users Document follow notifications now skip disabled users.
- fix Render filters as plain txt Prevents injection via dashboard chart filter values.
- fix Skip desktop icon creation when the label is already taken fix: skip desktop icon creation when the label is already taken
- fix Key rate limits on the endpoint, not on `cmd` fix: key rate limits on the endpoint, not on `cmd`
- fix Show warning over same label Workspace shortcuts with duplicate labels now show a warning.
- refactor Share sys default helpers with web bundle Website pages broken by moved checkbox defaults fixed by sharing sys default helpers.
- refactor Remove dead code refactor(document_follow): remove dead code
- refactor Vouch @cogk chore: vouch @cogk
- feat Split exchange gain and exchange loss accounts Adds Exchange Gain Account and Exchange Loss Account to Company so realized FX gain/loss books to separate accounts instead of one combined.
- feat Validate stock value and stock closing entry before period closing Period Closing Voucher now validates stock ledger value and requires completed Stock Closing Entry.
- perf Rework Purchase Invoice hold actions and enforce them on Journal Entry Replaces module-level block/unblock/release endpoints with whitelisted document methods that enforce hold rules and prevent Journal Entry from booking against held invoices.
- fix Group work order actions under the Create menu Consolidates Work Order create actions (Pick List, Material Request, Material Consumption, Additional Material Transfer) under a single Create menu instead of scattered buttons.
- fix Round Production Plan mr_items quantity to field precision Fixes floating-point precision loss in Material Request quantities derived from Production Plan, preventing unrounded values like 5738748.300863984 from entering the database.
See all 13 changes
- fix Purchase return of batchwise valuation batch valued at original receipt rate instead of batch avg rate Fixes batch valuations being calculated at original receipt rate instead of current average rate, which stranded negative residues in batch values.
- fix Drop call to confirm_if_drafts_exist missing on v16 Removes call to missing utility on version-16-hotfix that prevented Material Request's "Create Purchase Orders by Supplier" dialog from working.
- fix Sync translations from crowdin sync translations from crowdin
- fix Work order name in shop floor view work order name in shop floor view
- fix Respect Customize Form hidden setting on Update Stock Field hidden via Customize Form no longer reappears on refresh.
- fix Do not copy Blanket Order naming series to the mapped order Sales Orders and Quotes from Blanket Orders now use their own series instead of inheriting.
- fix Validate Blanket Order item quantity is greater than zero fix: validate Blanket Order item quantity is greater than zero
- fix Incorrect batch-wise valuation rate for entries with same posting datetime Tiebreaker now uses correct timeline instead of mixing Stock Ledger and Serial/Batch creation times.
- feat Enhance Unpaid Expense Claim report Company, Department, Branch filters; Group By with subtotals.
- perf Hide HR customizations while the app is disabled Hides HR customizations when HRMS app is disabled as part of app enable/disable feature.
- perf Revert "feat: add on-duty legend in the montly attendance sheet report" Revert "feat: add on-duty legend in the montly attendance sheet report"
- fix Enforce mandatory leave approver and sync leave approver name Moves leave approver validation to server-side to prevent blank or mismatched approver names, with a patch to backfill existing records.
- fix Fix holiday count for date ranges spanning months Fixes Monthly Attendance Sheet showing fewer holidays when date range spans month boundaries where day-of-month repeats (e.g. 15th of consecutive months).
- fix Truncate long recipient names in the popover Fixes email composer popover scrolling sideways with long contact names by adding min-width constraint to flex text columns.
- refactor Use framework ui plugin Uses framework UI plugin for dependency installation and deduplication.
- refactor Hotfix to main chore(release): hotfix to main
- feat Let string filters match an exact value Adds `equals` and `not equals` operators to string filters so users can match exact values without being limited to distinct-value picker.
- fix Let a workbook owner share without an admin role Allows workbook owners to share without Insights admin role by reading the share roster independently instead of relying on User listing permissions.
- fix Apply user permissions in data source exploration Data source endpoints (table preview, row count, schema) now enforce user permission filters; closes a hole where users could preview all rows they weren't authorized to see.
- fix Show the accounting nudge on the Accounting workspace fix: show the accounting nudge on the Accounting workspace
- fix Chart breaks when the chart type changes Switching chart types no longer empties config slots.
p
Press
7 fixes
- fix Skip alerts for disabled teams and users Skip alerts for disabled teams and users
- fix Add usage record to own team Add usage record to own team
- fix Use query.run() to get servers Uses SQL union support added in early 2024 instead of separate queries.
- fix Make billing overview page responsive Make billing overview page responsive
- fix Record failure when agent returns a non-JSON body Handles 502 HTML errors from nginx instead of crashing on JSON decode.
o
Other
52 new features · 20 speed-ups · 37 fixes · 12 refactors
- feat Push host and per-VM metrics to datum (+ /metrics endpoint) Exports host and per-VM metrics from the boat daemon to frappe/datum with Prometheus /metrics endpoint support.
- feat Export host and per-VM metrics to datum (spec ch.34) Atlas control-plane half of metrics export: mints RS256 JWTs per resource, builds token files, and refreshes them on schedule.
- feat Add live host utilization metrics (memory used, CPU, network, disk) Adds host memory, CPU busy seconds, and network/disk byte counters read from /proc, exported to both datum push and /metrics endpoint.
- feat Mint, store, install and read the per-host Boat token Server gains boat_token and boat_token_expires_at fields; Atlas mints fresh tokens instead of relying on operator-placed config.
- feat Disable and enable apps on a site Pilot integration for disabling/enabling apps: reads disabled state from Frappe and offers inline re-enable on app removal.
See all 121 changes
- feat /watch reconciler hub, `boat pool` verb, and token rotation Publishes reconciler observations to /watch, adds boat pool verb, and implements token rotation with hard-expiry and SIGHUP reload.
- feat Drive the host verbs over HTTP, not SSH Migrates host verbs from SSH to boat daemon HTTP transport so retried Tasks replay through operation journal rather than running twice.
- feat Drive the standalone base-image ship over HTTP Finishes SSH→HTTP migration by running standalone base-image export through boat daemon HTTP surface.
- feat Say why collection will fail, when the data already knows Adds collection failure prediction with three modes (Optimistic, Assumed, Derived) so operators know when a team can't be billed.
- feat Drive the host verbs over HTTP, not SSH Moves every host verb onto daemon's HTTP surface with journaled transport.
- feat Roll a team forward, month by month Fixes simulator to roll state forward month-by-month instead of independently querying the database for each month.
- feat Project a team's billing before it happens Billing simulator showing invoices and next-state for any team and period without actually running the billing operation.
- feat Split billing decisions from their effects Separates billing decision functions (rating, dunning) from their effects so rules can be queried without performing them.
- feat Scheduled send and undo send via JMAP FUTURERELEASE Implements Gmail-style undo send: emails held for 13 seconds with 10-second undo window.
- feat Add Activity page Add Activity page
- feat Add Global Searchbar Add Global Searchbar
- feat Crop images crop images
- feat Open a saved recording in the Audio Editor Adds "open in Audio Editor" action to library recordings for in-place trimming/fading without re-importing.
- feat Export edited audio as Opus, not just WAV Adds compressed audio export using browser MediaRecorder/WebM Opus alongside lossless WAV.
- feat MariaDB variable editor Introduces DB quick actions for Pilot-managed MariaDB: toggle Performance Schema, adjust InnoDB Buffer Pool, set max connections, restart.
- feat Add a Tone Generator tool Pure-tone generator (20–20,000 Hz) with waveform selection, musical note snapping, and A4 / 1 kHz presets.
- feat Chef-facing API — neutral seam rename + bare-VM/snapshot/promote endpoints Neutral seam rename (satellite→service), and adds chef-facing API: bare-VM provisioning, snapshot/promote endpoints.
- feat Add an Audio Inspector tool Inspect audio files locally: duration, channels, size, type, waveform, and sample rate read from WAV headers.
- feat Add a Metronome tool Web Audio metronome: 30–300 BPM, accented downbeat, beats per measure, volume, tap tempo, and beat indicator.
- feat Retire the 4 per-VM systemd hooks — firecracker-vm@ boots via boat verbs Replaces four per-VM Python ExecStartPre/Post hooks with byte-compatible boat verbs so units boot through daemon commands.
- feat Parse `compose` + track modes-declared in the manifest Adds `compose: list[str]` for ordered base recipe stacking and modes_declared flag to chef manifests.
- feat A batch of July bug fixes Shell blanking while user-list request in flight, posts publishing with no body when save races with paste — four fixes across four commits.
- feat Two 1.0.0 freeze decisions: the at-bar checklist (ADR-0011) and the template-ref surface (ADR-0012) Docs-only: adds at-bar checklist spec and ADR-0011 for public exports frozen at 1.0.0, plus ADR-0012 on template-ref surface decisions.
- feat Mint metrics tokens for Datum feat: Mint metrics tokens for Datum
- feat Backend notification layer Unified dispatch engine with in-app feed API, per-user read state, and email audit logging.
- feat Atlas → Boat: the cutover VM mechanics split into the Boat Go daemon.
- feat Upgrade an existing host's boat generation without a re-bootstrap `Server.upgrade_boat()` brings a bootstrapped host up to the boat generation without full re-bootstrap.
- feat Refactor(editor)!: open a suggestion menu with a command, not an export refactor(editor)!: open a suggestion menu with a command, not an export
- feat Mind-map gap-insertion add-node handles Mind-map nodes show gap-insertion (+) handles for each insertion slot between children.
- feat Move the update prompt into the sidebar footer PWA update prompt moved from floating card to compact sidebar pill.
- feat Simple WAV editor / trimmer Single-track audio editor built on browser-native Web Audio.
- feat Recorder polish — presets, device, live waveform, tags Quality presets (Voice/Music, compact/standard/high), device selection, live waveform, tagging.
- feat Mind-map children aren't freely draggable; dragging a root moves the whole map feat: mind-map children aren't freely draggable; dragging a root moves the whole map
- feat Subtle hover outline on the shape under the cursor Blue halo indicates interactivity on hover.
- feat Dropping a Parent Node drops you straight into typing "New idea" seeded and pre-selected.
- feat Mind-map & flowchart nodes select to a plain border Auto-layout nodes show selection outline only, no resize handles.
- feat Mention organization users inline @-mentions in composer; mentions render as mailto: links in sent mail.
- feat Add support for claims match feat: Add support for claims match
- feat Suite setup Setup wizard with welcome, workspace config, team invites, completion.
- feat Add Global search bar feat(ui): Add Global search bar
- feat On-device Script Conversion Deterministic script conversion between Indic scripts without network.
- feat SSRF-guarded link metadata fetch Validates DNS resolution and IP ranges to prevent SSRF.
- feat Trips/Projects, Budgets, and bulk actions Project/trip grouping, budget tracking, bulk categorization.
- feat Personal Expenses core Private, owner-scoped tracker with rule-based categorization.
- feat Live ECB base-currency conversion Fetches reference cross-rates from ECB; pre-fills conversion rate.
- feat Receipts — validated private image/PDF Attach receipt images/PDFs (JPEG/PNG/GIF/WebP/PDF, max 10 MB).
- feat Audio Recorder slice Browser-native Web Audio API; stores as private Frappe File.
- perf Refactor limits & read settings Refactor limits & read settings
- perf Adopt frappe-ui form components in Notes Migrates NotesView from hand-rolled HTML to frappe-ui components (TextInput, Checkbox, Dropdown, ErrorMessage, TagInput).
- perf Move to clickhouse allowing direct insights support Move to clickhouse allowing direct insights support
- perf Cover the shared clock, and drop a duplicate date helper Adds tests for useNow reference counting, midnight roll, seven-column timer sharing, and teardown path.
- perf Adopt frappe-ui form components in Reminders Migrates RemindersView (13 P1 · 6 P2 · 2 P3) to FormControl for all inputs with DatePicker, TimePicker, Combobox, Select.
- perf Adopt frappe-ui form components in Checklists Migrates ChecklistsView (9 P1 · 8 P2 · 2 P3) to TextInput, FormControl textarea/date, and Checkbox.
- perf Adopt frappe-ui TabButtons for segmented tabs Replaces three custom SegmentedTabs with frappe-ui TabButtons component.
- perf Adopt frappe-ui form components in Library Migrates LibraryView (10 P1 · 14 P2 · 2 P3) to TextInput, FormControl select/textarea, and TabButtons.
- perf Adopt frappe-ui form components in Expenses Migrates ExpensesView (46 P1 · 13 P2 · 5 P3) from hand-rolled HTML to FormControl with unified label/required/error handling.
- perf Fix broken linting Fix broken linting
- perf Adopt frappe-ui app shells Adopts frappe-ui app shell component for Drive, showing mobile state on tablet and preserving filter/list state on navigation.
- perf Add frappe-ui as a submodule and alias it in dev Adds frappe-ui as submodule so local edits show up without publish/reinstall cycle.
- perf Remove the Atlas Python that Boat replaced Deletes 29 lines of Atlas Python across 32 per-verb commits with zero-regression parity checks at every step.
- perf ADR-0010 — what earns a subpath export vs root Documents architecture decision; removes unused code-editor subpath.
- perf Turn off sourcemaps in builds by default 18-25% faster builds; 7-31% less peak memory.
- perf Remove repeated queries in daily accrual, demand and classification jobs Database queries moved outside loops; 18-25% speedup for 1000-loan batches.
- perf Destroy the editors suggestion-open builds Prevents pending timeouts after test teardown.
- perf Fix World Clock add-city selector test(e2e): fix World Clock add-city selector
- perf Authenticated storageState + preferences read recovery E2E tests now run authenticated using Playwright storageState.
- perf Reconcile the authenticated browser matrix 172 tests across chromium/firefox/webkit/mobile brought back to green.
- fix Stop a late document publish overwriting what was typed Fixes three locations where stale cached documents overwrote user input by using the synced-field pattern to order IndexedDB and network updates.
- fix Stop a cached doc overwriting fresher data in docStore Ensures cached documents don't land after fresh server data and move docRef backwards in time.
- fix Clone apps with full history on a dev install Fixes dev installs cloning apps with depth=1, leaving them unusable to work on.
- fix Keep the clock live so today moves at midnight Fixes Calendar staying on yesterday past midnight and current-time line not moving by reading from a shared ticking ref instead of computing new Date() inside computeds.
- fix Correct the DB analyzer's PostgreSQL diagnostics Fixes database analyzer showing blank processes, incomplete storage, and incorrect lock info on PostgreSQL by adding engine-specific query paths.
- fix Prune temp packs left by a killed fetch Cleans up orphaned git temporary pack files left by killed fetches that accumulate indefinitely and fill storage.
- fix Auto-revert when the update phase fails Automatically reverts a failed update back to the previous revision without user intervention when app/validation phases fail.
- fix Widen beautifulsoup4 pin to resolve with frappe Widens beautifulsoup4 pin range so a strict resolver can install frappe and suite together.
- fix Allow serving files from bench root to support worktrees Expands vite fs.allow to include symlinked app folders so Studio can serve worktree components.
- fix Improve local network indicator Uses server score and WebRTC stats to better detect network problems in Meet.
- fix Stop assigning the Tenant Administrator role on Stalwart Removes unnecessary Stalwart admin role assignment since mail admin calls are proxied through configured credentials.
- fix Only render children/slots if they exist Fixes Avatar fallback and component defaults by not always passing empty default slots.
- fix Constrain local file storage paths constrain local file storage paths
- fix Queue share notifications queue share notifications
- fix Allow uploads with unknown MIME types allow uploads with unknown MIME types
- fix Normalize backend storage paths normalize backend storage paths
- fix Improve grafana chart representation improve grafana chart representation
- fix Restrict user access endpoint restrict user access endpoint
- fix Sticky headers blending with dialog Fixes sticky headers blending with modal dialogs by applying proper stacking context.
- fix Prevent flashbang while theme switching Prevent flashbang while theme switching
- fix Raise on JMAP method-level errors in changes calls Fixes fetch_changes crashing with misleading KeyError when JMAP server returns method-level errors in response.
- fix Sanitize name and validate email before indexing addresses Strips quote characters from display names and validates email syntax to prevent FTS index parsing errors.
- fix Assign Wiki User role without triggering nested User.save() Prevents duplicate background task enqueues in multi-worker setups.
- fix Letterboxed, overflowing YouTube embeds on the public reader YouTube embeds with mismatched aspect ratios now constrain to 16:9 and respect max-width.
- fix Improve ui consistency fix(drive): improve ui consistency
- fix Keep bracketed addresses out of the HTML parser Addresses like `` in message bodies no longer get dropped by the sanitizer.
- fix Run e2e tests as suite user Tests now run as suite user instead of admin.
- fix Add copy link action to creation toast fix(meet): add copy link action to creation toast
- fix Stop coercing neutral ink to a hue, and open suggestion menus from a button Editor ink stays neutral; suggestion menus open from a toolbar button.
- fix Cleaner Parent Node icon + rename the mind-map insert tile Tile renamed from "Mind map" to "Parent Node".
- fix Node text renders live while typing Text editor paints above shape layers.
- fix Mind-map branch connectors curve symmetrically up and down fix: mind-map branch connectors curve symmetrically up and down
- fix Mind-map branch connectors are structural Connectors no longer selectable/editable; colour tracks child node.
- fix Broken ci and linter CI and linter configuration fixed; pre-commit run across all files.
- fix Rely on VS Code port forwarding Adapted to Frappe's localhost-only dev server.
- fix Legible AppShell chips Replaced undefined ink tokens with legible background colors.
- fix ServerListPanel conflict regression fix(servers): ServerListPanel conflict regression
- refactor Declare supported Frappe versions Adds `[tool.bench.frappe-dependencies]` table to declare supported Frappe versions in pyproject.toml.
- refactor Upgrade vite to 8.x upgrade vite to 8.x
- refactor Remove dashboard.html from rebuild remove dashboard.html from rebuild
- refactor Add CLAUDE.md development guide for the Draw app Development guide covering architecture, design source of truth, skill usage, chrome/token rules, and common commands.
- refactor Restore canvas --t* theme-preset description in CLAUDE.md Restores canvas theme-preset (`--t-fill`, `--t-stroke`, `--t-ink`) system documentation after incorrect path search.
- refactor Remove unused dismissUpdate helper Removes PWA update dismissal function that lost all callers after update prompt moved to sidebar.
- refactor Remove whole-tool Favourites + delete dead Home Removes star favourites feature and dead Home page completely.
- refactor Update Scaleway provider SVG Update Scaleway provider SVG
- refactor Dead frappe-ui token classes (transparent comment surfaces + invisible borders/accent/ring) Fixes token classes with CSS variables but no generated Tailwind utilities that compiled to nothing (transparent surfaces, borderless buttons).
- refactor Drop UPPERCASE from section-header labels (sentence case) Removes `uppercase tracking-wider` from all section headers following Frappe UI sentence-case rule.
- refactor Drop vestigial guestAvailable field chore(registry): drop vestigial guestAvailable field
- refactor Use `AvatarGroup` in grouped tile refactor(meet): use `AvatarGroup` in grouped tile