An Odoo module (also called an addon) is a Python package that Odoo discovers in one or moreDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/odoo/documentation/llms.txt
Use this file to discover all available pages before exploring further.
addons_path directories. Every module must contain at minimum a __manifest__.py file that describes it and a __init__.py that makes it a Python package. Everything in the Odoo ecosystem — business apps, technical modules, localization packs, themes — is delivered as a module with this same structure.
Module Directory Structure
A well-organized module follows a conventional layout that makes it easy to navigate:Only
__manifest__.py and __init__.py are strictly required. All other directories are conventional — Odoo imposes no requirement on folder names except that static assets must be under static/.__manifest__.py Reference
The manifest is a plain Python dictionary. Odoo reads it when scanning addons_path for available modules.
Field Reference
name (required)
name (required)
Type:
strThe human-readable name of the module as it appears in the Apps list and module page.version
version
Type:
strModule version following Odoo’s convention: {odoo_major}.{module_major}.{minor}.{patch}.depends
depends
Type:
list[str]List of module technical names that must be installed before this module. The framework installs all dependencies automatically. If a dependency is uninstalled, this module is also uninstalled.The
base module is always installed, but you should still declare it as a dependency to ensure your module updates correctly when base is updated.data
data
Type:
list[str]Paths (relative to the module root) of XML or CSV files that are loaded every time the module is installed or upgraded. Files are loaded in the listed order — earlier files can be referenced by later ones.demo
demo
Type:
list[str]Paths to data files that are loaded only when Odoo is running in demonstration mode (when a new database is created with demo data enabled). These files typically populate the database with realistic-looking sample records.license
license
Type:
str | Default: LGPL-3Distribution license. Accepted values: GPL-2, GPL-2 or any later version, GPL-3, GPL-3 or any later version, AGPL-3, LGPL-3, Other OSI approved licence, OEEL-1 (Odoo Enterprise Edition License v1.0), OPL-1 (Odoo Proprietary License v1.0), Other proprietary.application
application
Type:
bool | Default: FalseSet to True to make the module appear as a top-level application in the Apps menu. Technical modules that extend other applications should leave this as False.auto_install
auto_install
Type:
bool or list[str] | Default: FalseIf True, the module is automatically installed when all of its depends are installed. Useful for integration (“glue”) modules. If a list of module names is provided, the module auto-installs when all listed names (a subset of depends) are installed.assets
assets
Type:
dictMaps asset bundle names to lists of static file paths. Paths are module-relative or glob patterns.pre_init_hook / post_init_hook / uninstall_hook
pre_init_hook / post_init_hook / uninstall_hook
Type:
str (function name in __init__.py)Hooks called at install/uninstall time. Each receives the Odoo env as its single argument. Use these only when ORM operations alone cannot accomplish the setup or teardown you need.installable
installable
Type:
bool | Default: TrueWhether a user should be able to install the module from the Web UI. Set to False to hide the module from the Apps list while still allowing it to be loaded as a dependency.external_dependencies
external_dependencies
Type:
dictDeclares Python package or system binary dependencies. Odoo will refuse to install the module if any listed dependency is absent from the host machine.maintainer
maintainer
Type:
strPerson or entity responsible for maintaining this module. Defaults to the value of author if not specified.sequence
sequence
Type:
int | Default: 100Controls where the module appears in the Apps list. Lower numbers appear higher in the list.Data Files
Odoo data files are XML or CSV documents that create or update records in the database. They are processed in the order listed in thedata key.
XML Data Files
CSV Data Files
CSV files are a concise way to load records for models with many flat fields. The first row is the header with field names:External IDs (ir.model.data)
Every record created from a data file gets an external ID (also called an XML ID) stored in their.model.data table. This allows data files to reference the same record on subsequent installs/upgrades without creating duplicates.
The external ID format is module.xml_id, for example: estate.property_type_house.