Skip to content
ERPNext Frappe apps for v15 and v16

Build, customize ERPNext with AI

Tell erpfly what your ERPNext should do. It writes the Frappe app, installs it on a copy of your site, and opens a pull request when you’re happy with it.

What do you want to do in ERPNext?
Try:
  • Free to try on a sandbox
  • Code in your own repo
  • Tests in every pull request
Versions
v15 · v16
ERPNext and Frappe, with HRMS and other apps.
You get
Frappe app
Source code in your GitHub or GitLab repository.
Deploy with
bench or Frappe Cloud
The same way you deploy anything else.
Core files edited
0
Hooks and fixtures, never edits to erpnext.

Two ways in

Build something new, or change what’s already there

Build

Build a new Frappe app

For processes ERPNext doesn’t cover: rentals, calibration, inspections, your own customer portal. You get an app that installs with bench and has its own DocTypes, logic, reports and tests.

  • DocTypes and child tables
  • Controllers and hooks.py events
  • Script Reports and a Workspace
  • Unit tests and migration patches

ERPNext module development

Customize

Customize the ERPNext you run

For changes to Sales Order, Item, Employee and the rest. Everything is exported as fixtures inside a small app, so staging and production end up with the same fields and rules.

  • Custom Fields and Property Setters
  • Workflows and Authorization Rules
  • Print Formats written in Jinja
  • Client Scripts where the form needs them

ERPNext customization

Example requests

What people ask erpfly to do in ERPNext

Typical requests, written the way people type them. Underneath each one, what ends up in the frappe app.

Fits your setup

How it fits the ERPNext you already run

credit_hold/hooks.py
app_name = "credit_hold"
app_title = "Credit Hold"
required_apps = ["erpnext"]

doc_events = {
    "Sales Order": {
        "before_submit": "credit_hold.sales_order.check_credit_hold",
    }
}

fixtures = [
    {"dt": "Custom Field", "filters": [["module", "=", "Credit Hold"]]},
    {"dt": "Property Setter", "filters": [["module", "=", "Credit Hold"]]},
]
From a generated app. The custom field and its rule travel together as fixtures.

Self-hosted on bench

The pull request is an ordinary Frappe app. Your developer runs bench get-app with the repository URL, installs it on the site, and runs bench migrate on later updates. Nothing about how your bench is set up has to change.

On Frappe Cloud

Custom apps need a private bench group on Frappe Cloud. Connect the GitHub repository to the bench, deploy, then install the app on your site. Shared benches only offer apps from the marketplace, so this is the one setting to check before you start.

Customizations that survive upgrades

Changes made in Customize Form live only in one site’s database. erpfly exports them as fixtures inside the app, so Custom Fields, Property Setters and Workflows reach staging and production the same way, and a move from v15 to v16 doesn’t leave half of them behind.

Upgrading without losing customizations ›

Server Scripts or an app?

Server Scripts are fine for a one-line rule. They are switched off by default on self-hosted benches, can’t import libraries and don’t come with tests. As soon as a change touches more than one DocType, erpfly writes an app instead.

Server Scripts vs a custom app ›

How it works

From a paragraph to a pull request

The long version
  1. 01

    Describe it

    In your own words. Paste the spreadsheet or a photo of the paper form if that's easier.

  2. 02

    Answer a couple of questions

    It asks only what it can't work out from your setup, like who's allowed to override.

  3. 03

    Try it on a sandbox

    A copy of your site with the module installed. Break it, then ask for changes.

  4. 04

    Merge when it's right

    Code lands as a pull request with tests. Your developer, or ours, reviews it first.

Module library

Start from a module

Every one of these can be built as a frappe app. Open one to see what gets generated, then describe your version.

All 21 modules ›

Guides

Read before you build

Glossary

ERPNext terms, explained

ERPNext questions

Something missing? Email hello@erpfly.com and a person will answer.

Does erpfly work with ERPNext on Frappe Cloud?

Yes, as long as the site is on a private bench group. Custom apps can’t be installed on shared benches. You connect the repository erpfly pushes to, deploy the bench, and install the app on your site.

Can it change standard DocTypes like Sales Invoice?

Yes. It adds Custom Fields and Property Setters, hooks into document events from hooks.py, and exports all of it as fixtures. It never edits files inside the erpnext or frappe apps, so updates don’t overwrite your changes.

Which ERPNext versions does it support?

ERPNext and Frappe v15 and v16. You pick the version before you start, because the generated code targets that version exactly. If you’re on v14 or older, plan the upgrade first.

Will it work alongside HRMS, Healthcare or our own apps?

Yes. When you connect a staging site, erpfly reads the installed apps and their DocTypes, and lists the ones your new app depends on in required_apps. HRMS has been a separate app since v14, so HR changes build on it rather than on ERPNext.

What happens when I type in the chat box on this page?

It opens the erpfly builder with your description, the ERPNext version and the Build or Customize choice already filled in. Nothing is generated until you sign in and confirm.

Running Odoo instead? The same chat builds and customizes Odoo too. Last updated .

Your next module is one paragraph away

Write it the way you’d explain it to a new hire. We’ll turn it into an app you can read, test and install.

ERPNext v16

Create your account

Free to start. No card needed.

By signing up you agree to our terms and privacy policy.