⚠️ This repository is archived.Webhookah started as a Gotify plugin, but the plugin model turned out to be the wrong fit. The builder doesn't need to live inside Gotify — it doesn't modify Gotify, depend on its internals, or benefit from being bundled with it. As a plugin it's awkward to reach (buried in the plugin panel), requires a matching .so per Gotify version and architecture, and adds unnecessary build complexity. The tool itself is just a small web UI that generates curl commands and talks to Gotify's public API — it runs fine as a standalone app pointed at any Gotify instance.
The repo is archived for reference. You're welcome to fork it, rip out the plugin scaffolding, and run it as a plain web app. The core logic is all in plugin.go — the HTML, CSS, and JS embedded in serveBuilder is self-contained and straightforward to extract.
A Gotify plugin for building and testing webhook
curlcommands — with markdown support, domain override, and a UI that doesn't make you cry.
Gotify already lets you send per app messages via its interface. But generating the right curl command every time - remembering the app token, escaping the message, adding the right headers for markdown — is tedious.
Webhookah gives you a proper builder UI inside your Gotify instance:
- Picks up your apps automatically (no manual token pasting)
- Generates a ready-to-copy
curlcommand - Supports markdown messages via Gotify's
extrasAPI (sent as JSON body, which is the only way it seems to works) - Domain override field for generating commands pointing at a different host (e.g. your internal address)
- Test button that fires the message instantly from the browser
- Remembers your last values across sessions
- Go to the Releases page
- Download the
.sofile matching your Gotify server's architecture and version, e.g.:webhookah-linux-amd64-for-gotify-v2.9.1.so - Copy it to your Gotify plugins directory (default:
./data/plugins/) - Restart Gotify
- In the Gotify web UI, go to Plugins, find Webhookah, and click Enable
- Click the Open Webhook Builder link in the plugin's display panel
Note: The
.sofile must match the exact Go version and architecture Gotify was built with. If you're unsure, check your Gotify server's version and pick the matching release file.
Requirements: Go, Docker, Make
git clone https://github.com/barina/gotify-webhookah
cd gotify-webhookah
# Install gomod-cap (once)
go install github.com/gotify/plugin-api/cmd/gomod-cap@latest
export PATH=$PATH:$(go env GOPATH)/bin
# Build for all architectures
make GOTIFY_VERSION="v2.9.1" FILE_SUFFIX="-for-gotify-v2.9.1" buildOutput .so files will be in the ./build/ directory.
To build for a specific architecture only:
make GOTIFY_VERSION="v2.9.1" FILE_SUFFIX="-for-gotify-v2.9.1" build-linux-amd64Docker is required for cross-compilation. Make sure your user is in the
dockergroup (sudo usermod -aG docker $USER) so you don't need to runmakeas root.
- Open the builder via the link in the Webhookah plugin panel
- Select an app from the dropdown
- Fill in your message (required), title, and priority as needed
- Optionally enter a domain override to generate a command pointing at a different host
- Toggle Markdown on if your message contains markdown syntax — this switches the output to a JSON-body curl command with the correct
extrasheader that Gotify requires for markdown rendering - Copy the generated command or hit Test to send immediately
This plugin is provided as-is under the MIT license. It is not affiliated with or endorsed by the Gotify project.
The plugin reads your Gotify session token from localStorage to fetch your app list — this happens entirely within your browser and your own Gotify instance. No data is sent anywhere else.
Use at your own risk. The author takes no responsibility for misconfigured webhooks, flooded notification channels, or CI pipelines that page you at 3am.
This project was built with the assistance of AI. The plugin code, build tooling, and this README were developed through an iterative conversation as well as more sophisticated AI tools — debugging build issues, fixing the plugin API interface, and refining the UI together. The ideas, requirements, and final decisions are the author's; the AI helped write and troubleshoot the implementation.

