Documentation › Get started
Staging
A neutralized copy of production to test with real data, and exactly what neutralization turns off.
A staging branch runs your code on a copy of the production database, so you can test with real data before you deploy. The copy is neutralized : it can't email your customers, charge cards or run your scheduled jobs.
When the copy is made
The first build after a branch moves to staging copies production, neutralizes the copy, then updates the modules whose version was bumped.
Later pushes use Update previous build by default: the staging database is kept and updated the same way production will be. It's a rehearsal of the production deploy.
Click Rebuild to throw the staging data away and start from a fresh copy of production.
What neutralization disables
Outgoing mail servers : emails are caught and shown in the branch's Mails tab instead of being sent.
Incoming mail servers (fetchmail), so staging doesn't read the real mailbox.
Scheduled actions , apart from Odoo's own database cleanup.
Payment providers and shipping connectors are disabled or switched to test mode.
In-app purchase accounts (SMS, document digitization…) and calendar sync tokens are disconnected.
The Odoo Enterprise subscription code is removed, so the copy never counts as a second production database.
Website domains are cleared.
On Odoo 16 and later this is Odoo's own odoo neutralize , which each installed app extends. On Odoo 14 and 15, Odoo Cloud runs the equivalent SQL.
Your own integrations Neutralization only knows about Odoo's standard features. If a custom module calls an external API with credentials stored in the database, it may still call it from staging. Guard it, for example by checking the database.is_neutralized system parameter.
Development and staging builds don't live forever: development builds are removed 3 days after they were built, staging builds after 30 days. Rebuild brings them back.