Configure or customise? Getting ERPNext to fit your business

When ERPNext's settings are enough, when a script will do, and when it's worth building a custom Frappe app.

By the Lattiv Tech Labs teamPublished 5 min read

Every business that adopts ERPNext reaches the same moment: the standard system does 80% of what you need, and the remaining 20% is how your business actually works. Do you change your settings, write a little code, or build something new?

ERPNext is flexible enough to do all three. The art is choosing the lightest approach that does the job, because every step towards custom code adds power but also adds something to maintain and test at every upgrade. Here is how we help clients decide.

Three levels of change

We think of ERPNext changes in three levels, from lightest to heaviest:

  1. Configuration. Using ERPNext's built-in settings and tools. No code.
  2. Low-code scripting. Small scripts written inside ERPNext to adjust behaviour.
  3. Custom app development. A separate application built on the Frappe framework, with its own code, version control and tests.

Our rule of thumb: always start at level 1 and move up only when there's a clear reason.

Level 1: configuration

A surprising amount can be done without writing any code. ERPNext includes tools for the most common adjustments:

  • Settings for each module, such as stock valuation method, selling and buying rules, accounting periods and naming series.
  • Roles and permissions, to control who can see, create, submit or cancel each type of document.
  • Customize Form, to rename labels, hide fields, make fields mandatory, change their order, and add custom fields.
  • Workflows, to add approval steps, such as a purchase order that needs a manager's approval above a certain amount.
  • Print formats, to make invoices, quotations and delivery notes match your branding and legal requirements.
  • Notifications, to send emails or system alerts when documents are created, change status or reach a date.
  • Report Builder and dashboards, to create lists, summaries and charts from your data.

Configuration is the cheapest to set up and the safest at upgrade time, because you're using features the ERPNext team maintains.

Ask "can the process change?"Before customising, it's worth asking whether the standard ERPNext way of doing something is actually fine. Sometimes the best outcome is a small change to how the team works rather than a change to the software. ERPNext's defaults reflect common good practice in accounting and inventory.

Level 2: low-code scripts

When configuration can't express a rule, ERPNext lets you add small pieces of code without building a full application:

  • Client Scripts run in the browser. They're useful for form behaviour, like calculating a field as the user types, filtering a dropdown based on another field, or showing a warning.
  • Server Scripts run on the server, written in a restricted form of Python. They can run when a document is saved or submitted, expose a simple API endpoint, or run on a schedule.
  • Web Forms let customers or suppliers submit information through a page on your website, straight into ERPNext.

For example, a distributor might use a Client Script to fill in delivery charges automatically based on the customer's region, and a Server Script to stop a sales order being submitted if the customer is over their credit limit with an unpaid invoice older than 60 days.

Scripts are quick to write, but they live inside the database rather than in version control. A handful is easy to manage. Dozens become hard to track, test and move between your test and live systems.

Level 3: a custom app

When the requirement is big enough, the right answer is a custom Frappe app: a separate code package installed alongside ERPNext. This is where we use Frappe and Python for deeper changes, such as:

  • New document types (DocTypes) for things ERPNext doesn't model, like crop batches, equipment calibration records or course enrolments.
  • Business logic that hooks into standard documents, using hooks.py and doc_events to act when an invoice is submitted or a stock entry is cancelled.
  • Integrations with payment gateways, e-commerce platforms, government portals, IoT platforms and other systems.
  • Custom reports and pages that need complex queries or interactive layouts.
  • Background jobs for heavy processing that shouldn't slow down users.

A custom app lives in Git, can be reviewed and tested properly, and is installed the same way on every environment. It takes more effort to build, but for complex requirements it's much easier to maintain than many scattered scripts.

Never edit ERPNext's own codeIt can be tempting to change a core file to make something work. Don't. Those changes are overwritten at the next update, or block updates entirely. Everything custom belongs in your own app, using the hooks Frappe provides.

How to choose

If you need to…Use
Rename, hide, reorder or add a fieldCustomize Form and custom fields
Add an approval stepWorkflow
Change how a document printsPrint format
Alert someone when something happensNotification
Calculate or validate values as users typeClient Script
Enforce a business rule on save or submitServer Script, or a custom app if the logic is complex
Track something ERPNext has no document forCustom app with a new DocType
Connect ERPNext to another systemCustom app

Keeping it upgrade-safe

ERPNext releases improvements and security fixes regularly, and you want to be able to take them. These habits make that painless:

  • Export customisations as fixtures. Custom fields, property changes and even scripts can be exported into your custom app, so they're version-controlled and installed consistently everywhere.
  • Keep a test copy. Try every update on a copy of your live system before upgrading production.
  • Write down why. A short note on why each customisation exists helps decide later whether it's still needed.
  • Review once a year. New ERPNext versions often add features that make older customisations unnecessary. Removing them reduces maintenance.

Our approach

When we implement ERPNext, we begin by mapping your processes against the standard system. Each gap gets a label: change the process, configure, script, or build. We agree that list with you before any development starts, so you know exactly what is standard, what is custom and what each custom piece will cost to maintain.

Key takeaways

  • Use the lightest change that does the job: configure, then script, then build.
  • Configuration covers more than most people expect and is the safest at upgrade time.
  • Scripts are great for small rules but get hard to manage in large numbers.
  • Big requirements belong in a custom Frappe app in version control.
  • Never edit ERPNext's own code, and test every upgrade on a copy first.