Frappe Custom App Development: When ERPNext Needs Customisation

Frappe Custom App Development: When to Build vs Configure
ERPNext is highly configurable without writing code. Custom fields, custom forms, Print Formats, workflows, scripts (Server Scripts and Client Scripts), and report customisation all happen through the UI. For most mid-market implementations, this is sufficient.
But there are scenarios where configuration hits its limits and a Frappe custom app is the correct solution.
When Configuration Is Enough
Configuration (no custom app required) is appropriate for: Adding custom fields to existing doctypes. Changing field labels, making fields mandatory, or hiding fields. Custom print formats for invoices, delivery notes, or reports. Workflow automation with approval steps. Server Scripts for validation logic, auto-populating fields, or triggering actions on document events. Client Scripts for field-level UI behaviour (show/hide, auto-calculate). Custom Reports using Query Report or Script Report.
When a Custom App Is Required
A Frappe custom app is necessary when you need: New doctypes that represent business entities not in ERPNext core (e.g., a Property Management module with Tenancy Agreement, Rental Invoice Schedule, Maintenance Request doctypes). Complex business logic that Server Scripts cannot handle (loops, external API integrations, background jobs). Custom REST API endpoints that expose ERPNext data to external systems in a specific format. Background workers for async processing (e.g., a nightly reconciliation job). Integration modules with specific external systems (custom accounting system, legacy database, proprietary hardware API). Overriding core ERPNext behaviour in ways that configuration doesn't support.
Frappe Custom App Architecture
A Frappe custom app is a Python package that follows the Frappe framework conventions. It is installed alongside ERPNext on the same Frappe Bench. The app directory structure: app_name/ (Python package), app_name/doctype/ (doctype definitions), app_name/api.py (custom API endpoints), app_name/hooks.py (event hooks into Frappe lifecycle).
Doctypes in a custom app are defined as JSON files (the doctype schema) plus a Python controller class. The Frappe framework auto-generates the database table, the REST API, the form UI, and the list view from the doctype definition.
Upgrade Safety: The Key Advantage of Custom Apps
The critical advantage of building customisation as a proper Frappe app (rather than directly modifying ERPNext core files) is upgrade safety. When ERPNext releases a new version, your custom app is not affected. You upgrade ERPNext and your custom app continues to work (with testing).
Directly modifying ERPNext core files breaks on every upgrade — a pattern we frequently see when taking over implementations from less experienced partners. The remediation cost is typically 2-5x the original development cost.
Custom App Development Costs
Techseria custom app development is scoped per requirement. Indicative ranges: Simple integration app (connect ERPNext to one external API, sync data in one direction): £4,000–£8,000. Medium complexity module (3-5 new doctypes, workflow, custom reports): £8,000–£18,000. Full custom module (10+ doctypes, complex business logic, bidirectional integration, custom portal): £18,000–£45,000.
All Techseria custom apps are delivered with: git repository, test coverage for core business logic, documentation of the doctype schema and API endpoints, and 90 days of warranty support.
Need a Frappe custom app? Book a Strategy Session with Techseria — we'll scope the requirement and give you a fixed-fee quote within 5 working days.