Skip to content

Development Standards

Last Updated: February 2026

Module Development Standards

File Structure

Every custom module should follow this structure:

sr_module_name/
  __init__.py
  __manifest__.py
  models/
    __init__.py
    main_model.py
  views/
    main_model_views.xml
  security/
    ir.model.access.csv
  static/
    src/
      components/          # OWL JS components
      scss/                # Stylesheets
    description/
      icon.png
  data/                    # Default data, sequences, etc.
  wizard/                  # Transient models for wizards

Manifest (__manifest__.py)

{
    "name": "SR Module Name",
    "version": "17.0.1.0.0",
    "category": "Category",
    "license": "LGPL-3",
    "summary": "One line description",
    "author": "Scott Recycling",
    "website": "https://scottrecycling.com",
    "depends": ["base", "other_module"],
    "data": [
        "security/ir.model.access.csv",
        "views/main_model_views.xml",
    ],
    "assets": {
        "web.assets_backend": [
            "sr_module_name/static/src/components/**/*",
        ],
    },
    "installable": True,
    "application": False,
}

Naming Conventions

Item Convention Example
Module directory sr_ prefix, snake_case sr_inventory_processing
Model name Dotted, lowercase sr.inventory.batch
Model class PascalCase SrInventoryBatch
View XML ID module.model_view_type sr_inventory.batch_form_view
Field names snake_case pickup_date
JS components PascalCase PickupBlastWidget