Skip to main content

hatch-angee

The one published implementation of Angee's addon machinery: the build backend addon repos set as build-backend, and the library Angee's composer calls in-process (manifest parsing, discovery, dependency compilation, the generated pyproject block). An addon repo carries no hatch_build.py, no hook tables, and no dynamic of its own — the backend wires everything in.

# an addon repo's pyproject.toml — no Python hook code, no hook tables
[build-system]
requires = ["hatch-angee>=0.2"]          # pulls hatchling transitively
build-backend = "hatch_angee.build"

[project]
name = "vendor-crm"                      # the addon name, PEP 503-normalized (vendor.crm)
version = "0.1.0"
# no `dynamic = [...]` — the backend declares entry-points dynamic for you

[tool.hatch.build.targets.wheel]
packages = ["vendor"]                    # the import package(s) to ship

On a wheel/editable build the backend discovers every addon.toml in the repo (pruning node_modules, .venv, dist, …) and:

  • generates the angee.addons entry points (name -> import anchor) — the runtime enumerates these over uv.lock to list available addons;
  • ships each addon's web/, templates/, skills/ into the wheel at the addon's import path (vendor.crm → vendor/crm/...), layout-agnostic.

Backend config lives in [tool.hatch-angee]. addon-discovery selects project-relative roots to scan; omitting it preserves the whole-repository scan, while an empty list disables addon discovery for a core-only wheel. extra-web names glob roots of non-addon shared web packages (no addon.toml) to ship verbatim. A normal addon repo configures none.

[tool.hatch-angee]
addon-discovery = ["addons", "examples/addons"]

The library face

Angee's composer imports the same package in-process during angee build:

  • parse_manifest(path) → the validated AddonManifest (addon.toml vocabulary incl. dependencies — PEP 508 — and requires, the core compatibility floor);
  • discover(roots) → (addon_dir, manifest) pairs, caller root order = precedence, symlink-following with a cycle guard;
  • compile_dependencies(manifests) / check_requires(manifests, core_version);
  • write_block(pyproject, deps) → the generated [dependency-groups].addons key, comment-preserving, idempotent, atomically replaced.

The library face imports stdlib + packaging + tomlkit only — never hatchling or Django (tests/test_layering.py enforces it).

Escape hatch: explicit hatchling hooks

The same two hooks are also registered by name, so a repo that prefers plain hatchling can wire them itself instead of using the backend:

[build-system]
requires = ["hatchling", "hatch-angee>=0.2"]
build-backend = "hatchling.build"

[project]
dynamic = ["entry-points"]

[tool.hatch.metadata.hooks.angee-addons]
[tool.hatch.build.targets.wheel.hooks.angee-addon-sources]

Metadata

Release files for hatch-angee 0.2.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hatch-angee 0.2.4
File Size Uploaded Provenance
hatch_angee-0.2.4.tar.gz 54.7 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for hatch-angee 0.2.4
File Interpreter ABI Platform
hatch_angee-0.2.4-py3-none-any.whl Python 3 none any Details

Total release size: 81.6 kB

Release files / hatch_angee-0.2.4.tar.gz

Download URL hatch_angee-0.2.4.tar.gz
Size 54.7 kB
Tags Source
SHA-256 checksum
How to use checksums
55aa21e2cac8367cdf6073a70082f40733571770c093470fd5e985cb33422e6d
BLAKE2b-256 checksum
How to use checksums
3193fa464284dc19b9c422741b8bd3d12468333d91308ef49a1928e685e75603
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / hatch_angee-0.2.4-py3-none-any.whl

Download URL hatch_angee-0.2.4-py3-none-any.whl
Size 26.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a4367361e6ce4878dbe45777a4b70640e450a6096c0f7683483d306a7c0f10df
BLAKE2b-256 checksum
How to use checksums
d41a07695b75f8e02912c0688758b290e6e1b7d68d81f622e56bb6e8a9bf935f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Security for hatch-angee 0.2.4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page