Guide · Hosting
Odoo Online, Odoo.sh or on-premise in Odoo 20: what each supports and how to choose
- Author
- Eduin Garnica, CTO
- Published
- Updated
- Version
- Odoo 20
In short
Odoo Online, Odoo.sh and on-premise all run the same Odoo Enterprise; what changes is who runs the infrastructure and what code you can install. Odoo Online does not support custom modules or apps from the Odoo Apps Store, so an implementation with its own code goes to Odoo.sh or on-premise, and both require the Custom plan. Odoo.sh leaves the infrastructure to Odoo and adds a GitHub repository, staging branches and shell access; on-premise gives full control, in exchange for your company or its provider running backups, patches and upgrades.
What each option is
All three options run the same software. Odoo’s pricing page puts it in one line: “Odoo Online or Odoo Enterprise (On-premise or Odoo.sh) is the same software. Only the hosting and infrastructure are different” (odoo.com/pricing, accessed October 17, 2026). What you are choosing is who runs the server, what code can run on top of it, and how the database is tested, backed up and upgraded.
- Odoo Online
- Odoo’s cloud service, which hosts and manages each private database and delivers it ready to use from a web browser.
- Odoo.sh
- Odoo’s platform for hosting databases with your own code, connected to a GitHub repository and organized into production, staging and development branches.
- On-premise
- Odoo Enterprise installed on machines your company chooses and runs, in its own facilities or in a provider’s cloud, outside Odoo’s control; the subscription agreement calls it Self-Hosting.
- Custom module
- your own code, installed on top of Odoo to add features or change its standard behavior.
- Custom plan
- the Odoo Enterprise plan that supports all three hosting options and includes Odoo Studio, multi-company and the external API; the Standard plan is hosted on Odoo Online only.
- Gap analysis
- the comparison between what the operation needs and what Odoo ships with, which separates what gets configured from what has to be built.
What each one supports
The hardest boundary is about code, and the official documentation states it plainly:
“Odoo Online is incompatible with custom modules or modules from the Odoo Apps Store.”
The same page says what does run there: databases for long-term production, including customizations that do not require custom code. Odoo Studio falls on that side, which is why it works on all three options under the Custom plan; when Studio fits and when a module does is covered in the Studio vs custom development guide.
| Criterion | Odoo Online | Odoo.sh | On-premise |
|---|---|---|---|
| Custom modules | No | Yes, from the GitHub repository | Yes |
| Apps from the Odoo Apps Store | No | Yes | Yes |
| Odoo Studio | Yes, on the Custom plan | Yes, on the Custom plan | Yes, on the Custom plan |
| Versions it runs | Major and intermediary | Major only | Major only |
| Subscription plan | Standard or Custom | Custom | Custom |
| Hosting cost | Included in the subscription | Billed separately from the license | Whatever the infrastructure you contract costs |
Table sources: the Odoo 20.0 documentation on Odoo Online, on creating an Odoo.sh project and on support by version, and the public pricing pages of odoo.com and odoo.sh, accessed October 17, 2026.
An intermediary version, also called a SaaS version, is a release Odoo ships every two to three months between two major versions, and only on Odoo Online. It matters little while the database stays there and a great deal the day it needs to leave, as the last section shows.
If you operate in Mexico, the local tax layer does not move this boundary. According to the Odoo 20.0 documentation, the three base modules of the Mexican localization install automatically with it: Mexican accounting (l10n_mx); the electronic documents sent to the SAT, Mexico’s tax authority (l10n_mx_edi), which is where the CFDI (Mexico’s electronic invoice) is generated; and the electronic accounting reports (l10n_mx_reports). They are standard product, neither custom modules nor Apps Store modules, so invoicing in Mexico does not by itself rule out Odoo Online.
Who runs what
The Odoo Enterprise subscription agreement draws the line between Odoo’s cloud and on-premise:
“The Cloud Platform is hosted and fully managed by Odoo SA, and accessed remotely by the Customer. With the Self-Hosting option, the Customer instead hosts the Software on computer systems of their choice, that are not under the control of Odoo SA.”
Odoo.sh adds a layer to that split: Odoo runs the platform, and your company, or the partner it chooses, manages the code, the branches and who gets into each one. The project settings divide that access into three roles: Admin, with full and exclusive access to the settings; Tester, who works on staging and development but cannot reach production; and Developer, who changes the code but cannot connect to the production or staging databases.
| Task | Odoo Online | Odoo.sh | On-premise |
|---|---|---|---|
| Servers, operating system and PostgreSQL | Odoo | Odoo | Your company or its provider |
| Odoo bug fixes and security patches | Odoo, with no action from the customer | Odoo, with no action from the customer | Whoever runs the server, by reinstalling the current revision |
| Backups | Odoo, daily | Odoo, daily for production | Whoever runs the server |
| Your own code | Not applicable | Your company or its partner, on GitHub | Your company or its partner |
| Version upgrade | Mandatory, on deadlines Odoo sets | Requested from the project | Requested and run from the server |
On-premise also brings tasks the cloud handles by itself. The database is registered with the subscription code, and the server must be able to reach Odoo’s services, because the subscription check runs every week. Odoo Enterprise packages can only be downloaded while signed in as a paying on-premise customer or a partner. And Odoo 20 requires Python 3.12 or later and PostgreSQL 16 or later, the minimums set in the version’s own code, in odoo/release.py.
Testing, backups and technical access
All three options let you test on a neutralized database: a copy in which Odoo turns off what could touch the real world, such as scheduled actions, outgoing email, bank synchronization, payment providers and delivery methods. What changes is where that copy comes from and how long it lasts.
| Criterion | Odoo Online | Odoo.sh | On-premise |
|---|---|---|---|
| Test environment | Database duplicates, which expire after 15 days; up to five per database | Staging branches with a copy of production, and development branches with demo data and unit tests | Duplicates from the database manager, plus whatever environments the operator sets up |
| Backups | Daily, under Odoo’s cloud service level policy, and downloadable as a ZIP at any time | Production daily, keeping seven daily, four weekly and three monthly; staging and development are not backed up automatically | Whatever the operator configures |
| Technical access | Database manager: domain, duplicates, backups and upgrade | Web shell, SSH, online editor and psql | Full |
On Odoo.sh, staging has rules of its own. Its databases are deleted automatically after a month, the email they send is caught in a test mailbox and reaches no one, and the platform’s FAQ specifies that neutralization also removes the tokens of localization-related government e-invoicing services. Development branch databases last about three days.
Odoo.sh also has platform limits worth knowing before you choose it. According to its FAQ, operating system packages cannot be installed, not even on dedicated hosting; PostgreSQL extensions such as PostGIS are not supported; long-running processes are not supported; external read-only access to PostgreSQL, the kind business intelligence tools use, exists only on dedicated hosting; and some third-party modules are incompatible by design, such as queue_job. On-premise, those decisions belong to whoever runs the server.
Versions: how long a database can stay
Every major version gets three years of standard support, available on all three options. Odoo 20 was released in September 2026, and its standard support is planned through September 2029. What changes by hosting option is the room you have to upgrade.
| Hosting | What the Odoo 20.0 documentation says |
|---|---|
| Odoo Online | Upgrading a major version is mandatory every two years, and an intermediary one a few weeks after the next is released; if no one acts before the deadline, the upgrade starts automatically |
| Odoo.sh | After the three years of support, there are two more years to complete the upgrade, and the platform notifies you when it is required |
| On-premise | The database can stay on its version indefinitely, although Odoo does not recommend it |
Extended support, which begins when standard support ends, carries an additional fee and exists only on Odoo.sh, for a limited number of versions, and on-premise, for any version. Security updates are provided only during standard support.
With your own code, that room matters more. The upgrade documentation warns that a database with custom modules cannot be upgraded until a version of those modules exists for the target version, and that Odoo’s upgrade service does not convert modules without a maintenance contract. What that means for Studio and for a module is covered in the Studio vs custom development guide.
How to choose
| If the implementation… | Fits |
|---|---|
| runs on standard features, configuration and Studio | Odoo Online |
| needs custom modules or Apps Store apps, and no one will run servers | Odoo.sh |
| needs modules plus system packages, PostgreSQL extensions or permanent processes | On-premise |
| needs to stay on a version beyond its standard support | Odoo.sh, for a limited time, or on-premise |
The order in which to ask the questions:
- The gap analysis comes first. It tells you whether there will be custom modules or Apps Store apps. If there won’t be, Odoo Online is the simplest path: there is no server to run and hosting is included in the subscription.
- Next, what the code asks of the infrastructure. If the project needs system packages, PostgreSQL extensions or permanent processes, on-premise is where that decision stays in your company’s hands. Direct database reads from external tools require dedicated hosting on Odoo.sh.
- Then, who will run it. If neither an in-house team nor a provider will take on patches, backups, monitoring and upgrades, Odoo.sh leaves that layer with Odoo and keeps the repository, staging and shell. If someone will run it and your company wants a say over every piece of the server, on-premise gives it that control.
- Last, the region. On Odoo.sh it is chosen when the project is created and cannot be changed on request: it moves by transferring a backup to another project. Among the zones Odoo.sh publishes, the ones in the Americas are in the United States and Canada, and Odoo notes that the location of its data centers is not contractually guaranteed. Backups on Odoo’s cloud are replicated to data centers in Europe and Canada, with no option to choose them, which is worth checking against your group’s data location policy.
Changing hosting later
Changing hosting is possible in all six directions, and the Odoo 20.0 documentation treats it as a procedure of its own: its upgrade page makes clear that a version upgrade does not include changing hosting type. What each move requires, according to the hosting page:
| Move | What it requires |
|---|---|
| From Odoo Online to Odoo.sh or on-premise | Download the backup from the database manager and import it into the project or restore it on the server; if the database runs an intermediary version, it is first upgraded to the next major version, waiting for its release if needed |
| From Odoo.sh to on-premise | Download the production backup and restore it on the server |
| From on-premise to Odoo.sh | Import the database from the Backups tab of the production branch |
| From Odoo.sh or on-premise to Odoo Online | Uninstall every non-standard app —on Odoo.sh, in staging first; on-premise, on a duplicate— and request the transfer through a support ticket; the database is unreachable during the migration |
Four details prevent surprises. The plan changes with the hosting: Odoo.sh and on-premise are only on the Custom plan, and Odoo.sh must also be part of the subscription. Importing into Odoo.sh requires free storage of at least four times the backup size, so a 10 GB backup needs 40 GB. The imported database becomes a duplicate, unlinked from the subscription, and only one active database is allowed per subscription: you unlink the previous one and register the new one. And if you start on Odoo Online planning to move to Odoo.sh later, you can create the database from odoo.com/start-lts, which keeps it on a major version.
While the database is on Odoo Online, its data can go anywhere:
“When using Odoo Online, you can download a backup of your database at any time through the control center. You own your data!”
Frequently asked questions
Odoo Online or Odoo.sh, which one fits?
Odoo Online fits when the implementation runs on standard features, configuration and Odoo Studio: Odoo runs everything and hosting is included in the subscription. Odoo.sh fits when there will be custom modules or apps from the Odoo Apps Store and you prefer Odoo to run the infrastructure; it requires the Custom plan and is billed separately from the license.
Can Odoo be self-hosted?
Yes. Odoo Enterprise can run on servers your company chooses, under the Custom plan, with the database registered using the subscription code. Odoo 20 requires Python 3.12 or later and PostgreSQL 16 or later, and backups, patches and upgrades become the job of your company or its provider.
How much does Odoo.sh cost?
Odoo.sh is billed separately from the Odoo Enterprise license, and the subscription has to be on the Custom plan. Its public pricing page computes the amount from workers —the processes that handle requests at the same time—, storage, hosting type —shared or dedicated— and additional staging environments; the current amount is on odoo.sh/pricing.
How do you move an Odoo Online database to Odoo.sh?
Download the backup from the Odoo Online database manager and import it from the Backups tab of the project’s production branch. If the database runs an intermediary version, it must first be upgraded to the next major version, because Odoo.sh only supports major versions.
By industry
Choosing where your Odoo will run? See our Odoo implementation service, or write to us.
Sources
- Odoo S.A., “Odoo Online”, official Odoo 20.0 documentation, odoo.com/
documentation/ . Accessed .20.0/ administration/ odoo_online.html - Odoo S.A., “Hosting (Change hosting solution)”, official Odoo 20.0 documentation, odoo.com/
documentation/ . Accessed .20.0/ administration/ hosting.html - Odoo S.A., “Odoo.sh: Branches”, official Odoo 20.0 documentation, odoo.com/
documentation/ . Accessed .20.0/ administration/ odoo_sh/ getting_started/ branches.html - Odoo S.A., “Odoo.sh: Create a project”, official Odoo 20.0 documentation, odoo.com/
documentation/ . Accessed .20.0/ administration/ odoo_sh/ getting_started/ create.html - Odoo S.A., “Odoo.sh: Settings”, official Odoo 20.0 documentation, odoo.com/
documentation/ . Accessed .20.0/ administration/ odoo_sh/ getting_started/ settings.html - Odoo S.A., “On-premise”, official Odoo 20.0 documentation, odoo.com/
documentation/ . Accessed .20.0/ administration/ on_premise.html - Odoo S.A., “Packages installation”, official Odoo 20.0 documentation, odoo.com/
documentation/ . Accessed .20.0/ administration/ on_premise/ packages.html - Odoo S.A., “Bugfix updates”, official Odoo 20.0 documentation, odoo.com/
documentation/ . Accessed .20.0/ administration/ on_premise/ update.html - Odoo S.A., “odoo/release.py”, Odoo source code, odoo/odoo repository, branch 20.0, github.com/
odoo/ . Accessed .odoo/ blob/ 20.0/ odoo/ release.py - Odoo S.A., “Upgrade”, official Odoo 20.0 documentation, odoo.com/
documentation/ . Accessed .20.0/ administration/ upgrade.html - Odoo S.A., “Standard and extended support”, official Odoo 20.0 documentation, odoo.com/
documentation/ . Accessed .20.0/ administration/ standard_extended_support.html - Odoo S.A., “Neutralized database”, official Odoo 20.0 documentation, odoo.com/
documentation/ . Accessed .20.0/ administration/ neutralized_database.html - Odoo S.A., “Mexico”, official Odoo 20.0 documentation, fiscal localizations, odoo.com/
documentation/ . Accessed .20.0/ applications/ finance/ fiscal_localizations/ mexico.html - Odoo S.A., “Odoo Enterprise Subscription Agreement, version 13 of September 24, 2026”, official Odoo 20.0 documentation, odoo.com/
documentation/ . Accessed .20.0/ legal/ terms/ enterprise.html - Odoo S.A., “Pricing”, Odoo public pricing page, odoo.com/
pricing . Accessed . - Odoo S.A., “Odoo.sh Pricing”, Odoo.sh public pricing page, odoo.sh/
pricing . Accessed . - Odoo S.A., “Odoo.sh F.A.Q.”, Odoo.sh frequently asked questions, odoo.sh/
faq . Accessed . - Odoo S.A., “Odoo Cloud Hosting Service Level Agreement”, Odoo cloud service level policy, odoo.com/
cloud-sla . Accessed .