ow — Odoo Workspaces
CLI tool that turns interactive prompts into ready-to-code Odoo workspaces using git worktrees.
What it is
ow manages Odoo development workspaces. Each workspace is a directory holding git worktrees for
the Odoo repos you work on, plus generated IDE configs, Python environment, and Odoo config files
— all ready to open and start coding.
Every workspace on the machine shares the same set of bare repos, so you clone Odoo once and fetch updates that are immediately visible to every workspace. Worktrees are cheap (no duplicate working trees), so you can keep multiple feature branches side by side without re-cloning gigabytes of history.
What it solves
- Clone fatigue — Odoo repos are large. Shared bare repos mean one clone, many worktrees.
- Setup boilerplate —
mise.toml,odoorc,odools.toml,pyrightconfig.json, and IDE configs are generated from templates every time. - Branch juggling — concise
base..featurebranch specs control detached vs attached worktrees;ow rebasekeeps them up to date idempotently, andow switchmoves every repo in a workspace to a branch at once. - Workspace discovery — workspaces live anywhere; an index remembers where, so
ow status myfeaturefinds it by name.
Prerequisites
- mise — manages Python, virtualenvs, and dependencies in generated workspaces
- Odoo system dependencies — see Odoo source install docs (includes wkhtmltopdf, PostgreSQL client libs, etc.)
- SSH — configured for access to Odoo repositories
- Docker or Podman (optional) —
owships a compose file for postgres, pgweb and mailpit; see Services
Installation
pipx install odoo-workspaces # recommended
pip install odoo-workspaces # or in an active venv
Quick Start
mkdir my_work && cd my_work
ow init # interactive form: templates, repos, branch specs
mise install
code . # open in your IDE and enjoy
ow # launch the interactive dashboard
On first use, ow writes a commented default config to ~/.config/ow/config.toml — edit it to
point at your Odoo remotes. See Configuration for the full layout.
Documentation
- Commands — full command reference with flags and workspace resolution
- Interactive Dashboard — TUI for managing workspaces without memorising flags
- Configuration — XDG paths, remotes, variables, branch spec syntax
- Template System — bundles, overrides, context keys, custom bundles
- Services — Docker Compose stack (postgres, pgweb, mailpit)
- Sandboxing AI Coding Assistants — bubblewrap isolation for Opencode and Claude Code
- Tab Completion — fish, bash, zsh, powershell
- Migrating from 1.x — one-time move from the project-scoped layout
Thanks
This is a small personal project I built with AI coding. It scratches a very specific itch I have — managing multiple Odoo worktrees side by side.
If you find it useful, please consider contributing!
Contributions are welcome! If something is broken, confusing, or missing — open an issue. If you have a fix or improvement in mind, PRs are appreciated.
Release files for odoo-workspaces 2.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| odoo_workspaces-2.4.1.tar.gz | 280.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| odoo_workspaces-2.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 423.2 kB
Release files / odoo_workspaces-2.4.1.tar.gz
| Download URL | odoo_workspaces-2.4.1.tar.gz |
|---|---|
| Size | 280.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
27db78122394d9ac8732c39db8ad2efc933d1751a85352e8898529bf57a9eadd
|
|
BLAKE2b-256 checksum How to use checksums |
2e9854a01873004085bec37897a1d68829c4dc9b2a447b04203efe1f735ddf59
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / odoo_workspaces-2.4.1-py3-none-any.whl
| Download URL | odoo_workspaces-2.4.1-py3-none-any.whl |
|---|---|
| Size | 143.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1d9b94147233535bf42255982554bcc6b5562d8122454159ded05bd015fd6851
|
|
BLAKE2b-256 checksum How to use checksums |
915cbee020e9373f720d80ab7a86ecdc13438623ae21cdc4e3a19b0f5b3032c8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|