Odoo Studio and Customization

Odoo Studio: When to Configure, When to Customize and When to Write Code

Star Bit Solutions10 min read

Odoo Studio lets an administrator add fields, reshape forms, build reports and automate steps without code. Used well, it shortens projects; used for everything, it becomes a maintenance problem. Here is how to decide.

Three stacked layers labeled configure, Studio and code, with a form builder, an automation flow and code brackets
Scroll

Key takeaways

  • Configure first, use Studio second and write code last, because each layer adds ownership and upgrade work.
  • Studio covers fields, views, small apps, PDF reports, automation rules, webhooks and approval rules without code.
  • Complex logic, two-way integrations and heavy processing belong in a tested custom module on Odoo.sh or on-premise.
  • Odoo's upgrade service covers Studio customizations while Studio stays installed, but test edited reports and code actions.
  • Govern Studio like code: few editors, clear names, a change log and testing on a copy before production.

Every Odoo project collects change requests. Purchasing wants each vendor's trade license number on file, finance wants a different invoice layout and managers want to approve large orders. Odoo Studio can deliver many of these without a developer. The harder question is where each change should live.

Our rule on every Enterprise project is simple: configuration first, Studio second, code last. This article explains why that order matters on Odoo 18, what Studio does well, where it reaches its limits and how to govern Studio changes so the next upgrade stays predictable.

Three Ways to Change Odoo, and Why the Order Matters

Every change you make lands in one of three layers. Each layer is more flexible than the one before, and each adds more ownership: someone has to document it, test it and carry it through the next upgrade.

LayerWhat it coversWho maintains itAt upgrade time
ConfigurationSettings and options that Odoo's apps already provideYour administratorCarried forward with the standard apps
StudioFields, views, small apps, PDF reports, automation rules, webhooks and approval rules, built without codeYour administrator or partnerCovered by Odoo's upgrade service while Studio stays installed and the subscription is active
Custom codeModules written in Python, XML and JavaScript, kept in version controlA developerPorted by whoever maintains the module

The order is about cost over time, not about which layer is better. A setting costs almost nothing to carry forward. A Studio change costs some testing at each upgrade. A custom module needs a developer every time Odoo changes underneath it.

Start with Configuration

Before you open Studio, ask how standard Odoo expects the process to work. Many requests turn out to be settings nobody has switched on yet, and a setting is always the cheapest change to own.

Purchase approval is a good example. The Purchase app already has an order approval setting that asks a manager to approve orders above a minimum amount. You could build the same rule in Studio, but you would be duplicating a feature that Odoo already maintains for you.

Other requests that are often configuration rather than customization include document layouts for quotations and invoices, email templates, access groups, payment terms, warehouse routes and lock dates in Accounting. When a standard option covers most of a requirement, adjusting the process slightly is usually wiser than customizing Odoo around it.

What Odoo Studio Does Well

Odoo Studio is Odoo's no-code toolbox, and it is an Enterprise app. On Odoo's pricing page, Studio is part of the Custom plan, and installing it on a Standard plan database switches the subscription to Custom. Within those terms, it covers a lot of ground, as the Odoo 18 Studio documentation shows.

Fields, Forms and Views

Add fields to any form, from simple text and dates to relational fields and related fields that show information from a linked record. Make fields required, read-only or invisible, always or only under conditions, and limit their visibility to particular user groups. Rearrange forms, add tabs and adjust list, kanban, calendar, pivot and graph views. Fields created in Studio get a technical name that starts with x_studio_, which makes them easy to recognize in exports, reports and later reviews.

Small Apps and New Models

Studio can build a new model, or a small app, from scratch, with ready-made features such as contact details, pipeline stages, tags, notes and chatter. A register of company vehicles, an equipment checklist or a visitor log are typical examples.

PDF Reports

Studio edits existing PDF reports, such as quotations and invoices, and creates new ones. Odoo strongly recommends duplicating the standard report and editing the copy, which keeps the original intact and gives you a clean fallback.

Automation Rules and Webhooks

Automation rules run actions when something happens: a field value changes, an email arrives or is sent, a date approaches, a record is saved or deleted, or an external system calls a webhook. Actions include updating a record, scheduling an activity, sending an email, SMS or WhatsApp message, adding followers, creating a record, sending a webhook notification and executing Python code.

Approval Rules

Approval rules put an approval step in front of a button, such as confirming an order or posting an entry. You name the approvers or an approver group, add conditions, chain several steps and, with exclusive approval, stop one person from approving two steps of the same record. Approvals are tracked in the record's chatter.

Export and Import

All Studio changes live in one customization module, which you can export as a ZIP file. It can be imported into another database on the same Odoo version with the same apps and modules installed, and a dated export is also a useful snapshot of what has changed.

Have a question about this guide? Ask the engineers who wrote it.

Where Studio Reaches Its Limits

Studio is excellent at shaping the screens and rules around standard processes. It becomes the wrong tool when a change stops being configuration and starts being software.

  • Complex logic. Multi-step calculations, loops over many records or rules that span several models end up as Python inside Execute Code actions. That is real code, but it lives in the database without version control, code review or automated tests.
  • Integrations. A one-way webhook notification is fine. Two-way synchronization with a bank, a marketplace or a logistics platform needs error handling, retries and logging, which belong in a module.
  • Performance. A rule triggered on save runs every time a matching record is saved. Odoo warns that an on-save rule with no trigger field selected may run several times per record, so choose trigger fields and add conditions that limit each rule to the records it concerns.
  • Upgrade risk. Changes made through Studio's editors are stored in its customization module. Editing XML directly is riskier: Odoo notes that direct edits to standard views can be reset by updates, and that hand-edited report XML may cause report issues during upgrades.
  • Single points of knowledge. If only one administrator knows why a rule exists, the system becomes fragile the day that person moves on.

Studio or a Custom Module: A Decision Table

This is how we place typical requests. Hosting matters too: on Odoo Online, custom modules cannot be installed, so Studio is the ceiling, while Odoo.sh and on-premise servers accept both.

RequirementBest layerWhy
Purchase orders above an amount need a manager's approvalConfigurationPurchase already has an order approval setting
A trade license number and expiry date on vendor recordsStudioTwo fields on an existing form
A bilingual quotation with your own terms blockStudioDuplicate the standard report and edit the copy
Remind purchasing before a vendor's trade license expiresStudioAn automation rule with a date-based trigger
A second sign-off before large credit notes are postedStudioAn approval rule on the button, with a condition
Prices calculated from a rate table, the customer's contract and stock on handCustom moduleComplex logic that needs automated tests
Two-way sync with a marketplace or logistics platformCustom moduleError handling, retries and logging
Changes to how taxes or stock valuation are computedCustom module, or rethink the requestCore accounting logic deserves strong reasons and thorough testing

A Worked Example: Trade License Reminders in Odoo Studio

Many UAE businesses need to know when a vendor's trade license is about to expire. Here is how we would build that reminder with Studio, step by step.

  1. Check the standard options. Confirm that no installed app already tracks vendor documents and expiry dates in the way you need.
  2. Work on a copy. Duplicate the database for testing, or use a staging branch on Odoo.sh, so production users are not affected.
  3. Add the fields. Open a vendor in Contacts, toggle Studio and add a text field for the license number and a date field for the expiry date. Give both clear labels and make them visible only on company contacts.
  4. Create the automation rule. In Studio, open Automations and add a rule with a timing condition based on the expiry date field and a negative delay, for example 30 days before the date.
  5. Choose the action. Add a Create Activity action assigned to the purchasing manager, with a title such as "Trade license expires soon".
  6. Name and document it. Name the rule after its trigger and action, and add it to your change log with the requester and the date.
  7. Test, then repeat in production. Give a few test vendors expiry dates on either side of the 30-day window, let the scheduler run or start its scheduled action manually in developer mode, and check that each activity appears once, for the right vendor. Then make the same changes in production.

Timing rules run on a schedule. Odoo's documentation notes that the scheduler checks trigger dates every four hours by default, so plan reminders in days rather than minutes. The first run also picks up every matching vendor whose reminder date has already passed, so tidy old expiry dates before you switch the rule on in production.

If the requirement later grows into blocking purchase orders for vendors whose license has expired, with exceptions by vendor category and an audit report, that is the moment to move the logic into a small custom module with tests.

Governance: Treat Studio Changes like Code

Studio makes change easy, which is exactly why it needs a few house rules. These are the ones we put in place on every project:

  • Limit who can use Studio. Give access to administrators who understand the data model, not to every power user.
  • Name things clearly. Use labels people recognize, check technical names before saving and name each automation rule after its trigger and action.
  • Keep a change log. Record what changed, why, who asked for it, when and which process it supports.
  • Test on a copy first. Use a duplicate database on Odoo Online, a staging branch on Odoo.sh or a neutralized copy on your own server.
  • Prefer Studio's editors to raw XML. Duplicate standard reports before editing them and avoid editing standard views directly.
  • Export the customizations. Keep dated exports of the Studio module alongside the change log.
  • Review twice a year. Remove fields nobody fills in and rules nobody needs, because every unused change is still something to test.

What Happens to Studio Changes at Upgrade Time

Odoo's upgrade service covers all standard apps and all customizations made with Studio, as long as Studio is still installed and the subscription is still active. Custom modules fall outside that scope unless they have a maintenance of customizations subscription, so their maintainer ports them.

Covered does not mean untested. When Odoo changes a standard form or report between versions, a Studio change built on it can behave differently. Python inside Execute Code actions may also need updating if it relies on behavior that has changed.

The routine is short: request an upgraded test database, walk through every item in your change log on it, fix what needs fixing and only then schedule the production upgrade. On Odoo Online, upgrades also arrive on Odoo's schedule, so a current change log pays for itself quickly.

How Star Bit Solutions Can Help

On every Odoo Enterprise implementation, we follow the same order: configure the standard apps first, use Studio for what configuration cannot do and write a proper module only when the logic, the integration or the testing needs justify it. Every customization we deliver is documented, Studio or code, so you know what to test at the next upgrade.

If you are still choosing an edition, start with our guide to Odoo Enterprise vs Community, because Studio is an Enterprise app. For Studio configuration, upgrade-safe custom modules and integrations, see our OdooStar services.

Send us your list of change requests through the contact page or call +971 55 973 4524, and an engineer will suggest the right layer for each one.

Star Bit Solutions logo
Written by the Star Bit Solutions team

Star Bit Solutions is a software company in Ajman, UAE, founded in 2014. We implement and customize Odoo Enterprise and Odoo Community, and build StarBiz (AI-driven ERP), StarHub (life super app), StarBot (conversational AI), StarLearn (adaptive learning) and StarSense (AI and IoT platform). About us

OdooStar by Star Bit Solutions

Customize Odoo without Making the Next Upgrade Harder.

Share your list of change requests. We will tell you which ones are configuration, which suit Studio and which need a proper module.

Not Sure Which Solution Fits?

Tell us about your business and we will recommend the right starting point, free of charge.