Skip to content

Releases: caronc/apprise

Release v1.9.7

20 Jan 18:41

Choose a tag to compare

What's Changed

Big changes of this release is we're back at 100% test coverage plus a new documentation source: https://AppriseIt.com

🐞 Bugfixes

  • discord:// improvements to ping= handling in #1470
  • Bugzilla 2424601 resolved - no NotifyType enum leaking in #1473
  • resolves reoccurring warning for GdkPixbuf in #1488
  • Improved Matrix room handling in #1492

💡 Features

  • Config YAML support for 'tags' (in addition to 'tag') in #1471
  • Improved response handling in #1472
  • Signal API support for "text_mode=styled" in #1487
  • Update LoC badge by @github-actions[bot] in #1495
  • Fix contribute link by @erik434 in #1496

❤️ Life-Cycle Support

  • 🔥 Adapt appriseit.com as new documentation source in #1486
  • Improved documentation surrounding tagging in #1489
  • improved on notification manger customization in #1490
  • 🚀 100% test coverage in #1491

New Contributors

  • @github-actions[bot] made their first contribution in #1495
  • @erik434 made their first contribution in #1496

Installation

Apprise is available on PyPI through pip:

# Install Apprise v1.9.7 from PyPI
pip install apprise==1.9.7

Full Changelog: v1.9.6...v1.9.7

Release v1.9.6

07 Dec 19:24

Choose a tag to compare

What's Changed

📣 New Notification Services:

🐞 Bugfixes

  • Updated RPM Spec file to fix rpmbuild errors on koji in #1421
  • Added py.typed back into repository and Manifest in #1426
  • fix(telegram): support <code> blocks wrapped in <pre> for syntax highlighting by @hmnd in #1423
  • Apprise API payload bugfix in #1428
  • Matrix room/alias accepted characters re-aligned - bugfix in #1442
  • fix parsing of USA callsigns--specifically different prefix/suffix counts like 1x2 and 1x3 calls by @NeilHanlon in #1418
  • dot:// setup_url to align with other apprise ones in #1449 (extension to #1445 in same release)
  • fixed handling of non-standard matrix:// ports in #1450
  • Fix Reply-To header variable consistency by @slavaGanzin in #1446

💡 Features

  • increase of Pushover attachment size to 5MB in #1427
  • Added basic support for ntfy Actions by @ivangrimaldi in #1436
  • feat(bark): Add 'call' parameter support to NotifyBark for ringtone r… by @HerbertGao in #1444
  • Improved TRUNCATE and SPLIT with smart text splitting in #1459
  • Added support for slack-gov.com to slack:// in #1463
  • Nextcloud group notification implementation by @dev-KingMaster in #1440
  • Resend plugin improvements adding improved support for name=, cc=, reply=, and to= in #1465
  • discord:// supports ping= feature now in #1466

❤️ Life-Cycle Support

  • EPEL10 GitHub workflow added - RPM Building in #1460 and #1451
  • Added additional test coverage for Apprise configuration parsing in #1454
  • Added additional workflow:// test case in #1458
  • Spelling mistakes + minor code alignment in #1439

New Contributors

Installation

Apprise is available on PyPI through pip:

# Install Apprise v1.9.6 from PyPI
pip install apprise==1.9.6

Full Changelog: v1.9.5...v1.9.6

Release v1.9.5

30 Sep 15:59

Choose a tag to compare

What's Changed

This is just a small release to bundle accumulated changes since v1.9.4.

📣 New Notification Services:

n/a

🐞 Bugfixes

  • pyobject availability does not impact glib testing in #1384
  • Fix test case to compare url ids by @emmanuel-ferdman in #1371
  • slack:// now has timestamp=yes/no kwarg support in #1394
  • Fix AppriseURLTester usage of meta["self"] by @LaFeev in #1412
  • Fix test_time_zoneinfo edge case by @LaFeev in #1411

💡 Features

  • Added support for discord:// flags=in #1409
  • Global Timezone support added (tz=) in #1398
  • feat: add icon field support for bark plugin by @HerbertGao in #1393
  • Add twilio phone calls support by @amanda-her in #1408

❤️ Life-Cycle Support

  • Add Power Automate (Workflows/MS Teams) alternative url support by @LaFeev in #1407
  • Environment improvments (updates to PR #1385) in #1395
  • PEM backend definitions handling for forwards compatability in #1410
  • build environment improvements in #1385
  • RUF059 linting fixes against codebase in #1413

New Contributors

Installation

Apprise is available on PyPI through pip:

# Install Apprise v1.9.5 from PyPI
pip install apprise==1.9.5

Full Changelog: v1.9.4...v1.9.5

v1.9.4

02 Aug 18:13

Choose a tag to compare

What's Changed

It has been some time since I pushed a release; so this one just bundles all of the outstanding fixes/enhancments together.

This release introduces a major refactor of the code base to modernize it (for Python v3.9+). The change added more then 13,000 lines of code and refactored 70,000 lines. It took a very, very long time to do, but I'm happy how things turned out. It should make it easier for others to adapt and add to the code base. This change also greatly improved the type hinting offered by the library. I debated marking this release v2.0.0 due to the signifgance of it, but will just bump the minor to catch any fallout from the change I may have overlooked.

Please don't hesitate to open a ticket if you find any issus at all.

📣 New Notification Services:

🐞 Bugfixes

  • Fix throttling in matrix plugin by @wolfgesbro in #1352
  • minor fixes lingering from PR #1368 in #1378
    • This is the major update identified in the Life-Cycle Support
  • bluesky resolve did custom domains in #1363
  • Update token regex on chanify by @edwinbernadus in #1325
  • Fix matrix v3 attachments by @privacyfr3ak in #1373
  • Minor typos and fixes in #1357
  • Improved Google Chat thread handling in #1376

💡 Features

  • Display SMTP host in debug mode by @emmanuel-ferdman in #1331
  • Support mailto://localhost (default user is root) in #1360
  • Dbus/Glib Python binding modernization + test refactoring in #1377

❤️ Life-Cycle Support

  • Add Codecov Test Analytics by @katia-sentry in #1321

  • Removed LunaSea as it's services are offline as of April 30th, 2025 in #1362

  • 🔥 Apprise Build System Modernization (PEP 621 / RPM CI) in #1368

    • Addresses Red Hat Bugzilla 2377453 filed against the Apprise RPM Build structure.
    • Replaced setup.py with pyproject.toml (setuptools.build_meta backend)
    • Replaced legacy dynamic keyword loading with static [project.keywords]
    • Added SPDX-compliant license (BSD-2-Clause)
    • Introduced tox -e release for full packaging lifecycle
    • Man page generation and translation compilation included in CI
    • Verified RPM builds using Fedora-compatible GitHub Actions
    • CI test matrix now supports Python 3.9–3.12, across Ubuntu, macOS, and Windows
    • .coverage files now consistently written to root; parallel coverage disabled for simpler merging
    • Artifact uploads now uniquely named per ${{ matrix.os }}-${{ matrix.python-version }}-${{ matrix.tox_env }}
    • tox.ini now supports clean qa, minimal, and release testing workflows
    • ruff linter applied to entire code-base
    • .pyi files dropped and type hinting integrated into main code base
  • Test coverge added to investigate ticket #1356 in #1358

  • EL9 RPM build container public; workflow fixed to accommodate in #1375

New Contributors

Installation

Apprise is available on PyPI through pip:

# Install Apprise v1.9.4 from PyPI
pip install apprise==1.9.4

Full Changelog: v1.9.3...v1.9.4

Release v1.9.3

30 Mar 19:51

Choose a tag to compare

What's Changed

It has been some time since I pushed a release; so this one just bundles all of the outstanding fixes/enhancments together.

📣 New Notification Services:

  • BlueSky Support Added in #1299
  • Added Resend Support in #1311

🐞 Bugfixes

💡 Features

  • Office 365 posts include subject and body now in #1274
  • Telegram messages leverage caption field when attachments in #1290
  • Extend options for plugin Seven by @matthiez in #1301
  • Ntfy.sh Internationalized URL support added for click= in #1312

❤️ Life-Cycle Support

  • Improved SMS transmission documentation in #1291
  • apprise.urls() bulletproofing/bugfix in #1302
  • Add option label for plugin seven by @matthiez in #1304
  • Minor and insignifigant changes (typos and alike) in #1218

New Contributors

Installation

Apprise is available on PyPI through pip:

# Install Apprise v1.9.3 from PyPI
pip install apprise==1.9.3

Full Changelog: v1.9.2...v1.9.3

Release v1.9.2

09 Jan 02:12

Choose a tag to compare

What's Changed

This is a mini release to tuck some of the recent changes requested so they're available to all.

💡 Features

  • discord:// now supports the kwarg of 'botname' in #1261
  • Better support for reverse-url construction containing whitespace in #1267

❤️ Life-Cycle Support

  • Updated reference to BSDv2 clause in RPM in #1260

🐞 Bugfixes

  • Resolved chanify:// naming confusion in #1266

Installation

Apprise is available on PyPI through pip:

# Install Apprise v1.9.2 from PyPI
pip install apprise==1.9.2

Full Changelog: v1.9.1...v1.9.2

Release v1.9.1

18 Dec 01:51

Choose a tag to compare

What's Changed

This is a very long over-due release that includes all of the accumulated changes in Apprise. Happy Holidays!

📣 New Notification Services:

  • Plivo Support Added in #143
  • Support for PGP Email Support (DeltaChat Compatible) #1205
  • Seven (SMS Provider) Added by @matthiez in #1242

💡 Features

  • Matrix Well Known URI Server Discovery #1198
  • Eliminated non-essential warning log in mailto:// parsing #1216
  • Improved voipms:// phone number parsing #1230
  • CLI environment variable over-ride support #1231
  • Unpin paho-mqtt version by @kruton in #1238
    • Note: This triggered returning issues with ?verify=no provided in Apprise URLs. This still continues to work with the previously pinned version of paho-mqtt < 2.0) but not with the newer versions. (see #802 for more details).
  • Improved hostname verification #1243
  • Bark - add critical level alert plus ?volume= argument by @pb8DvwQkfRR in #1239
  • Refactored Office 365 Plugin #1225
  • Refactored Apprise mailto:// and apprise.utils module #1255
  • feat: Add support for latest MSTeams webhook URL format by @anothermwilson in #1253
  • mmost:// supports legacy url webhooks (http://) #1258

❤️ Life-Cycle Support

  • Added disclaimer for AES-CBC-128 weakness with simplepush:// #1215
  • Fix print statement in test run function. by @tjni in #1220
  • Dropped Python v3.7 GH Action Test Support (deprecated) #1224
  • Removed python-xdist development dependency due to it not being used #1223
  • Remove Boxcar due to it no longer being available upstream #1222

🐞 Bugfixes

  • Remove duplicate entry for Burst SMS by @ksmarty in #1204
  • Matrix: Allow token only client API authorization with token parameter by @voc0der in #1236
  • Matrix Long Lived Token: Don't logout, and use UUIDv4 for transactionIds by @voc0der in #1249
  • miskey:// visibility flags updated #1257

New Contributors

Installation

Apprise is available on PyPI through pip:

# Install Apprise v1.9.1 from PyPI
pip install apprise==1.9.1

New Contributors 🎉

Full Changelog: v1.9.0...v1.9.1

Release v1.9.0

02 Sep 17:35

Choose a tag to compare

What's Changed

The largest change introduced in this build is the new Persistent Storage setup which will greatly reduce and optimize a lot of existing and new supported plugins.

📣 New Notification Services:

  • WxPusher Support Added in #1135

💡 Features

  • 🚀 ⭐ Persistent Storage in #1131 (more then 6,500+ lines of code added to the code base) 🔥
    • This feature is very big and better documented here. Some general details can also be found here on the main README.md file.
    • Long overdue, plugins can now safely cache some of the query results returned from upstream endpoints to disk. This saves the need to make future extra web requests later (overall causing a performance boost to Apprise).
    • It's a cache engine done right; content is contained, and those using the CLI can clean/reset it. You can also easily turn it off.
    • Not all plugins that can fully leverage this for it's added boost do so... *Yet*, but just give me some time and I'll get there.
  • mqtt:// support for publishing retain flag in #1185
  • SendGrid Attachment Support Added in #1190
  • Refactored base64 attachment handling in #1191

❤️ Life-Cycle Support

  • Documentation and CLI Tidying in #1187
  • Cleaner usage of Apprise CLI (0d19db8)
  • RPM Testing/Building Docker Containers smaller in size (1a2eecc and 1dc22e1) refs #948

🐞 Bugfixes

  • Fix typo in readme by @khaffner in #1176
  • Fix Telegram Thread/Topic handling in #1177
  • Fixed mattermost channel handling n #1180
  • Escape unsupported Telegram MarkdownV2 characters in #1181
    • Telegram MarkdownV2 has turned out to be a VERY different style of markdown. For consistency, the default telegram mode is version 1. Simply add ?format=markdown&mdv=v2 to your URL to change this.

Installation

Apprise is available on PyPI through pip:

# Install Apprise v1.9.0 from PyPI
pip install apprise==1.9.0

New Contributors 🎉

Full Changelog: v1.8.1...v1.9.0

Release v1.8.1

26 Jul 00:20

Choose a tag to compare

Details

A lot of new changes; this release was long overdue. It was really great to see so much user contribution this time around! Very impressive and much appreciated! 🎉

📣 New Notification Services:

  • Added Splunk/VictorOps Support (#1125)
  • Added Africas Talking Support (#1167)
  • Added Microsoft Power Automate / Workflows Support (MSTeams Successor) (#1172)
  • Add Société Française du Radiotéléphone (SFR) Support by @Anghille (#1132)

💡 Features

  • Slack supports <@userid> in message body (#1134)
  • Turn large ntfy messages into a attachments (#1136)
  • Refactored the way Notifiarr Discord users are mentioned (#1153)
  • OneSignal to support custom data in payload (#1163)
  • Twilio WhatsApp support added (#1173)
  • Allow json data in OneSignal template arguments by @phantom943 (#1171)

❤️ Life-Cycle Support

  • Refactor: update streamlabs.py by @eltociear (#1160)
  • Fixed series of pep8 fixes surfacinging in python 3.11 flake8 checks (#1149)
  • Drop support for Python v3.6 and EPEL 8 from Apprise (#1155)
  • setup.py deprecation workaround with --use-pep517 (#1168)

🐞 Bugfixes

  • Automatically increment Matrix v3 transaction IDs by @nmaggioni (#1128)
  • Slack files upload deprecation by @delenamalan (#1130)
  • Update token regex in ServerChan by @easychen (#1148)
  • Add missing % string in import failed trace message by @jpbede (#1151)
    • This will fix issues with Home Assistant
  • Fixes random matrix:// unittest failures (#1166)
  • fix: conversion html_to_text hr tags rstrip non string object by @fabiottini (#1162)

Installation

Apprise is available on PyPI through pip:

# Install Apprise v1.8.1 from PyPI
pip install apprise==1.8.1

New Contributors 🎉

Full Changelog: v1.8.0...v1.8.1

Release v1.8.0

11 May 20:34

Choose a tag to compare

Details

☝️ Attention Developers: there is a potential Breaking Change in this release. CLI users will not be impacted.

🛠️ Potential Breaking Change

PR #1119 involved the refactoring of all the internal file/module structure of the Apprise library. The hope is I didn't break anything in your source code 🙏 . The change was required in order to remain compatible with Python v3.11+ in conjunction with library importing and how it works under the hood. More details on the specific issue can be found here demonstrating it. The Python Issue I opened in reguards to this made it clear I needed to adapt the fix on my side and conform to a better file based structure.

The side effect of this massive change developers may see (if any at all) is just the way your import calls are made. If you always followed the examples provided on this GitHub project, you'll have no issues at all. However, if you got clever and leveraged some of the under-the-hood compontents Apprise is built upon, then you may have an issue. The good news is the ONLY thing impacted is the way you imported your libraries (they just slightly moved around). An example of this is someone who may have had:

# For example:
from apprise.plugins.NotifyEmail import NotifyEmail

# This has changed to :
from apprise.plugins.email import NotifyEmail

# All other object functionality has not changed at all

Documented imports still work perfectly (both before and after this major refactor) such as:

from apprise import Apprise
from apprise import AppriseAsset
# etc...

📣 New Notification Services:

n/a

💡 Features

  • Custom Plugin Attachment Support Enforced + Added Testing in #1115
  • Do not sanitize http:// attachment URLs (#1122)
    • This allows the successful fetching of very complicated http based Attachment URL's where the case sensitivity of the keys matter.
    • The side effect of this change, is built in switches like cache= become case sensitive too (e.g Cache= will no longer be parsed).

❤️ Life-Cycle Support

  • Enhancement: Refactor Test Code for Efficiency and Quality by @freddiewanah in #1100
  • 💣 Python Module Naming & Namespacing Harmonization by in #1119
    • This was a major change that eliminated ClassName.py to not include a class ClassName inside. Python has issues with import and unittest references when this is done. unittests break completely in Python v3.11 using this method making this massive refactoring essential.

🐛 Bugfixes

  • Added JSON Content-Type header to freemobile:// in #1109
  • Fix mailto://ip.addr support in #1114
  • clicksend:// authentication bugfix in #1121
  • Update Apprise API (apprise//) token length by @isometimescode in #1120

Installation

Apprise is available on PyPI through pip:

# Install Apprise v1.8.0 rom PyPI
pip install apprise==1.8.0

New Contributors