A Go port of Apprise - Push Notifications That Work with Everything
Features • Installation • Usage • Releases • Contributing
Latest parity report: GitHub Actions parity workflow
apprise-go is a Go port of Apprise by Chris Caron. It aims to provide the same powerful notification capabilities in a standalone, compiled binary with no runtime dependencies.
Note: This project is not affiliated with or endorsed by the upstream Apprise project.
- Multi-Platform Support: Send notifications to 100+ services
- Standalone Binary: No Python runtime required
- Cross-Platform: Linux, macOS, and Windows builds
- CLI Interface: Easy command-line usage
- Storage Support: Persistent notification configurations
- Schema Details: Full service configuration information
This port targets Apprise 2.1.0. The Go package has its own release version. The parity workflow compares schemas, URL validation, complete request sequences, formatting and retry behavior against that pinned Python reference.
AMQP supports both 0.9.1 and 1.0. Email and DeltaChat support PGP/MIME with local
keys or Web Key Directory discovery. The USB blink1 provider remains outside
the pure Go build; see the development runbook for validation scope.
Download the latest release for your platform from the Releases page.
# Download and extract (replace VERSION with the latest version)
curl -LO https://github.com/unraid/apprise-go/releases/download/vVERSION/apprise-go-darwin-arm64.zip
unzip apprise-go-darwin-arm64.zip
chmod +x apprise-go
sudo mv apprise-go /usr/local/bin/# Download and extract (replace VERSION with the latest version)
curl -LO https://github.com/unraid/apprise-go/releases/download/vVERSION/apprise-go-linux-amd64
chmod +x apprise-go-linux-amd64
sudo mv apprise-go-linux-amd64 /usr/local/bin/apprise-goDownload the .exe file from the Releases page and add it to your PATH.
git clone https://github.com/unraid/apprise-go.git
cd apprise-go
go build -o apprise-go ./cmd/apprisepackage main
import (
"log"
apprise "github.com/unraid/apprise-go"
)
func main() {
client := apprise.New()
if err := client.Add("discord://webhook_id/webhook_token"); err != nil {
log.Fatal(err)
}
if err := client.Send(
"Something happened!",
apprise.WithTitle("Alert"),
apprise.WithNotifyType(apprise.NotifyWarning),
); err != nil {
log.Fatal(err)
}
}For one-off sends, use apprise.Send(urls, body, options...).
# Send a simple notification
apprise -b "Hello from apprise!" "discord://webhook_id/webhook_token"# Send to multiple services at once
apprise -b "Multi-platform notification" "discord://..." "slack://..."# Add a title to your notification
apprise -t "Alert" -b "Something happened!" "discord://..."# Get full Apprise schema as JSON
apprise --schema
# Print details about all supported services
apprise --details# Store and reuse configurations
apprise --storage-path /path/to/config -b "Using saved config"apprise-go supports Apprise-style TEXT and YAML configuration files. YAML tagged URLs should use the upstream mapping form where the URL has a trailing colon:
version: 1
groups:
now: my_now_pers
urls:
- tgram://token_id/chat_id/?format=markdown&mdv=v1:
tag: my_now_persDo not put tag under a bare scalar URL; that is not valid YAML and will not be
loaded as a tagged Apprise URL.
The latest stable release can always be found on the GitHub Releases page.
Each release includes:
- Pre-built binaries for multiple platforms:
apprise-go-darwin-amd64.zip- macOS Intel (signed & notarized)apprise-go-darwin-arm64.zip- macOS Apple Silicon (signed & notarized)apprise-go-linux-amd64- Linux AMD64apprise-go-linux-arm64- Linux ARM64apprise-go-linux-386- Linux 32-bitapprise-go-linux-armv7- Linux ARMv7 (Raspberry Pi, etc.)apprise-go-windows-amd64.exe- Windows AMD64apprise-go-windows-arm64.exe- Windows ARM64apprise-go-windows-386.exe- Windows 32-bitapprise-go-freebsd-amd64- FreeBSD AMD64apprise-go-freebsd-arm64- FreeBSD ARM64
- Source code (zip and tar.gz)
- SHA256 checksums for verification
This project maintains its own semantic versioning independent of upstream Apprise. Compatibility with the upstream caronc/apprise project is tracked via internal/version.UpstreamVersion.
All notable changes are documented in CHANGELOG.md. The changelog follows the Keep a Changelog format.
Releases are automated through GitHub Actions:
- Version bumps and changelog updates use Knope
- The release workflow builds, signs (macOS), and notarizes (macOS) binaries
- Assets are automatically uploaded to GitHub Releases
- Upstream version parity is tracked via automated checks
See PROCESS.md for detailed release procedures.
apprise-go/
├── cmd/ # Command-line application
├── internal/ # Internal Go packages
├── assets/ # Default notification icons and themes
├── dist/ # Build output directory
├── scripts/ # Build and release scripts
├── .github/ # GitHub Actions workflows
├── CHANGELOG.md # Version history and changes
├── PROCESS.md # Development and release processes
├── AGENTS.md # Agent configuration documentation
└── README.md # This file
- Upstream Apprise is created by Chris Caron and licensed under the BSD 2-Clause License
- This project reimplements Apprise behavior in Go and includes modifications
- See LICENSE for the full license text
- See NOTICE.md for additional attribution information
Contributions are welcome! Please see PROCESS.md for development guidelines and the release process.
# Clone the repository
git clone https://github.com/unraid/apprise-go.git
cd apprise-go
# Build the project
go build -o apprise-go ./cmd/apprise
# Run tests
go test ./...- Issues: Report bugs or request features via GitHub Issues
- Upstream Apprise: For questions about the original Python project, see caronc/apprise
- caronc/apprise - The original Python implementation
- caronc/apprise-api - RESTful API for Apprise
Made with ❤️ by the developers of Unraid