There are two ways to create your own mloda plugin from this template.
GitHub's template feature creates a new repository with all files but a clean commit history.
-
Click the green "Use this template" button on the repository page
-
Choose "Create a new repository"
-
Name your repository (e.g.,
acme-features,acme-data-plugins, ormycompany-feature-groups)Note: Please don't use "mloda" in your package or repository name. However, you can use formulations like "for mloda" or "mloda-compatible" in descriptions.
-
Choose public or private visibility
-
Click "Create repository"
Advantages:
- Clean commit history (starts fresh)
- No fork relationship to maintain
- Your repo is completely independent
- One-click setup in GitHub UI
Forking creates a copy that maintains a connection to the original repository.
- Click the "Fork" button on the repository page
- Choose your account or organization
- Name your forked repository
- Click "Create fork"
Advantages:
- Can pull updates from the original template
- Familiar workflow for open source contributors
Disadvantages:
- Maintains fork relationship (shows "forked from" on your repo)
- Copies entire commit history
- GitHub may suggest contributing back to the original
Regardless of which option you chose, follow the setup steps in the README to customize the template:
- Clone your new repository locally
- Rename the
placeholder/directory - Update
pyproject.toml - Update
.releaserc.yaml(changemloda-plugin-templateto your package name and updaterepositoryUrl) - Update Python imports
- Verify with
tox - Remove
CONTRIBUTING.md. it describes contributing to the template repo, not your plugin - Keep
CODE_OF_CONDUCT.md,AGENTS.md,CLAUDE.md, and.github/ISSUE_TEMPLATE/as inherited baselines; tune them later (contact email, placeholder paths, toolchain bullets) if you want - Configure repository settings on GitHub: see github-repository-settings.md for the secrets, branch protection, required checks, and dependabot reviewer that the inherited workflows expect
Once installed, your plugins are auto-discovered by mloda through entry points, so users reach them
via PluginLoader.all() with no manual import. customize.sh rewrites the [project.entry-points."mloda.*"]
manifest paths for you. When you add plugins, append the class to the matching manifest.py list; see
Plugin discovery for the resilient-import caveat when a plugin needs an
optional backend.