Signified
Documentation: https://dougmercer.github.io/signified
Source Code: https://github.com/dougmercer/signified
A fast, fully-typed Python library for reactive programming.
Getting started
pip install signified
Why care?
signified is a reactive programming library built around three data structures:
Signal[T]stores a mutable value of any Python typeT.Computed[T]calculates a read-only value of any Python typeT.Bindingis a stable handle that can switch between reactive sources.
This allows us to create a network of computation, where one value being modified can trigger other objects to update.
This allows us to write more declarative code, like,
x = Signal(3)
x_squared = x ** 2 # currently equal to 9
x.value = 10 # Will immediately notify x_squared, whose value will become 100.
Here, x_squared became a reactive expression (more specifically, a Computed object) whose value is always equal to x ** 2. Neat!
signified's Signal object gives us a container which stores a value, and Computed stores the current value of a function. In the above example, we generated the Computed object on-the-fly using overloaded Python operators like **, but we could have just as easily done,
from signified import computed
@computed
def power(x, n):
return x**n
x_squared = power(x, 2) # equivalent to the above
Together, these data structures allow us to implement a wide variety of capabilities. In particular, I wrote this library to make my to-be-released animation library easier to maintain and more fun to work with.
Dependencies come from reactive reads, not containment. Normal computed and
effect calls unwrap direct reactive arguments, while ordinary containers are
opaque. Call deep_unref inside a computation when recursive resolution is intended.
Use batch() to group writes and untracked() for reads without subscribing.
... what do you mean by "kind-of working type narrowing"?
Other reactive Python libraries don't really attempt to implement type hints (e.g., param).
signified is type hinted, including rebindable values.
from signified import Binding, Signal
a = Signal(1.0)
b = Binding(Signal(2))
reveal_type(a + b) # Computed[float]
We recommend Pyright for type inference; Pyrefly is usable with caveats. See Type Checkers for assessed versions and compatibility with ty and mypy.
Ready to learn more?
Checkout the docs at https://dougmercer.github.io/signified or watch my YouTube video about the library.
Metadata
Release files for signified 0.6.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| signified-0.6.1.tar.gz | 37.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| signified-0.6.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 79.0 kB
Release files / signified-0.6.1.tar.gz
| Download URL | signified-0.6.1.tar.gz |
|---|---|
| Size | 37.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
284a65fe0ee21f2ea2d358a21d8ef7ebff02c6932289438378d6147594774f3e
|
|
BLAKE2b-256 checksum How to use checksums |
175584720e085a9e7c5562cf3a546f01de4d751bb6e35ab95be8d0994bea2fb1
|
| 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 Sep 28, 2026.
Transparency logRelease files / signified-0.6.1-py3-none-any.whl
| Download URL | signified-0.6.1-py3-none-any.whl |
|---|---|
| Size | 41.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f54c1c9ef62cfa434d8490edf3964f11822cae77c0946e9d4f1350772dd61a13
|
|
BLAKE2b-256 checksum How to use checksums |
d16cf8ae57ade2e55b1babf123fd43ca68c2ce73f8b472a09fb55b95d82d92e6
|
| 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 Sep 28, 2026.
Transparency log