$npx skillfedfor your agent

psygnal

Fast python callback/event system modeled after Qt Signals

Worth itPyPI Software DevelopmentReleased Jan 20264.1M downloads / moBSD 3-Clause LicensePure Python

Decision gist · record as of 2026-08-14

pure-Python wheel — psygnal-0.15.1-py3-none-any.whl
v0.15.1 · released 2026-01-04 · Python >=3.10

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

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.
Same gist for agents: .md · .json

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.

Worth 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

LicenseBSD 3-Clause License permissive
Python supportSupports the current Python release >=3.10
Install frictionLow. Pure-Python wheel
Runtime dependenciesNone
MaintenanceActively maintained 222 days since the last release
Last repo commit
First released
Downloads4,126,967 / month, #2,376 on PyPI 30-day window, as of 2026-08-14
Known vulnerabilitiesNone 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

Capabilities
observer pattern pythonevent system callbacksqt signals without qtpublish subscribe patternsignal emit connectevent-driven architecturedataclass field change events
Topics
event-drivenobserver-patternreactive

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

typing-extensions Worth it
PyPI · Software Development · released Jul 2026

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.

PSF-2.0pure Python · 3.9+
1.9Bdownloads / mo
numpy Worth it
PyPI · Software Development · released Aug 2026

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.

BSD-3-Clause AND 0BSD AND MIT AND Zlib AND CC0-1.0compiled wheel · 3.12+
1.1Bdownloads / mo
fastapi Worth it
PyPI · Software Development · released Jul 2026

FastAPI is a Python web framework for building REST APIs using type hints, with automatic request validation, serialization, and interactive API documentation.

MITpure Python · 3.10+
568.6Mdownloads / mo
annotated-doc With conditions
PyPI · Software Development · released Jul 2026

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.

MITpure Python · 3.9+
456.2Mdownloads / mo
typer Worth it
PyPI · Software Development · released Aug 2026

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.

MITpure Python · 3.10+
369.3Mdownloads / mo
distlib With conditions
PyPI · Software Development · released Jun 2026

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.

permissive licensepure Python
323.3Mdownloads / mo

See also blinker · Events · Pypubsub · aiosignal · PyDispatcher · observable · pyventus · cysignals · pymitter · pysigset