NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #287 most downloaded on PyPI
A rough port of Node.js's EventEmitter to Python with a few tricks of its own
Last release 1 months ago
13 Aug 2026
Release timing varies
gaps range from 1 weeks to 1.2 years
Most releases are documented
notes for 44 of 55 stable releases
Nothing withdrawn
no release was ever pulled
15 years old
55 releases · first in 2011
Move dev extras to dev dependency group
uv instead of pip-toolsdev extras to dev dependency groupCheck for listener's existence before attempting to remove it
One column per quarter.
Add None return type for functions as appropriate
ee.onNone return type for functions as appropriateself as Any in all methodsmypymypy type checking passespyright type checking passesmypy to development dependenciesiscoroutine
twisted.python.Failure
Handler type in pyee/__init__.pybuild.os is now a required parameter
build.os is now a required parameterpython.version is replaced by build.toolsUpdated changelog for v12 release to describe where to find alternatives to deprecated and removed imports
pyee.asyncio.AsyncIOEventEmitter:
wait_for_complete method to wait for all running handlers to completecancel method to cancel execution of all running handlerscomplete property that's True when no handlers are currently runningactions/setup-python to v5actions/setup-node to v4actions/upload-artifact to v4CONTRIBUTORS.md to include missing contributorsDeprecate direct use of PyeeException
pyee.BaseEventEmitterpyee.AsyncIOEventEmitterpyee.TwistedEventEmitterpyee.ExecutorEventEmitterpyee.TrioEventEmitterPyeeError which inherits from PyeeException, and use throughoutPyeeExceptionpyee.BaseEventEmitter
pyee.base.EventEmitter or pyee.EventEmitter insteadpyee.AsyncIOEventEmitter
pyee.asyncio.AsyncIOEventEmitter insteadpyee.TwistedEventEmitter
pyee.twisted.TwistedEventEmitter insteadpyee.ExecutorEventEmitter
pyee.executor.ExecutorEventEmitter insteadpyee.TrioEventEmitter
pyee.trio.TrioEventEmitter insteadPyeeError which inherits from PyeeException, and use throughoutPyeeException
PyeeError insteadAdd project URLs to pyproject.toml and PyPI
f25c052 : Format code (Josh Holbrook)
Bump development dependencies, thanks to dependabot
pyproject.toml in GitHub Actions- Require Python >= 3.8
Remove mention of Python 3.5 from documentation
pyproject.tomlRemove package.json/package-lock.json
.readthedocs.ymlDevelopment Environment Updates:
Development Environment Updates:
make to justpip to pip-toolsenvironment.yml updatedenvironment.yml not currently supportedPackaging Updates:
setup.py to pyproject.toml (still using setuptools)Documentation updates:
readthedocs (old theme not available in mkdocs)Testing and Linting Updates:
npx to run pyrightpyproject.toml linting with validate-pyprojectAPI Updates:
- Store AsyncIO Futures in a set
Development dependencies updated to latest
EventEmitter supports picklingAdd py.typed file to MANIFEST.in (ensures mypy actually respects the type annotations)
py.typed file to MANIFEST.in (ensures mypy actually respects the
type annotations)Improve type safety of EventEmitter#on, EventEmitter#add_listener and EventEmitter#listens_to by parameterizing the Handler
EventEmitter#on, EventEmitter#add_listener
and EventEmitter#listens_to by parameterizing the HandlerAdd tests_require to setup.py, fixing COPR build
tests_require to setup.py, fixing COPR buildenvironment.yml and
requirements_docs.txt, fixing Conda workflows and ReadTheDocs
respectivelyFix regression where EventEmitter#listeners began crashing when called with uninitialized listeners
EventEmitter#listeners began crashing when called
with uninitialized listenersNew EventEmitter.event_names() method (see PR #96)
Compatibility:
New features:
EventEmitter.event_names() method (see PR #96)pyrightpyee.cls module exposing an @evented class decorator
and a @on method decorator (see PR #84)Moved/deprecated interfaces:
pyee.TwistedEventEmitter -> pyee.twisted.TwistedEventEmitterpyee.AsyncIOEventEmitter -> pyee.asyncio.AsyncIOEventEmitterpyee.ExecutorEventEmitter -> pyee.executor.ExecutorEventEmitterpyee.TrioEventEmitter -> pyee.trio.TrioEventEmitterRemoved interfaces:
pyee.CompatEventEmitterDocumentation fixes:
BaseEventEmitterEventEmitter instead of BaseEventEmitter
throughoutDeveloper Setup & CI:
- Correct version in docs
Remove vcversioner dependency from docs build
Remove test_requires and setup_requires directives from setup.py (closing #82)
mainImprove thread safety in base EventEmitter
Update README to reflect new API
Create an alias for BaseEventEmitter with a deprecation warning
setup_requires vs tests_require now correct
Nothing published for this version
Update requirements and environment to pip -e the package
Support Python 3.8 by attempting to import TimeoutError from asyncio.exceptions
asyncio.exceptions- Some tweaks to the docs
Added a TrioEventEmitter class for intended use with trio
TrioEventEmitter class for intended use with trioAsyncIOEventEmitter now correctly handles cancellationspyee.uplift API for adding new functionality to
existing event emittersDeprecated EventEmitter (use one of the new classes)
BaseEventEmitter class which is entirely synchronous and
intended for simple use and for subclassingAsyncIOEventEmitter class for intended use with asyncioTwistedEventEmitter class for intended use with twistedExecutorEventEmitter class which runs events in an executorEventEmitter (use one of the new classes)CHANGELOG.md reformatted to CHANGELOG.rst
listeners method no longer returns the raw list of listeners, and
instead returns a list of unwrapped listeners; This means that mutating
listeners on the EventEmitter by mutating the list returned by
this method isn't possible anymore, and that for once handlers this method
returns the unwrapped handler rather than the wrapped handleronce API now returns the unwrapped handler in both decorator and
non-decorator casesFix bug in setup.py; Now publishable
- Add universal wheel
EventEmitter now inherits from object
Uses vcversioner for managing version information
Errors resulting from async functions are now proxied to the "error" event, rather than being lost into the aether.
Fix setup.py broken in python 2.7
Fix RST render warnings in README
Add README contents as long\_description inside setup.py
Drop support for pythons 3.2, 3.3 and 3.4 (support 2.7 and 3.5)
@ee.onMake copy of event handlers array before iterating on emit
Change URLs to reference jfhbrook
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →