Odood Directory Structure
Odood directory structure is similar to that one for odoo-helper-scripts,
so most users of odoo-helper-scripts will not notice that changes.
Odood project root directory contains following folders:
backups- directory for backups generated byodood db backupcommandconf- directory for configurations used by this odood project. Usually contains two files: one for normal local config and one that is used to run testsodoo.conf- main configuration used by defaultodoo.test.conf- configuration used to run tests, usually has a different port thanodoo.conf, and does not specify a logfile, so all log messages are written to stderr and caught by theodoodtest runner
custom_addons- directory for all addons that are not part of Odoo. Contains only symlinks to actual addon directories — see below.data- Odoo data directory used to store files and sessionsdownloads- directory containing addons downloaded directly from Odoo Appsodoo- Odoo source coderepositories- stores git repositories containing additional (non-standard) Odoo addonsvenv- virtualenv directoryodood.yml- configuration for this Odood project
Optional directories:
assembly- if the project is configured to use assembly, this directory contains the assembly repositorycache- various caches; for example, git sources defined in an assembly spec are cloned here and reused for subsequent sync operations
How addon paths work
Odoo locates installable addons through the addons_path setting in odoo.conf.
Odood configures this path to point at custom_addons/, which acts as a flat
namespace of all third-party addons available to Odoo.
custom_addons/ itself contains only symlinks, never actual addon code.
The real addon code lives in repositories/<owner>/<repo>/ (for git repos) or
downloads/ (for addons from Odoo Apps).
When you run odood repo add <url>, Odood:
- Clones the repository into
repositories/<owner>/<repo>/ - Scans it for installable addons (directories with a valid
__manifest__.py) - Creates a symlink in
custom_addons/<addon_name>→ the addon directory
This design keeps the addon namespace flat (Odoo doesn’t need to traverse nested
directories) while keeping the source repos isolated and easy to update with git pull.
If the symlinks ever get out of sync — for example after manually editing a repo or changing which addons it exposes — run:
odood addons link .
This rebuilds all symlinks in custom_addons/ to match the current state of all
repositories.