{"id":1333,"library":"apprise","title":"Apprise: Universal Push Notifications","description":"Apprise is a Python library that provides a common, simple interface for sending push notifications to almost any platform. It supports a vast array of services, including Slack, Discord, email, SMS, Telegram, and many more, allowing developers to integrate notifications without platform-specific code. It maintains an active development pace with several releases per year, continuously adding new services and improving existing ones. The current version is 1.9.9.","status":"active","version":"1.9.9","language":"python","source_language":"en","source_url":"https://github.com/caronc/apprise","tags":["notifications","alerts","messaging","integrations","email","sms","chat"],"install":[{"cmd":"pip install apprise","lang":"bash","label":"Base installation"},{"cmd":"pip install 'apprise[all]'","lang":"bash","label":"With all optional dependencies for all services"}],"dependencies":[{"reason":"Core dependency for HTTP communication with notification services.","package":"requests"},{"reason":"Optional: For HTML parsing capabilities.","package":"lxml","optional":true},{"reason":"Optional: For Markdown rendering.","package":"markdown","optional":true},{"reason":"Optional: For converting HTML to plain text.","package":"html2text","optional":true},{"reason":"Optional: For image resizing and manipulation, used by some services.","package":"pillow","optional":true},{"reason":"Optional: For loading Apprise configuration from YAML files.","package":"pyyaml","optional":true}],"imports":[{"note":"While 'import apprise' works, importing Apprise directly is idiomatic and clearer.","wrong":"import apprise; apobj = apprise.Apprise()","symbol":"Apprise","correct":"from apprise import Apprise"},{"symbol":"AppriseAsset","correct":"from apprise import AppriseAsset"}],"quickstart":{"code":"import apprise\nimport os\n\n# Create an Apprise instance\napobj = apprise.Apprise()\n\n# Add a service URL.\n# Use a real service URL or a dummy one like 'pypi://' for stdout output.\n# Example for Slack: 'slack://tokenA/tokenB/tokenC'\n# Example for Telegram: 'tgram://bottoken/chatid'\n# Replace with your actual URL. Using os.environ.get for security.\nslack_url = os.environ.get('APPRISE_SLACK_URL', 'pypi://')\napobj.add(slack_url)\n\n# Send a notification\napobj.notify(\n    body='Hello from Apprise!',\n    title='Apprise Quickstart',\n    notify_type='info' # info, success, warning, failure\n)\n\nprint(f\"Notification sent (or printed to stdout if using pypi://): {slack_url}\")\n\n# Example with a file attachment (requires AppriseAsset and a valid service)\n# from apprise import AppriseAsset\n# try:\n#    with open('example.txt', 'w') as f:\n#        f.write('This is an example attachment.')\n#    apobj.add('mailto://user@example.com') # Example service supporting attachments\n#    apobj.notify(\n#        body='Message with an attachment.',\n#        attach=AppriseAsset('example.txt')\n#    )\n# except IOError: # mailto will silently fail without a server\n#    print(\"Could not create example.txt or send attachment.\")\n","lang":"python","description":"This quickstart demonstrates how to initialize Apprise, add a notification service URL, and send a basic notification. It also shows how to include a dummy URL for testing output to stdout. For real services, replace `APPRISE_SLACK_URL` with your actual service URL, retrieved from environment variables for security. Remember to install extra dependencies if your chosen service requires them."},"warnings":[{"fix":"Ensure your environment uses Python 3.9 or newer. Review your code for any reliance on internal APIs or behaviors that might have changed during the refactor.","message":"Version 1.9.4 introduced a major code refactor for Python 3.9+ compatibility. While efforts were made to maintain backward compatibility, users running older Python versions (pre-3.9) might experience unexpected behavior or require adjustments to their code.","severity":"breaking","affected_versions":">=1.9.4"},{"fix":"Install Apprise with the specific extras needed for your services (e.g., `pip install 'apprise[slack,telegram]'`) or install all optional dependencies with `pip install 'apprise[all]'`.","message":"Many notification services have specific optional dependencies that are not installed by default with `pip install apprise`. Forgetting to install these can lead to runtime `ImportError` exceptions when trying to use certain services.","severity":"gotcha","affected_versions":"All"},{"fix":"Always refer to the official Apprise documentation (AppriseIt.com) for the correct URL syntax and required parameters for each service. Utilize environment variables or a secure configuration management system for sensitive credentials.","message":"Notification service URLs are critical for Apprise functionality. Incorrectly formatted URLs, missing authentication tokens, or invalid endpoints are common sources of errors that can prevent notifications from being sent.","severity":"gotcha","affected_versions":"All"},{"fix":"Initialize `Apprise` once, typically at application startup, and reuse the `apobj` instance for all subsequent notifications. Call `apobj.add()` for each unique service URL.","message":"The `Apprise` object is designed to be initialized once and reused throughout your application's lifecycle. Repeatedly creating new `Apprise` instances (e.g., inside a loop or for every notification) can lead to unnecessary overhead and inefficient resource usage.","severity":"gotcha","affected_versions":"All"}],"env_vars":null,"last_verified":"2026-05-20T04:46:33.661Z","next_check":"2026-07-08T00:00:00.000Z","problems":[{"fix":"Install the module using pip: 'pip install apprise'.","cause":"The 'apprise' module is not installed in the Python environment.","error":"ModuleNotFoundError: No module named 'apprise'"},{"fix":"Use the correct import: 'from apprise import Apprise'.","cause":"Incorrect import statement; 'Apprise' is a class within the 'apprise' module.","error":"AttributeError: module 'apprise' has no attribute 'Apprise'"},{"fix":"Ensure to pass the 'body' argument: 'apobj.notify(body='Your message here')'.","cause":"The 'notify()' method requires at least the 'body' argument to be provided.","error":"TypeError: notify() missing 1 required positional argument: 'body'"},{"fix":"Verify and correct the URL format and credentials: 'apobj.add('mailto://user:pass@example.com')'.","cause":"The notification service URL is incorrectly formatted or contains invalid credentials.","error":"ValueError: Invalid URL: 'mailto://user:pass@example.com'"},{"fix":"Ensure an event loop is running: 'import asyncio; asyncio.run(main())'.","cause":"Attempting to use asynchronous methods without an active event loop.","error":"RuntimeError: There is no current event loop in thread 'Thread-2'."}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":null,"quickstart_tag":null,"pypi_latest":"1.10.0","cli_name":"apprise","cli_version":"Apprise v1.10.0","type":"library","homepage":"https://appriseit.com","github":"https://github.com/caronc/apprise","docs":"https://appriseit.com","changelog":null,"pypi":"https://pypi.org/project/apprise/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null,"categories":["communication"],"install_checks":{"last_tested":"2026-05-20","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","installed_version":"1.10.0","pypi_latest":"1.10.0","is_stale":false,"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.72,"mem_mb":12.9,"disk_size":"33.5M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.72,"mem_mb":12.8,"disk_size":"32.8M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"apprise","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.72,"mem_mb":12.9,"disk_size":"33.5M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"apprise","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.7,"mem_mb":12.8,"disk_size":"32.8M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3,"import_time_s":0.66,"mem_mb":12.9,"disk_size":"35M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.72,"mem_mb":12.8,"disk_size":"34M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"apprise","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3,"import_time_s":0.66,"mem_mb":12.9,"disk_size":"35M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"apprise","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.72,"mem_mb":12.8,"disk_size":"34M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.14,"mem_mb":14.3,"disk_size":"37.5M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.25,"mem_mb":14.3,"disk_size":"36.7M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"apprise","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.12,"mem_mb":14.3,"disk_size":"37.5M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"apprise","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.24,"mem_mb":14.3,"disk_size":"36.7M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3,"import_time_s":1.01,"mem_mb":14.3,"disk_size":"39M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.97,"mem_mb":14.3,"disk_size":"38M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"apprise","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3,"import_time_s":1.03,"mem_mb":14.3,"disk_size":"39M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"apprise","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.02,"mem_mb":14.3,"disk_size":"38M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.15,"mem_mb":14.4,"disk_size":"29.0M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.22,"mem_mb":14.4,"disk_size":"28.1M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"apprise","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.19,"mem_mb":14.4,"disk_size":"29.0M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"apprise","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.25,"mem_mb":14.4,"disk_size":"28.1M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.8,"import_time_s":1.2,"mem_mb":14.4,"disk_size":"30M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.26,"mem_mb":14.4,"disk_size":"29M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"apprise","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.8,"import_time_s":1.22,"mem_mb":14.4,"disk_size":"30M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"apprise","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.34,"mem_mb":14.4,"disk_size":"29M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.11,"mem_mb":14.7,"disk_size":"28.8M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.31,"mem_mb":14.7,"disk_size":"27.8M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"apprise","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.11,"mem_mb":14.7,"disk_size":"28.8M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"apprise","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.21,"mem_mb":14.7,"disk_size":"27.8M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3,"import_time_s":1.15,"mem_mb":14.7,"disk_size":"30M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.25,"mem_mb":14.7,"disk_size":"29M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"apprise","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.9,"import_time_s":1.13,"mem_mb":14.7,"disk_size":"30M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"apprise","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.36,"mem_mb":14.7,"disk_size":"29M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.49,"mem_mb":12.7,"disk_size":"32.9M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.52,"mem_mb":12.7,"disk_size":"32.3M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"apprise","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.49,"mem_mb":12.7,"disk_size":"32.9M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"apprise","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.56,"mem_mb":12.7,"disk_size":"32.3M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.6,"import_time_s":0.48,"mem_mb":12.7,"disk_size":"34M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.46,"mem_mb":12.7,"disk_size":"33M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"apprise","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.6,"import_time_s":0.47,"mem_mb":12.7,"disk_size":"34M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"apprise","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.53,"mem_mb":12.7,"disk_size":"33M"}]},"quickstart_checks":{"last_tested":"2026-04-24","tag":null,"tag_description":null,"results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]},"_links":{"self":"https://checklist.day/api/registry/apprise","v1":"https://checklist.day/v1/registry/apprise","v1_install":"https://checklist.day/v1/registry/apprise/install","v1_imports":"https://checklist.day/v1/registry/apprise/imports","v1_compatibility":"https://checklist.day/v1/registry/apprise/compatibility","v1_quickstart":"https://checklist.day/v1/registry/apprise/quickstart","docs":"https://checklist.day/docs"}}