Skip to main content

odoo-forge

License Python Architecture

A declarative platform for composing Odoo projects: layered manifests, resolved overrides, and pluggable execution backends.

Español · Documentation · Roadmap


The problem

An Odoo project is normally assembled by hand: a fixed layout of cloned repositories, a hand-maintained addons_path, a bespoke docker-compose.yml, and version pinning that lives in someone's memory. Reproducing a deployment means reproducing a ritual.

odoo-forge models a project as data instead. Layers, versions, overrides, credentials and runtime become a declarative definition — project.yaml resolved into a project.lock — that can be validated, locked to exact commits, materialized onto disk, and provisioned against a chosen backend.

The domain core stays free of infrastructure. Git, Docker, PostgreSQL, the image registry and CI pipelines all sit behind ports, so a new execution surface is a new adapter, never a rewrite.

Status

This is an early-stage project under active development (first commit July 2026, single maintainer). It is honest about its boundaries.

Operational today

  • project.yaml / project.lock handling, with drift detection
  • Effective resolution of layers and overrides
  • Git-backed workspace materialization
  • Backend planning derived from materialized state
  • Local Odoo + PostgreSQL backend on Docker
  • Isolated DatabaseProvider adapter for PostgreSQL on Docker
  • GHCR image operations (resolve, publish, pull, exists)
  • Image factory for base images
  • SOPS/age-backed Enterprise credential handling

Provider-neutral foundations, not yet wired to a managed flow

Credentials, data artifacts, project catalog, and durable operations exist as neutral building blocks. They are implemented but not yet exposed as managed data-environment workflows.

Target state

Managed data environments, tenancy, control plane, RBAC, remote backends (EC2, Kubernetes, Fargate) and a web UI.

The canonical, structural source of truth for product state, dependencies, evidence and handoffs is docs/specs/platform/portfolio.json. Prose in this README is a summary; the portfolio is authoritative.

Quickstart

forge validate, project and run bringing up a local Odoo stack

Requires Python 3.11+, uv, and a running Docker daemon for backend commands.

uv tool install odoo-forge-toolkit   # or: pipx install odoo-forge-toolkit / pip install odoo-forge-toolkit
forge --help

The PyPI distribution is named odoo-forge-toolkit; the command it installs is forge and the import packages keep the odoo_forge* names.

To work on odoo-forge itself, install from source instead:

git clone https://github.com/aparragithub/odoo-forge.git
cd odoo-forge
uv sync
uv run forge --help

A minimal manifest looks like this:

name: forge-min
odoo_version: "19.0"
edition: community
core:
  type: core
  url: https://github.com/odoo/odoo.git
  ref: "19.0"
client:
  addons_path: client/addons
workspace:
  checkout_timeout_seconds: 300
backend:
  odoo:
    bind_host: 0.0.0.0
    http_port: 18069

Validate it, pin every declared ref to a commit SHA, project it onto the filesystem, then bring the stack up:

uv run forge validate --manifest example/project.yaml
uv run forge lock     --manifest example/project.yaml
uv run forge project  --manifest example/project.yaml
uv run forge run      --manifest example/project.yaml
uv run forge status

See example/ for a complete working manifest.

CLI

Command family Commands
Manifest validate, lock, project, unlock, onboard
Local backend run, status, stop, destroy, logs
Images (GHCR) image-resolve, image-publish, image-pull, image-exists
Pipelines pipeline-trigger, pipeline-status
Maintenance doctor, rotate-enterprise-credential

Run uv run forge <command> --help for the full signature of any command.

Architecture

Hexagonal, and enforced rather than aspirational: 9 import-linter contracts fail the build if the domain core reaches for infrastructure, the CLI, or any adapter.

Package Role
odoo_forge Pure domain — Pydantic models, manifest composition, ports
odoo_forge_cli Typer presentation layer (forge)
odoo_forge_git Git source provider
odoo_forge_workspace Workspace materialization
odoo_forge_docker Local Docker backend
odoo_forge_postgres_docker PostgreSQL-on-Docker database adapter
odoo_forge_registry GHCR image registry adapter
odoo_forge_catalog Project catalog index adapter
odoo_forge_pipeline_github GitHub Actions pipeline adapter

Adapters depend on the core. The core depends on nothing but its own ports.

Development

uv sync
uv run pytest                     # unit tests (integration deselected by default)
uv run pytest -m integration      # real-daemon backend tests
uv run pytest -m real_docker      # Docker PostgreSQL acceptance tests
uv run ruff check .
uv run mypy src
uv run lint-imports               # architecture contracts

Documentation

Entry point What it covers
ROADMAP.md What works today, what is built but not wired, and what comes next
docs/comparison.md How odoo-forge compares to doodba, hand-rolled compose and Odoo.sh — including when not to use it
docs/recipes/ Task-oriented guides: add an addon layer, override with your fork, Enterprise credentials
docs/00-master-index.md Index of all maintenance documentation
docs/diagrams/odoo-forge-current-implementation-guide.md The exact boundary of what is implemented today
docs/01-repository-map.md Repository structure
docs/06-docs-and-openspec-lifecycle.md How docs and specs are kept in sync

Specs and roadmap

Development is spec-driven. Specifications live under openspec/specs/ as the accumulated baseline; changes flow through openspec/changes/ and land in openspec/changes/archive/ once complete.

Direction

  1. Operational foundation — image factory, CLI core, workspace materialization, local Docker backend, PostgreSQL adapter, GHCR adapter. Implemented.
  2. Provider-neutral foundations — credentials, data artifacts, DatabaseProvider, project catalog, durable operations. Implemented, not yet joined to managed flows.
  3. Platform workflows — managed data environments, tenancy, control plane, governance, per-actor journeys. Blocked, planned or absent per portfolio.json.
  4. Remote surfaces and interfaces — EC2, Kubernetes, Fargate, RBAC, web UI. Target state.

Contributing

Issues and pull requests are welcome — start with CONTRIBUTING.md and the good-first-issue label. Every change lands through a pull request tied to an open issue; nothing is pushed straight to main.

License

Apache License 2.0 — Copyright 2026 Angel Parra.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

odoo_forge_toolkit-0.1.1.tar.gz (1.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

odoo_forge_toolkit-0.1.1-py3-none-any.whl (186.9 kB view details)

Uploaded Python 3

File details

Details for the file odoo_forge_toolkit-0.1.1.tar.gz.

File metadata

  • Download URL: odoo_forge_toolkit-0.1.1.tar.gz
  • Upload date:
  • Size: 1.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for odoo_forge_toolkit-0.1.1.tar.gz
Algorithm Hash digest
SHA256 3776b95d4e8228a00f763aa3fda9ef16206829bf91bf78b526031835893d5fa3
MD5 f42d5dcd6b714c2e8b0a317e9152b96b
BLAKE2b-256 a80cbf750eff4760bb413af752006cb5688cc3f602601c3b81cbb211d6e98f20

See more details on using hashes here.

Provenance

The following attestation bundles were made for odoo_forge_toolkit-0.1.1.tar.gz:

Publisher: release.yml on aparragithub/odoo-forge

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file odoo_forge_toolkit-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for odoo_forge_toolkit-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1514ddb2006ba916d6cf28ebe0bd510621ac05a2c5b06c27589e3df6c7835de7
MD5 50ff7bd432c9f2f1134212a2d5d31cc7
BLAKE2b-256 e964051359e3ab03c1f1dc740d923cc5d9994056a048488a8b0b1a39271a0615

See more details on using hashes here.

Provenance

The following attestation bundles were made for odoo_forge_toolkit-0.1.1-py3-none-any.whl:

Publisher: release.yml on aparragithub/odoo-forge

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page