A GitHub template for creating standalone mloda plugins. Part of the mloda ecosystem for open data access. Visit mloda.ai for an overview and business context, the GitHub repository for technical context, or the documentation for detailed guides.
Create your own FeatureGroups, ComputeFrameworks, and Extenders as standalone packages. See the Getting Started guide to create your repository, then follow the setup steps below.
-
mloda: The core library for open data access. Declaratively define what data you need, not how to get it. mloda handles feature resolution, dependency management, and compute framework abstraction automatically.
-
mloda-registry: The central hub for discovering and sharing mloda plugins. Browse community-contributed FeatureGroups, find integration guides, and publish your own plugins for others to use.
placeholder/
├── feature_groups/
│ └── my_plugin/
│ ├── __init__.py # Package exports
│ ├── my_feature_group.py # Example FeatureGroup implementation
│ └── tests/
│ └── test_my_feature_group.py
├── compute_frameworks/
│ └── my_framework/
│ ├── __init__.py
│ └── my_compute_framework.py
└── extenders/
└── my_extender/
├── __init__.py
└── my_extender.py
placeholder/- Root namespace (users rename to company name)pyproject.toml- Package config (users edit directly, not auto-generated).github/workflows/test.yml- CI workflow running pytest
Follow these steps to customize the template for your organization:
mv placeholder acmeEdit the following fields in pyproject.toml:
name: Change"placeholder-my-plugin"to"acme-my-plugin"authors: Update name and emaildescription: Update to describe your plugintool.setuptools.packages.find.include: Change["placeholder*"]to["acme*"]tool.pytest.ini_options.testpaths: Change["placeholder", "tests"]to["acme", "tests"]
Edit the following fields in .releaserc.yaml:
message: Changemloda-plugin-templateto your package name (e.g.,"chore(release acme-my-plugin): ${nextRelease.version}")repositoryUrl: Change to your repository URL
Update imports in these files (change from placeholder. to from acme.):
acme/feature_groups/my_plugin/__init__.pyacme/feature_groups/my_plugin/tests/test_my_feature_group.pyacme/compute_frameworks/my_plugin/__init__.pyacme/compute_frameworks/my_plugin/tests/test_my_compute_framework.pyacme/extenders/my_plugin/__init__.pyacme/extenders/my_plugin/tests/test_my_extender.py
uv venv && source .venv/bin/activate && uv sync --all-extras && toxInstall uv (if not already installed):
curl -LsSf https://astral.sh/uv/install.sh | shCreate virtual environment and install dependencies:
uv venv
source .venv/bin/activate
uv sync --all-extrasRun all checks with tox:
# Install tox with uv backend
uv tool install tox --with tox-uv
# Run all checks (pytest, ruff, mypy, bandit)
tox# Tests only
pytest
# Format check
ruff format --check --line-length 120 .
# Lint check
ruff check .
# Type check
mypy --strict --ignore-missing-imports .
# Security check
bandit -c pyproject.toml -r -q .Guides for plugin development can be found in mloda-registry:
Claude Code users can leverage the skills in mloda-registry for assisted plugin development:
This template includes pre-configured GitHub Actions workflows for testing, security scanning, and automated releases. See the GitHub Workflows documentation for setup instructions and required secrets.