Your First Odoo Module in 5 Steps

Your First Odoo Module in 5 Simple Steps

Have you ever dreamed of building your own Odoo module but felt overwhelmed by where to start? Maybe you’ve tinkered with Odoo as a user and thought, "I wish I could customize this for my business!"—but coding seemed like a distant fantasy.

Good news: creating your first Odoo module is easier than you think. With just five basic steps, you can go from zero to a functional module—no prior Odoo development experience required. Let’s break it down.


Why Build Your Own Odoo Module?

Before diving in, let’s address the why:

  • Customization: Odoo’s out-of-the-box apps are powerful, but sometimes you need features tailored to your workflow.
  • Cost-Effective: Hiring a developer for small tweaks can be expensive. Learning the basics saves money.
  • Skill Boost: Adding "Odoo Developer" to your skillset opens new career or business opportunities.

Ready? Let’s build your first module!


Step 1: Set Up Your Module Folder

Every Odoo module lives in its own directory. Here’s how to start:

  1. Navigate to Odoo’s addons folder (where all modules are stored).
  2. Create a new folder for your module (e.g., my_first_module).

💡 Pro Tip: Use lowercase and underscores for folder names (no spaces or hyphens).


Step 2: Add the Essential Files

Every Odoo module needs two critical files:

1. __init__.py

This empty file tells Python, "This folder is a module." Just create it—no content needed.

2. __manifest__.py

This is your module’s ID card. It defines:

  • The module’s name, version, and description.
  • Dependencies (other modules it relies on).
  • Author details.

Example:

{
    'name': 'My First Module',
    'version': '1.0',
    'summary': 'A test module for learning Odoo development',
    'author': 'Your Name',
    'depends': ['base'],
    'data': [],  # We’ll add views here later
    'installable': True,
    'application': False,
}

Step 3: Define Your Model (The Data Structure)

Models define what your module does. For example, if you’re building a "To-Do List" module, you’d create a model to store tasks.

  1. Create a models/ folder inside your module.
  2. Add a Python file (e.g., todo_model.py).

Example Code:

from odoo import models, fields

class TodoTask(models.Model):
    _name = 'todo.task'
    _description = 'A Simple To-Do Task'

    name = fields.Char(string='Task Name', required=True)
    is_done = fields.Boolean(string='Done?')
    deadline = fields.Date(string='Deadline')

💡 What’s Happening Here?

  • _name: A unique identifier for your model (like todo.task).
  • fields: Define data types (text, yes/no, dates, etc.).

Step 4: Create Views (The User Interface)

Now, let’s make your module visible in Odoo’s UI. Views define how users interact with your model.

  1. Create an views/ folder.
  2. Add an XML file (e.g., todo_views.xml).

Example Code:

<odoo>
    <record id="view_todo_task_tree" model="ir.ui.view">
        <field name="name">To-Do Task List</field>
        <field name="model">todo.task</field>
        <field name="arch" type="xml">
            <tree>
                <field name="name"/>
                <field name="is_done"/>
                <field name="deadline"/>
            </tree>
        </field>
    </record>
</odoo>

📌 Don’t Forget: Update __manifest__.py to include this file:

'data': ['views/todo_views.xml'],

Step 5: Install Your Module!

Time to see your creation in action:

  1. Restart your Odoo server.
  2. Go to Apps → Update Apps List (to refresh available modules).
  3. Search for your module ("My First Module") and click Install.

🎉 Boom! You’ve just built and installed your first Odoo module.


What’s Next?

You’ve taken the first step into Odoo development! From here, you can:

  • Add more fields or models.
  • Create forms, kanban views, or reports.
  • Explore security rules and workflows.

Your Turn!

Try building a simple module (maybe a "Book Tracker" or "Expense Logger") and reply with:

  • What you built.
  • The biggest "Aha!" moment you had.

Happy coding! 🚀

Odoo Architecture Explained Simply