119 lines
4.1 KiB
Markdown
119 lines
4.1 KiB
Markdown
# ntfy
|
|
|
|
ntfy (pronounce: *notify*) is a super simple pub-sub notification service. It allows you to send desktop and (soon) phone notifications
|
|
via scripts. I run a free version of it on *[ntfy.sh](https://ntfy.sh)*. **No signups or cost.**
|
|
|
|
## Usage
|
|
|
|
### Subscribe to a topic
|
|
Topics are created on the fly by subscribing to them. You can create and subscribe to a topic either in a web UI, or in
|
|
your own app by subscribing to an [SSE](https://en.wikipedia.org/wiki/Server-sent_events)/[EventSource](https://developer.mozilla.org/en-US/docs/Web/API/EventSource),
|
|
or a JSON or raw feed.
|
|
|
|
Because there is no sign-up, **the topic is essentially a password**, so pick something that's not easily guessable.
|
|
|
|
Here's how you can create a topic `mytopic`, subscribe to it topic and wait for events. This is using `curl`, but you
|
|
can use any library that can do HTTP GETs:
|
|
|
|
```
|
|
# Subscribe to "mytopic" and output one message per line (\n are replaced with a space)
|
|
curl -s ntfy.sh/mytopic/raw
|
|
|
|
# Subscribe to "mytopic" and output one JSON message per line
|
|
curl -s ntfy.sh/mytopic/json
|
|
|
|
# Subscribe to "mytopic" and output an SSE stream (supported via JS/EventSource)
|
|
curl -s ntfy.sh/mytopic/sse
|
|
```
|
|
|
|
You can easily script it to execute any command when a message arrives. This sends desktop notifications (just like
|
|
the web UI, but without it):
|
|
```
|
|
while read msg; do
|
|
[ -n "$msg" ] && notify-send "$msg"
|
|
done < <(stdbuf -i0 -o0 curl -s ntfy.sh/mytopic/raw)
|
|
```
|
|
|
|
### Publish messages
|
|
Publishing messages can be done via PUT or POST using. Here's an example using `curl`:
|
|
```
|
|
curl -d "long process is done" ntfy.sh/mytopic
|
|
```
|
|
|
|
Messages published to a non-existing topic or a topic without subscribers will not be delivered later. There is (currently)
|
|
no buffering of any kind. If you're not listening, the message won't be delivered.
|
|
|
|
## Installation
|
|
Please check out the [releases page](https://github.com/binwiederhier/ntfy/releases) for binaries and
|
|
deb/rpm packages.
|
|
|
|
1. Install ntfy using one of the methods described below
|
|
2. Then (optionally) edit `/etc/ntfy/config.yml`
|
|
3. Then just run it with `ntfy` (or `systemctl start ntfy` when using the deb/rpm).
|
|
|
|
### Binaries and packages
|
|
**Debian/Ubuntu** (*from a repository*)**:**
|
|
```bash
|
|
curl -sSL https://archive.heckel.io/apt/pubkey.txt | sudo apt-key add -
|
|
sudo apt install apt-transport-https
|
|
sudo sh -c "echo 'deb [arch=amd64] https://archive.heckel.io/apt debian main' > /etc/apt/sources.list.d/archive.heckel.io.list"
|
|
sudo apt update
|
|
sudo apt install ntfy
|
|
```
|
|
|
|
**Debian/Ubuntu** (*manual install*)**:**
|
|
```bash
|
|
sudo apt install tmux
|
|
wget https://github.com/binwiederhier/ntfy/releases/download/v1.0.0/ntfy_1.0.0_amd64.deb
|
|
dpkg -i ntfy_1.0.0_amd64.deb
|
|
```
|
|
|
|
**Fedora/RHEL/CentOS:**
|
|
```bash
|
|
rpm -ivh https://github.com/binwiederhier/ntfy/releases/download/v1.0.0/ntfy_1.0.0_amd64.rpm
|
|
```
|
|
|
|
**Docker:**
|
|
```bash
|
|
docker run --rm -it binwiederhier/ntfy
|
|
```
|
|
|
|
**Go:**
|
|
```bash
|
|
go get -u heckel.io/ntfy
|
|
```
|
|
|
|
**Manual install** (*any x86_64-based Linux*)**:**
|
|
```bash
|
|
wget https://github.com/binwiederhier/ntfy/releases/download/v1.0.0/ntfy_1.0.0_linux_x86_64.tar.gz
|
|
sudo tar -C /usr/bin -zxf ntfy_1.0.0_linux_x86_64.tar.gz ntfy
|
|
./ntfy
|
|
```
|
|
|
|
## Building
|
|
Building ntfy is simple. Here's how you do it:
|
|
|
|
```
|
|
make build-simple
|
|
# Builds to dist/ntfy_linux_amd64/ntfy
|
|
```
|
|
|
|
To build releases, I use [GoReleaser](https://goreleaser.com/). If you have that installed, you can run `make build` or
|
|
`make build-snapshot`.
|
|
|
|
## TODO
|
|
- add HTTPS
|
|
- make limits configurable
|
|
- limit max number of subscriptions
|
|
|
|
## Contributing
|
|
I welcome any and all contributions. Just create a PR or an issue.
|
|
|
|
## License
|
|
Made with ❤️ by [Philipp C. Heckel](https://heckel.io), distributed under the [Apache License 2.0](LICENSE).
|
|
|
|
Third party libraries and resources:
|
|
* [github.com/urfave/cli/v2](https://github.com/urfave/cli/v2) (MIT) is used to drive the CLI
|
|
* [Mixkit sound](https://mixkit.co/free-sound-effects/notification/) (Mixkit Free License) used as notification sound
|
|
* [Lato Font](https://www.latofonts.com/) (OFL) is used as a font in the Web UI
|
|
* [GoReleaser](https://goreleaser.com/) (MIT) is used to create releases
|