Being an Engineer at a Democratic Workplace means that you decide what you want to work on, you decide your work timing, nobody forces you to work a certain way if you're not okay with it, and nobody hounds you five time a day asking how much progress you have made today.
And what comes out of it? You put your best foot forward each day, you don't restrict yourself as "just an Engineer" and willingly do more. You feel fulfilled and content with your work because you know your product is truly yours.
If this sounds like something you would want to implement in your workplace, you should seriously consider attending our Democracy at Workplace Conference.
Table of Contents
Framework is now leaner
We all know how our framework is batteries included, but it also had some appliances included. In this iteration of the cleanup, we have separated four apps from the framework.

SQLite Search
We now have a generic full text search framework based on SQLite FTS5 with the following features:
- DocType driven document indexing with configurable fields
- Filtering API based on arbitrary metadata fields
- Permission aware filtering
- User defined filtering (for e.g., by author, project, etc)
- Spelling correction using trigram indexing
- Advanced scoring with recency boosting and title boosting
- Ability to your own custom scoring functions
Documentation: https://docs.frappe.io/framework/sqlite-search
Gameplan search is powered by this.

Faster Receivable / Payable
Accounts Receivable / Payable can now work as an SQL stored procedure for faster processing. This is available as a configurable option in Accounts Settings.
Preview in Stock Entry
Stock Entry can now show previews for Accounting and Stock Ledger. Contributed by: Prateek KaramChandani
Australian COA and Tax Templates
ERPNext now has Chart of Accounts and Tax Templates for Australia. Contributed by: Jeba Jebas
Enhanced Cash Flow Report
A new toggle option now adds opening and closing balance rows in the Cash Flow report. Contributed by: Logesh Periyasamy
Bug Fixes
- Fixed a bug in Process Deferred Accounting (PDA), where cancelling a PDA marked all GL entries of invoices processed by PDA as cancelled. Contributed by: Lakshit Jain
- The trial balance and general ledger had a mismatch if foreign currency expense accounts were used. This has been fixed. Contributed by: Venkatesh
- If a payment entry created through a payment request is unreconciled from an invoice, the outstanding amount field in the request will be updated. Contributed by: Lakshit Jain

Prevent self-approval for Expense Claims
All users with an expense approver role could approve expense claims, including their own, which is sometimes not ideal. Approving your applications was fixed for leave applications, now it’s done for expense claims too. Just check Prevent Self-Approval for expense claims in HR settings, and you’re good to go.
Better Half Day Status in the monthly attendance sheet
You probably know from last month’s blog that half days show separate statuses for both halves; now the monthly attendance report shows them as such, too.
Minor improvements and bug fixes
You can now see the existing shift assignments while manually adjusting Create Shifts After #3347
Leave approver is only set if the field is empty, which would lead to showing different leave approvers in PWA and desk #3313
Attendance Calendar events are updated in real-time, so you don't need to restart the app to see the updated attendance status #3395
And some other minor things fixed with compensatory requests and salary slips in PWA

Exclude Salary Component Amount From Payroll Accounting Entries
A new checkbox, Do Not Include In Accounting Entries, has been added to the Salary Component. This enables users to exclude specific salary component amounts(such as ESIC) from being posted in the accrual and bank Journal Entry during payroll processing. #3315
Refactor Half Day Payment Calculation in Payroll Process
Previously, the Half Day was considered for Payment days in the salary slip when the option Consider Unmarked Attendance As was set to Absent in the Payroll Settings. Now the Half Day payment is not dependent on this, and if the Employee’s Half Day attendance is added, then it should be directly considered in the salary slip #3330
Other Fixes
- Allow users to set custom naming series for Salary Slip #3338
- Fixed the allocated amount of advances in the expense claim to adjust to the sum of the expense amounts #3317
- Show Company Currency in all amount rows in Employee Advance Summary report & make company filter mandatory #3417
- Show rejected expense claim Claimed Amount in the rejected section of the Expense Claim Summary(PWA)
- In the Expense claim summary, the total claimed amount is now shown in the Rejected section if the claim is rejected (Previously, 0 was shown as the total sanction amount was shown there)
- In case if the sanction amount is less than the claimed amount, then the remaining balance is also added to the rejected section
The title Total Expense Amount is changed to Total Claimed Amount, and in that the total of all the claimed amount is shown


Milestone Reached
Frappe HR was trending on GitHub by the end of this month, and we crossed 5k stars. Thank you for all the love 🥳
Course Progress Summary
As an instructor, knowing how much progress students have made in the course helps you understand how close they are to completing it, and also lets you know if your students are struggling.
The desk had a report that showed these numbers. Now you can access this information from the frontend too. You can see the Course Progress Summary report from the Course Details page. Here you will see progress made by individual students who are enrolled in this course, and also the average progress.
Video Watch Time
Most of the content these days is in the form of videos, and making videos is not easy. Knowing how much time your students are spending on the video, and knowing if they are watching the full video, or leaving halfway, or maybe even before, gives feedback to creators on their content.
Learning will now show you how much time your students are spending on the videos of the lessons. Each lesson with videos will have a statistics button on top, which will open up the report for you. This report will tell you the average watch time. You can also check the watch time of each student. This works for videos you uploaded directly to the lesson or embedded from YouTube or Vimeo.
Negative Marking in Quizzes
Most competitive exams have negative marking. Instructors can now enable Negative Marking on quizzes in their learning system. They can also configure how many marks they want to deduct for each wrong answer.
Course Card Gradient
Selecting the right image for a course can be hard. Additionally, ensuring that the image you select works well with both light and dark modes is even more challenging.
To solve this problem, we are introducing card gradients. You can now choose a color to represent the course instead of an image. This color would go well with both light and dark modes.
Manage badges from the Frontend
Badges help acknowledge the milestones of students. It helps keep them motivated in the long run. Previously, there was no way to manage badges from the frontend. Instructors had to visit the desk to manage them.
Now you can create, edit, and assign badges right from the learning system. Just go to settings and check the badge list. Here you can create a new badge, edit an existing badge, or check who the badge has been assigned to.
Reorder Chapters
You can now reorder chapters in the course outline. Just drag and drop the chapters in the list, and their position gets updated. Contributed by Joedeep Singh
Milestone Achieved
Learning crossed 2k stars on Github this month 🚀

Email feedback
We’ve been actively enhancing the Helpdesk to make it more email-friendly. Last month, we introduced email threading to streamline conversations and improve context.
Now, we’re taking it a step further by adding email-based feedback for tickets created via email. With this new feature, your team can effortlessly collect feedback on support performance through a simple web form, making it easier to track customer satisfaction and improve service quality.
You can read more about it from here
Field Dependency
We’re working on making the ticket creation experience more flexible and intuitive. Soon, you’ll be able to customize the ticket form directly from the UI.
Choose which fields to show or hide, set fields as mandatory, and even filter field options based on other fields. All without writing a single line of code.
This feature will be available from next month.

User Invitation Flow
We're building a smoother way to bring people to your team!
With the new invitation flow, you'll soon be able to easily invite Agents, Managers, or Admins to your system: just invite them, once they accept your invitation, they are in!
All of the utilities needed for this feature were added to the framework. So now other apps can also easily implement the same. Check the Pull Request in framework for more details.
This feature is currently being worked upon and will be available from next month.

Service Level Agreement and Business Holidays
Managing Service Level Agreement and Business Holidays is going to be a lot simpler. You’ll soon be able to handle both directly from the frontend, and no longer have to switch to Desk for this. This feature will be available in august.
Some highlights:
- Assignment Conditions in SLA will now be added through UI instead of manually writing python expression
- Adding and removing recurring holidays in Business Holidays list is now simpler and it will be done with just a few clicks
- A calendar view is added in Business Holidays to easily manage holidays and recurring holidays

Customizable Dashboard & Supporting Features
We’ve introduced a new Dashboard in Frappe CRM to provide you with a quick, visual overview of your sales performance, powered by real-time data and featuring fully customizable layouts.
Dashboard
The new dashboard includes built-in charts for core CRM metrics:
Active Deals by Stage: View how your deals are distributed across stages.
Won Deals over Time: Track deal closures across time periods.
Forecasted Revenue: See projected revenue based on deal data.
Conversion Rates: Monitor how leads are converting to deals.
and more…
Filters are available for time range and sales user, so you can easily drill down into the data that matters to you. — Only managers can see this dashboard.
Editable Layout
You can now customize the dashboard layout with:
Add / Remove Charts: Only keep what’s relevant to you.
Drag-and-Drop Rearrangement: Move charts around to create your layout.
Reusable Grid Component: The layout engine is now part of frappe-ui, allowing other apps to reuse it.
Supporting Features
To support these visualizations, we introduced a few new features in CRM:
Forecasting
We now compute forecasted revenue using:
Expected Deal Value
Probability
Expected Closure Date
This enables a more accurate and forward-looking revenue view in the dashboard.
Lost Deal Reasons
When marking a deal as lost, users can now:
Select from structured loss reasons (e.g., "Price too high", "Not interested")
Add a custom reason under "Other"
This structured data helps identify common blockers in the sales process.
Custom Deal Status Types
Every deal status can now be tagged with a type:
Open
Ongoing
Won
Lost
On Hold
These types help classify deals meaningfully and power cleaner charts and reports.

Color Variables 🎨
Color variables are important to maintain the consistency of colors throughout the site. Users can now define reusable color variables, and this gets listed as an option while setting any color for the block.
#379
In Action:
State Styles
Builder previously supported setting styles for states like hover, active, and focus via Raw Styles, but the process was manual, and it did not feel first-class.
Before | Now |
---|---|
![]() |
![]() |
One more thing improved after this is that all the state styles can have different values for different breakpoints, which was not possible with Raw Styles.
#377
In action:
Inherited style indicator
Previously, when users attempted to remove a property value that was cascaded from a different breakpoint, the value would remain visible. This led to confusion, as users expected the property to be removed, but it was inherited from elsewhere.
To avoid this confusion, we now indicate the inherited values using a placeholder instead of displaying them as an actual value. This visually differentiates inherited styles from explicitly defined ones, making it clear to users that the value is not directly set at the current breakpoint.
#377
Before | Now |
---|---|
![]() |
![]() |
Setting dynamic value (a better way)
This again is one of those features that Builder supported but didn’t feel first-class while using them. We had to set the Data Key to map Dynamic Data, and it also had a limitation that only one key could be mapped to one block.
Before: via Data Key | Now: Directly from property control |
---|---|
![]() |
![]() |
More than one mapping is possible now ⚡️
Almost any property/attribute can be made dynamic now!
In Action:
To make binding easier, the key selector popup does the following:
It lists only keys of an object with primitive values (and not lists and objects).
Flattens the nested object, e.g.,
userInfo = {name: 'suraj', designation: 'Developer'}
will be listed asuserInfo.name
anduserInfo.designation
De-structures object keys that are passed down via the Repeater's Collection.
Note: Collections are lists of records (e.g., user information lists).
A Repeater is a component that iterates through a collection, passing individual records to its contained block, creating multiple instances with different data. #378

App-Specific Builds
Previously, the Studio editor and every app created from Studio used to share the same build. The editor has all frappe-ui components globally registered for use, since users can drop any component on the canvas. So, even if your app used 4-5 components, all components were registered in the build. Studio now creates app-specific, performant builds.
Now there are 2 actions on the toolbar - Preview & Publish
Preview
The build step is skipped for faster previews
Renders on
/dev
like/dev/app_route/page_route
Renders components from your
draft_blocks
(unpublished). So that you can preview stuff without publishing it on a publicly available link.
Publish
Uses the app-specific optimized renderer. Only components used in your app are registered in the build.
Renders on
/app_route/page_route
Renders components from your
blocks
(published) and makes your app publicly accessible.
Check out the Pull Request if you are interested in what happens behind the scenes.
Export Apps
To all the users who were confused about why Studio Apps still sit in the DB, we are slowly moving towards complete integration with the framework. Just like DocType JSON is exported to the Frappe app; you can now export Studio frontends to existing Frappe apps in developer mode. Studio then syncs apps from all frappe app folders to the site on migration.
App is exported to frappe_app_name/studio
. This is the folder structure:
Eg: point_of_sale
-> erpnext/studio/point_of_sale
Here is the very first app exported from Studio for reference. Check the Pull Request for more details.

A new Writer was published this month! We fixed a lot of bugs in it, particularly in the floating comments. A couple of quality of life enhancements too - implicit rename, exporting media, and toggling comments.
Drive received its enhancements too - in particular, smart sort. In some cases, natural sorting isn’t what you want - for example, “File 10” comes before “File 2”, while as humans we’d expect the opposite. Another use case is files with month/day names in them.
Now, you can toggle an option to have smart sorting in your views.
A long-time ask within the company: that Drive’s internal folder structure should “mimic” what you see in the UI. Right now, files are stored flatly, which is fine if you’re only accessing the files through Drive. But customers often use the file system for other purposes.
Now, new sites by default will store files as you see them in the UI. If you want to store flatly, you can go over to Drive Disk Settings and check the option. This is still in beta, so use with care.
Finally, we closed almost 30 issues, making your overall experience more pleasant. As always, give feedback or ask for features in our Telegram channel!

And that's it 👋
We are only a month away from Frappeverse 2025. If you haven't already, register now.
Also, Frappe School is conducting a Frappe Framework Bootcamp right before the conference. This will be in person, at our office in Mumbai. Do register quickly if you are interested, we have limited seats.
September is going to be all about the community. See you next month (literally)!