The cleanest way to run Odoo custom modules is to keep them in GitHub and let your hosting deploy them. On Easy Instance you link a GitHub repository to an instance, push a module to the tracked branch, and the instance pulls it in automatically. Then you install it in Odoo. This guide covers linking the repository, the folder layout Odoo expects, pushing, and installing the module.
This guide is about your own code. To add existing third-party or OCA modules without keeping a repository, use the Marketplace instead: see how to install Odoo modules from the Marketplace.
Step 1: Link a GitHub repository
If you linked a repository in the Connect GitHub step while you deployed Odoo, skip to Step 2. Otherwise:
- Open the instance and click Git in the left sidebar.
- The panel shows No repository linked. Click Connect GitHub and approve access in the popup. The GitHub account is saved for this instance only.
- Open the repository list. Search for an existing repository, or choose Create new repository to have one created for you.
- For an existing repository, choose the branch the instance should deploy from.
- Click Link repository. Easy Instance clones the branch and registers its modules.
To use another GitHub login, click Use a different account in the same panel. You need Admin access to the project to link or change a repository.
Step 2: Put modules at the top of the repository
The repository root is added to Odoo's addons path, so each module must be a folder at the top level, not nested inside another folder:
my-odoo-addons/
├── approval_block/
│ ├── __init__.py
│ ├── __manifest__.py
│ ├── models/
│ └── views/
└── sale_custom_report/
├── __init__.py
└── __manifest__.pySet the version key in __manifest__.py to match your Odoo series, for example 19.0.1.0.0 on Odoo 19. List Python libraries the module needs under external_dependencies, and install them from the Packages tab (see Odoo Python packages). Easy Instance does not read a requirements.txt file.
Step 3: Push the module
On the Git tab, copy the clone URL with Copy, clone the repository, add your module folder, and push:
git clone https://github.com/your-org/my-odoo-addons.git
cd my-odoo-addons
# add or edit your module folder, then:
git add .
git commit -m "Add approval_block module"
git push origin mainPush to the branch the instance deploys from. Pushes to that branch sync automatically. Your commit then appears in the Git tab's Commits list and under Commit History on Overview. If you want to pull right away, click Sync now ("Pull the tracked branch and register its modules").
Which branch is deployed
- Production follows the branch selected in the Branch this instance deploys from menu on the Git tab. Switching branches syncs the new one.
- Staging instances follow a branch named exactly like the staging instance. It is created from your default branch if missing. See Odoo staging environment.
Step 4: Install the module in Odoo
Synced modules appear in the Marketplace section under Downloads, marked Linked repository, where you can click Install. The instance restarts to apply it, so users may notice a short pause. Later, use Upgrade after you push a new version, or Uninstall.
You can also install from Odoo itself: open Apps, enable developer mode, click Update Apps List, search for the module, and click Activate.
Give your team access to the repository
The Git tab has a Collaborators view where you can add GitHub users to the repository as Admin, Developer, or Viewer, and remove them later. Developers can push, so they can deploy to the branches they push to.
Deploy Odoo from GitHub without running servers
GitHub deploys, staging branches, backups and monitoring are part of every Easy Instance plan, at $30 per Odoo worker per month. See features and pricing, or start a 10-day free trial with no credit card.