Open-source reference Odoo modules from Roekish — the team building the French reference for Odoo implementation.
We give away most of what we do. This repository is real, installable code: the custom modules, the conventions we hold ourselves to, and the CI that proves each module installs and upgrades cleanly against Odoo 18 Community. Read it, run it, copy it.
Target platform: Odoo 18.0, PostgreSQL 16. All modules are LGPL-3.
| Module | Summary |
|---|---|
roe_l10n_fr_invoice_mentions |
Adds the legally required French payment mentions (Code de commerce L441-9/L441-10, D441-5) to customer invoices: payment terms, late-payment penalty rate, the €40 fixed recovery indemnity and the early-payment discount, computed and printed on the invoice PDF. |
roe_base_setup |
A minimal, installable skeleton module demonstrating our file layout and conventions. Copy it as the starting point for a new custom addon. |
Each module has its own README.md with what it does and how to install it.
You need Docker (with the Compose plugin) and make.
git clone https://github.com/roekish-org/roekish-addons.git
cd roekish-addons
make up # start Odoo 18 + PostgreSQL 16
# open http://localhost:8069 and create a database at /web/database/managerThen install a module into a fresh database (here with French localization):
docker compose run --rm odoo odoo -d mydb \
-i base,l10n_fr,roe_l10n_fr_invoice_mentions \
--load-language=fr_FR --without-demo=all --stop-after-init
make restartmake help lists every convenience target (up, down, logs, lint,
ci-smoke, scaffold, …).
All custom modules live under addons/, which is bind-mounted into the Odoo
container at /mnt/extra-addons (already on the addons_path). To start a new,
convention-compliant module:
make scaffold NAME=roe_my_module
# or: python3 scripts/scaffold_addon.py roe_my_moduleThe generated module is minimal but complete and installable (one example
model + view + access rule + test, clearly marked for you to replace).
Third-party / OCA modules are not committed here — vendor them in a separate
directory and add it to addons_path.
CI runs two gates on every push and pull request (see
.github/workflows/ci.yml):
- Lint —
ruff check+ruff format --checkonaddonsandscripts. - Smoke — installs (and runs the tests of) every module under
addons/against the Dockerised Odoo 18 stack; the build fails if any module does not install/upgrade or any test fails.
Run the exact same checks locally:
make lint # ruff check + format check
make ci-smoke # install + test every module against the Docker stackThe engineering standards every module here follows are documented in
docs/CONVENTIONS.md. The scaffolder
(scripts/scaffold_addon.py) is the executable form of that document.
Issues and pull requests are welcome — see CONTRIBUTING.md.
LGPL-3.0-or-later. See LICENSE. Each module also declares
"license": "LGPL-3" in its manifest, and every source file carries an SPDX-style
copyright header.