> ## Documentation Index
> Fetch the complete documentation index at: https://docs.doploy.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Marketplace: OCA Modules

> Browse the Odoo Community Association catalog and add modules to a development branch in one click

# Marketplace: OCA Modules

The [Odoo Community Association](https://odoo-community.org) (OCA) maintains thousands of open-source Odoo modules. doploy indexes all of them for every Odoo version and lets you add one to a development branch without leaving the dashboard.

## How it works

Open a development branch under **Deployments** and pick the **Marketplace** tab. You get the OCA catalog for that branch's Odoo version.

1. **Search or browse.** Filter by category, or search by name or description.
2. **Open a module.** The side panel shows the README, the maintainers, and what adding it would mean for your repository: other OCA modules it needs, the standard Odoo apps it uses, and any Python packages or system programs it requires.
3. **Add to the branch.** doploy copies the module source, and every OCA module it depends on, into the root of your repository as a single commit on that branch. Python packages are appended to `requirements.txt`. Your usual build starts from the push.
4. **Install into the database.** Leave "Install into the database once the build finishes" ticked and doploy runs `odoo-bin -i` for the module on the new build. Untick it if you only want the code.

Adding a module takes about a minute. The commit message lists every module, its version, its source repository, and its licence.

## What lands in your repository

Modules are copied, not linked. Each one becomes a top-level folder next to your own modules, exactly as it exists in the OCA repository at the time of the install, including its `README.rst` and licence files.

A lock file at `.doploy/oca.lock.json` records where every OCA module came from, the exact upstream revision, and whether you asked for it or it was pulled in as a dependency. The **Installed from OCA** list on the Marketplace tab reads from this file.

Because the code is yours now, you can change it. Later OCA updates do not overwrite your copy.

## Dependencies

Before anything is written, doploy resolves the full dependency chain:

| Dependency is                                    | What happens                                                                                                                |
| ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------- |
| A standard Odoo app (`sale`, `contacts`, `base`) | Nothing to copy. Odoo installs it when the module is installed.                                                             |
| Another OCA module for the same version          | Copied along with the module you picked.                                                                                    |
| Already a folder in your repository              | Left alone.                                                                                                                 |
| Not in the catalog                               | Shown as a warning. This is usually an Odoo Enterprise app. Odoo will refuse to install the module if it is really missing. |

Installs are refused when the module is not marked installable for your Odoo version, when it is already in the repository, or when the chain would add more than 40 modules.

## Python packages and system programs

Modules that declare Python dependencies get them appended to `requirements.txt` in your repository. doploy installs those packages when it builds the instance image, the same way it does for your own modules.

Some modules also expect system programs (`wkhtmltopdf` variants, `pdftk`, and so on). doploy cannot install those from the repository. They are listed in the side panel and in the commit message so you know before you add the module.

## Licences

Most OCA modules are AGPL-3, some are LGPL-3. Each module's licence file is copied with it and named in the commit message. AGPL requires that you publish modified copies if you offer the software over a network, so check if that matters to your organisation.

## Removing a module

Delete the folder from the repository and push. The lock file entry stays until the next install rewrites it; the Marketplace tab marks it as "folder missing" in the meantime. Uninstall the module in Odoo first if it was installed into the database.

## Staging and production

Adding modules is available on development branches only. Get the module working there, then merge to staging and production the way you normally do. Production and staging need a module update after the merge, as with any code change.

## Catalog freshness

The catalog is refreshed nightly from GitHub. A module that appeared upstream today shows up tomorrow. Installs always use the upstream revision the catalog was read at, so what you see in the side panel is what lands in your branch.
