lets you send notifications to your own phone or desktop with minimal fuss. This is primarily useful for tracking the progress of long-running compute jobs.

Quick Start

Using this service requires JavaScript to be enabled.

How it Works

Each user of is assigned a channel, identified by a random string. Devices which support the Web Push API, including Chrome and Firefox for desktop and Android, can subscribe to notifications on a channel and show a pop-up notification. Other devices, such as iOS Safari, do not yet support the API needed for background notifications, but they can still be used to see a list of recent notifications.

Each channel has its own HTTP(S) endpoint. When you POST a message to that endpoint, relays it to every subscription on that channel. uses standard APIs for both sending and subscribing to notifications, which means that it can be used without installling any software. If you prefer, you can use the command-line tool and Python package to simplify integration with your workflow.


Command-line interface

The command-line interface and Python API are part of the notify-run Python package. You can install both using the pip package manager

pip install notify-run

Once it has been installed, you can register a new channel like so:

notify-run register

Alternatively, you can configure it to use a channel that already exists:

notify-run configure[channel name]

The configuration is stored in the ~/.config/notify-run file in your home directory. It will be picked up by subsequent runs of notify-run as well as the notify_run Python module.


When used inside a Jupyter notebook, the subscribe link is clickable and a QR code is displayed.


Notify includes a callback for Keras which sends a progress notification at the end of each epoch. After configuring an endpoint above, import NotifyCallback from notify_run.keras and pass it in the callback parameter to a Keras fit method.

from notify_run.keras import NotifyCallback
# model is a Keras model that you have created elsewhere., y, callbacks=[NotifyCallback()])


This public instance is freely provided for your convenience, but does not have an SLA and should not be used for notification messages containing private data. For more demanding use cases, you may prefer to run your own instance of the server on your own network.

Self-hosting is currently not documented, but have a look at the files here and feel free to reach out to me for guidance.

Issues and Questions

If you find bugs or have other questions, please file a bug report, send me an email, or tweet at me.