Until a stable v1 release, consult this list for any changes when upgrading to a newer commit.
have been deprecated. Log filtering can be done using the
logging.loggers config subsection,
whilst both the shell and database hooks have async variants that should be used instead.
Plug.send() should now return
Receipt instances rather than just the
message IDs. All built-in plugs have been updated, but you’ll need to update any custom plugs in
order to do the same.
[Admins] A new database hook has been introduced, providing much better performance for connecting to databases over a network. All built-in hooks have been updated to use it – if you’re using any of Local identity, Notes, Subscriptions or Sync, you need to add or replace your Database with the asynchronous variant.
If you’re using SQLite for your database, note also that the database URL protocol has changed:
apsw:/// (with three or more slashes), use
(two slashes, followed by a relative path, or an absolute path starting with a third slash).
[Admins] A breaking change was discovered in the Hangouts APIs, fixed upstream. This commit pins hangups to a working version.
[Developers] Each config
dict of a hook or plug is now observed for changes, and hooks are now
Hook.on_config_change() event to handle state changes (
will now save config files on change).
[Admins] The IRC plug has been significantly rewritten, with a more stable request/response handler and IRC puppeting support.
[Admins] The Docker image has been refactored to use a data volume. Usage instructions are now documented under Using Docker.
__main__.LocalFilter, used to restrict logging to internal messages whilst
excluding third-party libraries, has moved to
[Developers] Most of the runner code has moved from
[Admins] The preferred way to launch IMMP is now via the independent command
immp, rather than
running as a module.
[Developers] Schema validation now comes built-in for groups, plugs and hooks. Set the
schema attribute on your class to automatically validate input
config against your schema. See
Schema for the available API.
[Developers] Most built-in classes now make use of
__slots__ to restrict
the attributes available. This should help with a lower memory footprint when a large number of
messages are being processed.
[Developers] Messages sent directly to a
SyncPlug are now correctly yielded back out of
[Developers] As part of new support for static routes from the
WebHook, the order of
WebHook.context() has changed – route prefix first, and an additional path
argument to locate static files on disk.
ConfigProperty now takes the class spec first, and config key is optional
(derived from the attribute name if not provided).
[Developers] The metadata around sent messages (ID, channel, timestamp etc.) is now handled by the
Receipt class, where both this and
Message are now subclasses of
SentMessage. This replaces
SentMessage.empty. Assorted hook logic has been
updated to accept
AsyncShellHook now defaults to not providing a message buffer. The
buffer config value may be
None (no buffer),
0 (unlimited buffer), or an integer upper
[Developers] Timestamps on messages are now timezone-aware across all built-in plugs, typically in UTC. Hooks working in local time should convert message timestamps to naïve representations first.
IdentityHook was moved to
LocalIdentityHook, as part of a larger move
to create an identity framework. The new
WhoIsHook provides a who command to replace
id-show but across any identity providers.
[Developers] Other hooks may obtain identity information from any hook implementing