Skip to main content

Notifig

Reactive typed configuration for Pydantic — a config tree that tells you what changed.

Notifig is a configuration library built on pydantic and pydantic-settings. You declare a config tree of nested sections; the library loads it from layered files (JSON/YAML/TOML), env vars and the CLI; and — the part nothing else offers — every write notifies the observers that care about it, so the runtime reacts to configuration changes instead of re-reading them.

The shape

from notifig import Config, ConfigSection


class ApiConfig(ConfigSection):
    url: str
    model: str | None = None


class Settings(Config):
    api: ApiConfig
  • Sections are components. A section is a ConfigSection — a nested model with its own fields, its own validation, and its own position in the tree. A module that owns a feature declares its own section; the config tree just names them.
  • Dynamic sections hold entries that type themselves. A DynamicSection[EntryType] instantiates a config block into an entry the moment the block arrives, and re-types it with set_type(name, model) when the model that owns it becomes known — a config file may hold settings for something not yet installed, and the entry waits, visible and editable, until it arrives.
  • Writes notify. Every mutation (set, unset, set_type, remove_type, plain section[name] = value) walks the change to every registered observer — above and below the changed section, two-way path matching — and runs it. Writes are sync and atomic; async observers' coroutines are handed back to the caller (set_and_wait is the one async def), and a plain assignment that would reach an async observer refuses loudly before changing anything (AsyncObserversNotCalled).
  • Sources layer. Files deep-merge (local over global), env vars and CLI flags override, and legacy keys are a hard break with an explicit map rather than a silent fallback.
settings.api.model = "new-model"  # sync observers run; async ones are returned
settings["api.url"] = "https://..."  # the same, by name


@settings.on_change("api.model")
def model_changed(section, changes):
    print("the model changed:", changes)

Status

Pre-release. The API is real and battle-tested inside its first application, but the standalone packaging, CI and test suite are being built here now.

Install

pip install notifig

Requires Python ≥ 3.13.

Metadata

Release files for notifig 0.1.0

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

Source distribution (sdist)

Source distribution for notifig 0.1.0
File Size Uploaded Provenance
notifig-0.1.0.tar.gz 69.5 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for notifig 0.1.0
File Interpreter ABI Platform
notifig-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 122.0 kB

Release files / notifig-0.1.0.tar.gz

Download URL notifig-0.1.0.tar.gz
Size 69.5 kB
Tags Source
SHA-256 checksum
How to use checksums
18f10d0ae494411ce53c23ad7d0ed09f187900142b7dc6ed25a92d53bdfe7efe
BLAKE2b-256 checksum
How to use checksums
3582b88ff4ff60e292b3167088da2947984d14342f927724eff259257ff8a31d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / notifig-0.1.0-py3-none-any.whl

Download URL notifig-0.1.0-py3-none-any.whl
Size 52.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
81f4397162b152bde9ac0a0769aa685320d8bdaa8b92e3bde1bfc23008dfbf34
BLAKE2b-256 checksum
How to use checksums
7cec59dfb3c344531acea511ab21d1defcc3f9e3bfe69980c3bc99889d05fc95
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Security for notifig 0.1.0

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for notifig-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

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