Skip to content
Odoo Odoo 19 addons are here

Build, customize Odoo with AI

Describe the change in plain words. erpfly writes a proper addon for Odoo 17, 18 or 19, tests it on a sandbox, and hands you the code.

What do you want to do in Odoo?
Try:
  • Free to try on a sandbox
  • Code in your own repo
  • Tests in every pull request
Versions
17 · 18 · 19
Community and Enterprise.
You get
Odoo addon
Source code in your GitHub or GitLab repository.
Deploy with
Odoo.sh or your server
The same way you deploy anything else.
Core files edited
0
Standard models are inherited, never patched.

Two ways in

Build something new, or change what’s already there

Build

Build a new Odoo addon

For things Odoo doesn’t ship, or only ships in Enterprise: equipment rentals, inspections, a helpdesk on Community. You get models, views, menus, access rules and tests, packaged with a manifest.

  • Models with mail.thread and activities
  • Form, list and kanban views
  • ir.model.access.csv and record rules
  • QWeb reports and ir.cron jobs

Odoo module development

Customize

Customize the Odoo you run

For changes to quotations, invoices, deliveries and contacts. New fields, view changes and report tweaks go into a small addon, so an update to Odoo doesn’t wipe them out.

  • Fields added with _inherit
  • View changes with xpath
  • QWeb report inheritance
  • Automation rules and server actions

Odoo customization

Example requests

What people ask erpfly to do in Odoo

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

Fits your setup

How it fits the Odoo you already run

sale_credit_hold/models/sale_order.py
from odoo import _, fields, models
from odoo.exceptions import UserError


class ResPartner(models.Model):
    _inherit = "res.partner"

    credit_hold = fields.Boolean(tracking=True)


class SaleOrder(models.Model):
    _inherit = "sale.order"

    def action_confirm(self):
        held = self.filtered(lambda o: o.partner_id.commercial_partner_id.credit_hold)
        if held and not self.env.user.has_group("account.group_account_manager"):
            raise UserError(_("%s is on credit hold.", held[0].partner_id.display_name))
        return super().action_confirm()
From a generated addon. Standard models are inherited, never copied.

Odoo Online can’t run custom addons

The Odoo Online SaaS plan only installs Odoo’s own apps and Studio changes. A custom Python addon needs Odoo.sh or a server you host. If you’re on Online today, moving to Odoo.sh is the first step, and it’s worth pricing before anything else.

Community or Enterprise

Generated addons depend only on what they use. An addon that extends helpdesk or account_accountant will only install on Enterprise, and the manifest says so up front. A lot of what people ask for (approval steps, extra fields, reports, scheduled jobs) works on Community.

The version matters

Odoo 17 dropped attrs and states in views in favour of plain expressions like invisible="state != 'draft'". Odoo 18 renamed tree views to list. Code written for one version often won’t load on the next, so erpfly writes for the exact version you pick.

Inherit, don’t copy

Changes to standard models use _inherit and view changes use xpath, so an update to the sale or stock module doesn’t overwrite your work. The difference between _inherit and _inherits trips up a lot of teams, and we wrote a guide on it.

Odoo _inherit vs _inherits ›

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 odoo addon. Open one to see what gets generated, then describe your version.

All 21 modules ›

Guides

Read before you build

Glossary

Odoo terms, explained

Odoo questions

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

Can erpfly build addons for Odoo Online?

Not ones you can install there. Odoo Online doesn’t accept custom Python addons. The code works on Odoo.sh or a self-hosted server with the same version and edition, so moving to Odoo.sh is usually the answer.

Does it work with Community and Enterprise?

Both. Tell erpfly which edition you run and it only depends on modules you have. If a request really needs an Enterprise app, such as Helpdesk or full Accounting, it says so before writing anything.

Which Odoo versions does it support?

Odoo 17, 18 and 19. View syntax and a few model APIs changed between them, so the addon targets the version you pick. We add new major versions shortly after they’re released.

Can it change an addon we already have?

Yes. Connect the repository and erpfly reads your existing addons before it writes anything. Changes arrive as a pull request against them, so your developer sees a normal diff.

How do I deploy the addon to Odoo.sh?

Merge the pull request into a staging branch first. Odoo.sh builds it with a copy of production data, and once you’ve checked it there, merge into the production branch. The module then shows up under Apps to install or update.

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

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

Running ERPNext instead? The same chat builds and customizes ERPNext 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.

Odoo 19

Create your account

Free to start. No card needed.

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