This month at Frappe turned out to be very different for our engineering team. It started with a trigger in the last few days of January. We as a team were loosing our grip on quality. A team discussion was called which was quite intense.
One thing was clear, that we were not happy with the state of affairs. We had long running quality issues that were not getting enough attention. Some of those issues were hard, some were boring, some were at intersection of multiple teams and some lacked clear ownership.
Something had to be done. And so we decided on a bold move. We unanimously agreed to suspend all feature development and experimental projects for one month to focus on biggest quality problems affecting our current userbase.
This idea came from the Japanese manufacturing philosophy called Andon where they shut down entire production line if they find a defect in the product. Frappe aspires to be a company that builds excellent products and so we decided to bite the bullet and do the same. We named this sprint Lets Raise the Bar and the month of February was dedicated to it.
Our senior engineers took up the task of leading a quality area and spend one month focusing on improving that area. People working on experimental projects joined one of these teams. The areas we focused on were:
- Bugs reported on GitHub in Framework, ERPNext, Frappe Cloud, HR, CRM, Helpdesk, Learning and Insights
- Polishing version 16's new UI.
- Security issues and defensive changes to prevent security issues.
- Documentation hygiene - typos, links, structural issues.
- Sign-up and onboarding for all products.
- Cleaning up the Marketplace listing.
Now that the month has come to an end, here are some note worthy updates from this sprint.
Table of Contents
A dedicated 10-member team was formed to focus entirely on resolving bugs. At the start of the sprint, there were 996 open issues labeled as bugs. From day one, we were clear about one thing: we did not want to close issues just to reduce the numbers. The goal was to fully resolve them and improve overall quality in terms of user experience and stability.
We prioritized long-standing, highly upvoted issues that had been delayed due to a lack of focus, bandwidth, or the need for deeper expertise. Since several engineers were pulled from experimental projects, we kicked off with a context-sharing session to align on expertise and ownership before diving into focused bug-squashing mode.
We informally followed a simple principle:
"Leave the place better than you found it."
Impact
- ~220 bugs resolved with fixes merged
- 250+ outdated or duplicate issues closed
- 47 new issues were identified by the team, out of which 34 are already resolved.
The sprint touched nearly every part of the framework: navigation, grid behavior, email handling, form validations, file uploads, permissions, reports, PDF generation, and core backend operations. Many issues affecting users for years were finally resolved. You can find the details of all resolved issues here.
There are still ongoing fixes which we'll continue to resolve in the coming days. Thanks to everyone who reported, reacted, and patiently waited.
Latest version of Gantt
Gantt v1 was released a year ago, with a slew of new features. The community has long been asking for it to be integrated with Frappe Framework and ERPNext. Well, it’s finally here!
Enjoy the redone UI, including many cool features like dark mode:

We also made it easier than ever to use the Gantt and Calendar views. Just go to your Doctype and turn on the Is Calendar and Gantt checkbox.
.png)
Workspace and Icons
Accounting workspace had been split up into Invoicing, Payments, and Accounts Setup, with each getting bespoke icons and a sidebar.

.png)
.png)
.png)
Form Clean-up
The form layout of Invoices, Orders, and Delivery Note have received a round of cleanup. Journal Entry UI has received a major overhaul with a much simpler and cleaner form with all important fields visible without scrolling.
.png)
Miscellaneous
- Change log has been enabled for Accounts Settings.
- Fixed a bug in Bank Reconciliation where reconciling a reverse transaction against the parent threw an error
- Gross Profit report now considers return invoices outside of the filtered date range
- Fixed a bug in Process Payment Reconciliation, where it generated an incorrect exchange gain or loss
- Credit Notes will update the linked Project's gross profit calculation
- The system can now merge taxes when multiple purchase invoices are pulled into a single purchase receipt
- Profitability Analysis and Sales Person Commission reports had been refactored to use Query Builder instead of raw SQL
Module Onboarding
Introduced a module onboarding feature in version 16 to improve the new user onboarding experience.

Negative Batch Report
The Negative Batch Report is designed to identify and analyze transactions where batch stock has gone into negative quantity. This report helps users detect inconsistencies caused by backdated entries, incorrect stock movements, or improper batch usage, enabling timely corrections and accurate stock valuation.

Form Clean-up
Cleaned up the Sales and Purchase DocTypes forms in Version 16 and introduced separate sections for multi-currency fields.

Bug Fixes and Improvements
See shift attendance records not linked to employee check-ins in the Shift Attendance report
Fixed the error while using the Bulk Salary Structure Assignment Tool in translated languages
See the date for which the holiday list assignment is missing, for better UX
.png)
See the return amount column in the Employee Advance Summary Report. Contributed by Parthasarathi B
.png)
Hetzner and DigitalOcean as new cloud providers
For the longest time, Frappe Cloud has offered Amazon Web Services (AWS) and Oracle Cloud Infrastructure (OCI) as cloud providers. Over time, the demand for more economic options grew. This was primarily from Developers who wanted to have a reasonably reliable setup for their dev, test, and demo environments, partners who wanted to provide low-cost servers to customers (often to move self-hosted customers to Frappe Cloud), and self-serve users who wanted a lower entry point (many of whom even churned due to the lack of one).
In early January 2026, Aradhya, Aysha, and Tanmoy did the needful to get Hetzner and DigitalOcean onto Frappe Cloud. Post some reliability checks, these options were released as a beta to Frappe’s 200+ certified partners. After gaining enough adoption, fixing reported issues, and gaining confidence in stability, the two new providers have been made available to the public. Here is a short video that explains why this move is a game-changer and how it helps the Frappe ecosystem make the most out of Frappe Cloud.
If you watched the video, you would have noticed another major change mentioned in it…
Unified Server option in Deployment Modes
Since the beginning of Frappe Cloud, the default configuration for Application and Database was to run on separate servers. The intent was to optimise for performance by providing maximum isolation between the two. However, this meant even the simplest of workloads had to pay the premium for isolation in spite of not requiring it.
Along with the new providers, we also opened up the option of deploying the application and Database on a single server. This reduced the cost for simple workloads to half! Enterprises with mission-critical applications still have the option of going for Separate Servers. For everyone else, the Unified Server option suffices.

Both changes put together, the entry point for Servers (i.e., getting a full virtual machine) on Frappe Cloud has gone down from $250/mo to $20/mo. This is expected to unlock huge cost savings for existing customers and open up Frappe apps for a large set of cost-sensitive SMBs across the world.
Improved App Versioning with Automatic Compatibility Checks
We’ve introduced a new versioning requirement to improve compatibility and reliability for custom apps on Frappe Cloud.
All apps must now include a pyproject.toml file declaring their supported Frappe versions using the [tool.bench.frappe-dependencies] section. This allows Frappe Cloud to automatically validate compatibility during app installation, updates, and bench operations.
With this change, incompatible app versions will be detected early, preventing deployment issues and unexpected failures. This ensures smoother deployments and safer upgrades.
We recommend keeping version ranges up to date and aligned with supported Frappe releases. Please refer to the documentation for common problems and best practices.
Improved Reliability with Yanked App Releases
We’ve introduced support for yanked app releases to help prevent accidental installs or updates to problematic versions.
When an app release is marked as yanked, it is automatically withdrawn and skipped during bench updates. This ensures that benches only deploy valid, stable versions and avoids updating to releases that may contain critical issues or regressions.
If a release is yanked, Frappe Cloud will notify you during updates and require you to select a supported version instead.
Please refer to the documentation for more information.
Renaming “Bench Groups“ to “Benches” in Frappe Cloud Dashboard
We’ve taken a small step toward improving the Frappe Cloud experience for our end users. We’ve renamed “Bench Groups” in the Frappe Cloud Dashboard to “Benches,” including all other minor references to “bench group“ throughout the UI, since they’re essentially the same concept.
Major Version Upgrade
Upgrading your site to the next major Frappe version is now much simpler.
Previously, users had to manually create a new bench with the same set of apps, wait for deployment to complete, and then move the site to the new bench.
Now, from the Version Upgrade dialog, you can simply configure the compatible branches for your custom apps, if any, and the rest of the process is handled automatically.
You can checkout the documentation for more details.

Optional Backup Before Site Archival or App Uninstall
We have always retained the latest available backup when a user chooses to drop their site.
Now, users can optionally take an off-site backup right before archiving their site or uninstalling an app from their site.
Backups of all archived sites will be available for restoration for up to 6 months.

Vimeo Videos with Private Hash
Learning allows embedding videos from Vimeo. But there was a limitation. Only public Vimeo videos could be embedded. Many of you had requested allowing Vimeo videos with a privacy hash. And we heard you. You can now embed Vimeo videos that have a privacy hash.
Track a student’s progress in the course dashboard
Last month, we introduced the new course dashboard. This month, we decided to enhance it even further. With the latest updates, you can now track the detailed progress of each student enrolled in the course.
From the student list, when you click on the student, a modal will open up with all the progress of this student. You can check which lessons they have completed. If there are quizzes, assignments, or programming exercises in the lesson, then you can also see their progress in those activities.

Improved Batch Dashboard
Last month, the course dashboard got a new look. This month, we decided to revamp the batch dashboard.

In the previous dashboard, information was scattered along multiple tabs. The charts, student list, their progress, and batch feedback were all in different tabs. With these enhancements, we have tried to bring critical information to one single screen, ensuring efficiency in viewing important information.
.png)
Sprint
For the sprint we tried focusing on areas that had not received our attention in recent times.
- GitHub Bugs: The count of issues labelled as bugs in GitHub was around 40. We brought this number down to 9.
- Documentation: It had been a while since our docs were updated. By the end of the sprint we were able to update our docs with all the latest additions to the app.
- UI Teardown: We sat with a few members of the team and did a detailed UI teardown of the app to get fresh perspective on each screen. We have identified a good number of areas that can be improved. In the coming months you will start seeing these improvements in the app.
- Code Coverage: We also decided to increase the code coverage. At the beginning of the month it was 32% and by the end of the month it has gone up to 40%.
Throughout the sprint, we focused on hardening security, improving permissions, and stabilizing the warehouse infrastructure in Frappe Insights. In total, we fixed 25 bugs during the sprint.
Bug Fixes
We reviewed and addressed issues across different parts of the product. Prioritizing fixes that improved stability and day-to-day usability.
- 25 issues resolved
- Several long-standing problems around native queries and filter behavior were cleaned up
- Overall product stability improved
These fixes address many of the rough edges users were running into regularly
CI and Code Quality
We also invested in improving developer workflows and automated quality checks.
- Added linters to the CI pipeline
- Introduced type hints to whitelisted methods
- This helps maintain consistency and catch problems before they reach users
Features and Improvements
Alongside stability work, we shipped a few improvements and have more in active development
- Added ability to refresh stored tables on a per-query basis
- Users can now show/hide individual series in axis charts
- Added favorites functionality to dashboards
- Added deprecation warning for Insights v2
Along with these, three features are actively in development: default filter values in dashboards, warehouse tables for native queries, and query coalescing with a concurrency limit.
During this sprint, we decided to focus heavily on improving overall quality and enhancing the Agent experience within Helpdesk.
We divided the sprint into two major areas:
UI Inconsistencies: We conducted a detailed UI teardown to identify inconsistencies across the product and evaluate how a new user perceives the system. The goal was to make Helpdesk feel more polished.
Day-to-Day Bugs: We performed an end-to-end product walkthrough to identify real-world usage issues.
Additionally:
- Collected bugs from GitHub
- Curated and prioritized the most impactful ones
- Focused on issues that agents face daily
We started with 149 open GitHub issues. We are now at 109 issues.
Major Improvements
Although we fixed a lot of issues, here is the list of the most impactful ones
Timezone Support in Helpdesk
One of the biggest improvements was adding timezone support. Previously only the System Timezone was supported in the Portal View. Now, Helpdesk respects the User’s Timezone as well. Time-based fields (like resolution deadlines) now reflect the user’s local time.
Email & Comment Editing Improvements
We significantly improved the editing experience:
- Pasting data from Excel no longer converts content into an image inside the editor.
- Editing a comment is now smooth and reliable.
- The overall editor behaviour is more predictable and user-friendly.
Unseen Tickets Visibility
During our product walkthrough, we realized that agents had no clear way to distinguish between tickets they had already viewed and those still pending. To address this, unseen tickets are now displayed in bold in the Ticket List View.
First Ticket Badge
Now whenever a user creates a ticket in the System for the First time, agents will see the First Ticket badge inside the ticket view to indicate the Agent.
Custom Badges
In a lot of companies, there are always a few types of tickets that need extra attention — maybe VIP customers, escalations, or certain high-priority requests. Usually, teams rely on some visual indicator in the UI to quickly spot these.
We realized Helpdesk didn’t really have a flexible way to support this kind of customization, which is based on each organization’s own needs.
So we improved the Helpdesk Form Script and made it more powerful.
With Custom Badges, you can now define your own logic and show badges on tickets however you want. This means teams can highlight what matters to them, without waiting for product-level changes.
If you’re interested in setting this up, you can read more about it from here.
Throughout the sprint, we focused on strengthening the overall quality and reliability of Frappe CRM.
At the start of this effort, we identified and curated a list of 43 issues to focus on during the sprint, many of which were discovered and added by us during deep code reviews and testing. Instead of optimizing for quick closures, the goal was to clearly resolve issues properly, improve test coverage, and put stronger quality guardrails in place for the long term.
Bug Fixes
We reviewed and addressed issues across different parts of the product, prioritizing fixes that improved stability and day-to-day usability.
- 28 issues resolved
- Several long-standing problems were cleaned up
- Overall product stability improved
While there is still work ahead, this pass helped remove a significant amount of friction for users.
Test Coverage (from 0 → 53.43%)
One of the biggest gaps in the project was automated testing.
- Started with 0 tests and 0% coverage
- Added ~166 test cases
- Coverage improved to 53.43%
This lays the groundwork for safer refactors and more confident releases going forward.
Stronger CI and Quality Guardrails
We also invested in improving developer workflows and automated quality checks. Enhancements included:
- Pre-commit enforcement
- ruff for Python linting
- eslint and prettier for frontend consistency
- Running Frappe Semgrep rules and fixing important findings
- Improved GitHub Actions pipeline:
- linting
- test execution
- coverage calculation
- semantic commit checks
These changes help catch issues earlier and keep the codebase healthier over time.
Documentation
We made minor fixes and improvements to the documentation. This is an ongoing effort, and we plan to continue refining docs in the coming iterations.
There is still more to improve, and we’ll continue pushing on quality, stability, and developer experience in the coming months.
And that's it 👋
That was all the updates from this month. This April we have the third edition of Frappe Build. It will be in Mumbai this time. Do register if you haven't already.



