psygnal
Fast python callback/event system modeled after Qt Signals
Decision gist · record as of 2026-08-14
Yes. Psygnal is production-stable, dependency-free, actively maintained, and solves a common architectural need (decoupled event notification) with a clean, familiar API. The zero-dependency design and low install friction make it a safe choice for projects of any size. No known security issues.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- Low friction: pure Python wheel with zero runtime dependencies, actively maintained with recent commits, and supports current Python versions (3.10–3.14).
License · maintenance · safety
BSD 3-Clause License (permissive) — BSD 3-Clause is permissive; you may use, modify, and distribute psygnal freely in commercial and private projects with minimal restrictions.
last release 2026-01-04 (222 days) · last repo commit 2026-08-03 · 132 stars
0 known vulnerabilities (OSV.dev, 2026-08-14) · 4,126,967 downloads/mo, #2,376 on PyPI
Alternatives
Verify before relying
from psygnal import Signal
class MyObject:
value_changed = Signal(str)
my_obj = MyObject()
@my_obj.value_changed.connect
def on_change(new_value: str):
print(f"Value: {new_value}")
my_obj.value_changed.emit('hello')- Whether the optional mypyc compilation is automatically applied in wheel distributions or requires manual build setup.
- Performance overhead of type checking relative to untyped signal emission.
- Thread-safety guarantees and behavior when signals are emitted from multiple threads concurrently.
What it is and what it does
Psygnal is a pure Python event system that lets you define signals on objects and connect callback functions to them. When a signal is emitted, all connected callbacks are invoked with the signal's arguments. It mimics Qt's signals-and-slots API but requires no Qt dependency, and includes optional runtime type checking to catch mismatched callback signatures.
The library also provides higher-level conveniences: an @evented decorator that automatically emits signals when dataclass fields change (compatible with standard dataclasses, attrs, and pydantic), and evented container types (EventedList, EventedDict, EventedSet) that emit signals on mutation. It has no external dependencies and is compiled with mypyc for performance, though a pure Python fallback is available.
Use it for
- Build reactive UIs or data models where UI components need to respond to state changes without tight coupling.
- Create plugin systems where plugins register callbacks to be notified of application events.
- Monitor mutations to data structures (lists, dicts, sets) and trigger side effects like logging or validation.
- Implement evented dataclasses that automatically notify listeners when fields are modified.
- Coordinate multi-threaded applications where one thread needs to signal completion or state changes to others.
Worth the install?
AI-flagged interpretation of the facts on this page. Verify before relying on it.
Yes.
Psygnal is production-stable, dependency-free, actively maintained, and solves a common architectural need (decoupled event notification) with a clean, familiar API. The zero-dependency design and low install friction make it a safe choice for projects of any size. No known security issues.
Install
psygnal on PyPI
Before you install
Low friction: pure Python wheel with zero runtime dependencies, actively maintained with recent commits, and supports current Python versions (3.10–3.14).
License in practice
BSD 3-Clause is permissive; you may use, modify, and distribute psygnal freely in commercial and private projects with minimal restrictions.
Quickstart
from psygnal import Signal
class MyObject:
value_changed = Signal(str)
my_obj = MyObject()
@my_obj.value_changed.connect
def on_change(new_value: str):
print(f"Value: {new_value}")
my_obj.value_changed.emit('hello')
Verify before relying
- Whether the optional mypyc compilation is automatically applied in wheel distributions or requires manual build setup.
- Performance overhead of type checking relative to untyped signal emission.
- Thread-safety guarantees and behavior when signals are emitted from multiple threads concurrently.
Package facts
| License | BSD 3-Clause License permissive |
| Python support | Supports the current Python release >=3.10 |
| Install friction | Low. Pure-Python wheel |
| Runtime dependencies | None |
| Maintenance | Actively maintained 222 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 4,126,967 / month, #2,376 on PyPI 30-day window, as of 2026-08-14 |
| Known vulnerabilities | None known OSV.dev, checked 2026-08-14 |
| Classifiers | Development Status :: 5 - Production/StableLicense :: OSI Approved :: BSD LicenseNatural Language :: EnglishProgramming Language :: Python :: 3Programming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.12Programming Language :: Python :: 3.13Programming Language :: Python :: 3.14Typing :: Typed |
Evidence: psygnal-0.15.1-py3-none-any.whl
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “qt signals without qt”
- psygnalPsygnal implements the observer pattern with a Qt-style signals API,…
- pytest-qtpytest-qt is a pytest plugin that provides fixtures and utilities to…
- qtmonacoEmbeds the Monaco Editor (VS Code's editor) into Qt applications with…
Give your agent the search over MCP, or paste the wish link into any chat.
More Software Development packages
Provides backported and experimental type hints for Python 3.9+, allowing use of newer typing features on older Python versions and enabling early experimentation with type system PEPs before they enter the standard library.
NumPy provides an N-dimensional array object and a comprehensive suite of mathematical, linear algebra, Fourier transform, and random number functions for scientific computing in Python.
FastAPI is a Python web framework for building REST APIs using type hints, with automatic request validation, serialization, and interactive API documentation.
Provides a way to document function parameters, class attributes, return types, and variables inline using Python's `Annotated` type hint syntax instead of traditional docstrings.
Typer builds command-line applications from Python functions using type hints, automatically generating help text, argument parsing, and shell completion.
Install it if you are building CLIs in Python.
Distlib provides low-level packaging utilities for building, distributing, and managing Python software—including metadata handling, version specifiers, wheel support, script installation, and dependency resolution.
See also blinker · Events · Pypubsub · aiosignal · PyDispatcher · observable · pyventus · cysignals · pymitter · pysigset