# These three commands are all equivalent
pokem !RoomID:jackson.dev Backup failed!
pokem --room !RoomID:jackson.dev Backup failed!
curl --fail -d "Backup failed!" pokem.dev/!RoomID:jackson.dev

pokem Backup failed! # Will send to your configured default room
pokem error Backup failed! # Will send to your configured room named "error"
pokem --room error Backup failed! # Same as above

# It also accepts stdin as the room message
echo "Backup failed!" | pokem error # Sends to the room named "error"
cat README.md | pokem # Send the contents of a file to the default room

# Authentication
# Inside Matrix, you can set a pokempassword using the bot interface.
# If you do that, you won't be pinged at 3am by some rando, because even if
# They can guess your roomid, they'll still need to include the password like so:
curl --fail pokem.dev/roomid -d "poke the room" -H "Authentication: pokempassword"
pokem --auth pokempassword --room roomid poke the room

While writing Chaz and headjack, I realized that it would be pretty easy to build a self-hosted alternative to ntfy

So anyways, that led to building Pok’em (“Poke Them”)

Pok’em is a Matrix bot, that listens to HTTP requests, and from there pings a Matrix room. It’s available as a CLI app to send the notifications, but you can also just use curl

The goal here was just to build something super easy to self-host, while still keeping many of the design elements of ntfy. It supports some ntfy features, but only important ones…like emoji support.

If you don’t want to self-host, I also run a hosted bot @pokem:jackson.dev, its public interface is on pokem.dev

Key Features Link to heading

I added more features than necessary probably:

  1. Command Line and HTTP Interface: You can notify a Matrix room directly from the Pok’em CLI, or with HTTP using PUT/POST requests. So it’s easy to integrate in CI or from anywhere.

  2. No Service Needed: The Pok’em CLI tool can be used by itself without a server. As long as it has the Matrix login info it will log in and send the notification itself, no Pok’em server necessary.

  3. GUI Interface: When viewing with a browser, the service runs an HTTP site that takes in commands, see pokem.dev

  4. Users Control Readers: Matrix has its own Encryption and access controls. You invite the bot to your room, and you can control who gets access to that room.

  5. Users Control Writers: You can set authentication keys on each room, requiring the sender to include the auth key. That controls who can send messages into your room, so you don’t get some rando pinging your on-call room at 3am.

  6. Docker Support: It’s on Docker and has a tiny config file, but you also can just use my hosted pokem bot @pokem:jackson.dev.

If you want have questions, post on the repo or the public Matrix room: #pokem:jackson.dev.

Pokem Example Notifications