Auto Upgrade Odoo Modules with Docker for Faster Development

When developing custom Odoo modules, repeatedly restarting Docker containers and manually clicking Upgrade inside Odoo can significantly slow down your workflow.

If your team is building custom ERP features or providing Odoo implementation services, automating module upgrades can save hours during development.

This guide explains how to configure Docker so Odoo automatically reloads your code and upgrades one or more modules whenever the server starts.

Why Automatically Upgrade Odoo Modules?

During Odoo development, changes to:

  • Python models
  • XML views
  • Security rules
  • Access control lists
  • Module manifests
  • Data files

often require restarting Odoo and upgrading the affected modules before the changes take effect.

Instead of manually upgrading modules every time, you can configure Docker to do it automatically.

A typical development command looks like this:

command: >
  -- --dev=all
  -d smart_address
  -u floo_smart_address

Understanding the Odoo Startup Flags

-d smart_address

The -d option specifies which Odoo database should be used when the server starts.

Example:

./odoo-bin -d smart_address

If you work with multiple development databases, this ensures Docker always launches the correct one.


-u floo_smart_address

The -u flag tells Odoo to automatically upgrade one or more modules during startup.

Running this command is equivalent to:

./odoo-bin -u floo_smart_address

During the upgrade process, Odoo will:

  • Reload XML views
  • Update security rules
  • Apply ORM model changes
  • Refresh access control lists
  • Process manifest updates
  • Execute upgrade scripts when applicable

This eliminates the need to manually open Apps → Upgrade after every restart.


Upgrading Multiple Modules

If your project consists of multiple custom modules, simply separate them with commas.

Example:

command: >
  -- --dev=all
  -d smart_address
  -u module_sales,module_inventory,module_accounting

Odoo will upgrade each module in the order provided before becoming available.

This is particularly useful for projects where several custom modules depend on one another, such as:

  • Base module
  • Sales customization
  • Inventory customization
  • Accounting integration

Keeping all actively developed modules in the -u list ensures every restart reflects your latest changes.

Tip: Only include the modules you’re actively developing. Upgrading unnecessary modules increases startup time.


--dev=all

The --dev=all flag enables all of Odoo’s available development features.

Compared to --dev=reload, it provides a more comprehensive development environment by enabling additional debugging and developer tools alongside automatic code reloading.

For most local development environments, --dev=all is the easiest option because you don’t need to selectively enable development features.

What --dev=all Helps With

  • Automatically reloads Python code when changes are detected.
  • Enables developer-friendly debugging features.
  • Makes frontend and backend development easier.
  • Improves visibility into templates, assets, and development logs.

What Still Requires a Module Upgrade?

Even with --dev=all, Odoo does not automatically reload everything.

File TypeAutomatically Applied?
Python (.py)✅ Yes
XML Views❌ Requires module upgrade
Security CSV❌ Requires module upgrade
Manifest (__manifest__.py)❌ Requires module upgrade
Data Files❌ Requires module upgrade

That’s why combining --dev=all with -u creates an excellent development workflow.


Recommended Odoo Docker Development Workflow

With this configuration, your daily workflow becomes:

  1. Edit Python or XML files.
  2. Save your changes.
  3. Odoo detects code changes and restarts automatically.
  4. Your specified modules are upgraded.
  5. Refresh your browser.

No manual container restart.

No manual module upgrade.

No repeated clicks inside the Apps menu.

This setup is especially useful for custom Odoo module development, ERP customization, and long-running Odoo implementation projects.


Example Docker Compose Configuration

services:
  odoo:
    image: odoo:19
    ports:
      - "8069:8069"
    volumes:
      - ./addons:/mnt/extra-addons
    command: >
      -- --dev=all
      -d smart_address
      -u module_sales,module_inventory,module_accounting

This configuration automatically:

  • Starts Odoo using the selected database.
  • Enables all Odoo development features.
  • Detects Python code changes.
  • Restarts the server when necessary.
  • Upgrades all specified custom modules.

Best Practices

For the fastest development experience:

  • Use --dev=all only in local development.
  • Upgrade only the custom modules you’re actively working on.
  • Avoid -u all unless you intentionally need to upgrade every installed module, as it can dramatically increase startup time.
  • Group related modules together in the -u list when they have dependencies.

Conclusion

Using --dev=all together with the -u option creates an efficient Odoo development workflow. Python code reloads automatically, while your selected modules are upgraded on every restart, ensuring XML views, security rules, and metadata remain synchronized.

If your project contains multiple custom modules, simply list them as a comma-separated value in the -u flag. This approach keeps all active modules up to date while avoiding the overhead of upgrading your entire Odoo installation on every restart.

Book a Free Consultation

Haven’t found the right solution yet?
Tell us about your needs, and let’s discuss the best solution together.

Project description.

Built a private marketplace research and purchase planning platform for Shopee. The system tracks product performance over time, estimates sales velocity and gross revenue, analyzes demand across product variants, and turns the research into actionable purchasing plans. It also calculates supplier costs, shipping, platform fees, margins, planned investment, and estimated earnings to support data-driven sourcing decisions.

Skills and deliverables

Full-Stack Development, Web Application Development, Data Analysis, Business Process Automation, Business Intelligence

Shopee Marketplace Research & Purchase Planning Dashboard

We built this application to solve a common problem in marketplace sourcing: finding products is easy, but deciding what is actually worth buying, which variant to prioritize, and how much inventory to purchase requires much more analysis. Instead of relying on a single product snapshot, the system organizes products into research collections and tracks their marketplace performance over time.

Product research & tracking

Products can be added individually or collected from marketplace stores and organized into dedicated research collections. The system keeps historical observations so users can compare changes between captures instead of relying only on the latest marketplace data. This makes it possible to estimate metrics such as: – Sales velocity – Estimated daily gross revenue – Price changes – Product movement over time – Variant-level demand

Variant demand analysis

One of the most important parts of the system is identifying which variants are actually driving sales. Instead of treating a product as a single item, the application analyzes sales movement at variant level and shows each variant’s contribution to recent demand. This helps identify which sizes, models, or variations should be prioritized when purchasing inventory.

Purchase planning

Research data can then be converted directly into a purchasing plan. For every product and variant, the user can enter supplier pricing, shipping costs, purchase quantities, exchange rates, and other operational costs. The system automatically calculates: – Planned inventory investment – Shipping cost – Marketplace/platform fees – Net margin per unit – Net margin percentage – Estimated earnings – Total batch investment This allows purchasing decisions to be evaluated before committing capital.

Why We built it

The goal was to replace a workflow that would normally require multiple spreadsheets, manual marketplace checks, and repeated calculations. The resulting workflow became: Discover products → Track performance → Analyze demand → Select variants → Plan purchasing → Estimate margins Everything is kept in one application, making the research and sourcing process easier to review, repeat, and scale.

Result

The platform turns raw marketplace observations into actionable purchasing information. Instead of choosing products based only on intuition or current sales numbers, users can evaluate sales movement, variant demand, sourcing cost, expected margin, and required investment before making a purchasing decision. Built as an end-to-end internal tool, from data collection and analysis to the final purchasing workflow.

Project description.

Built a browser-based tool that converts Shopee/SPX order exports into clean, print-ready shipping labels. It supports multiple Excel/CSV files, combines orders into one preview, and automatically generates QR codes, barcodes, tracking numbers, and product information for 68 mm thermal printers. All order data is processed locally in the browser for better privacy, eliminating repetitive manual label formatting.

Skills and deliverables

Laravel, Business Automation, CSV, Microsoft Excel

Shopee SPX Order Label Maker for Thermal Printing

This tool was built to simplify the shipping label preparation process for Shopee SPX orders. The existing workflow required order data to be exported from Shopee and manually formatted before it could be printed on a thermal printer. This became repetitive and time-consuming, especially when processing multiple orders at once.

We built a browser-based label generator that reads Shopee Excel/CSV exports and automatically converts the order data into clean, print-ready SPX labels. The tool automatically handles: – Tracking numbers – QR codes – Barcodes – Product names and variants – Order quantities – Multiple order files at once – 68 mm thermal printer formatting Users can review all generated labels before printing, without having to manually copy or reorganize the order information.

The order files are processed directly inside the browser instead of being uploaded to a server. This keeps customer and shipment data private while also making the tool fast and simple to use.