No description
Find a file
2026-02-18 19:08:26 -08:00
.github fix corrupted arm64 binary, new release 2026-02-13 19:08:08 -08:00
.vscode WIP: rewrite in golang 2026-02-01 00:18:22 -08:00
assets using biome for html/cs/js formatting and linting, simplify app to run with no services, re-implement proton and signal implementations to be much better, configure all integration in web UI instead of .env 2026-02-09 01:19:47 -08:00
public new favicon 2026-02-18 19:08:26 -08:00
service new favicon 2026-02-18 19:08:26 -08:00
signal-cli fix corrupted arm64 binary, new release 2026-02-13 19:08:08 -08:00
.air.toml fix version in api/health response 2026-02-14 14:40:47 -08:00
.dockerignore using biome for html/cs/js formatting and linting, simplify app to run with no services, re-implement proton and signal implementations to be much better, configure all integration in web UI instead of .env 2026-02-09 01:19:47 -08:00
.env.example highlight the importance of a strong API key password 2026-02-14 13:31:23 -08:00
.gitattributes clean up emoji 2026-01-19 02:05:01 -08:00
.gitignore using biome for html/cs/js formatting and linting, simplify app to run with no services, re-implement proton and signal implementations to be much better, configure all integration in web UI instead of .env 2026-02-09 01:19:47 -08:00
.golangci.yml fix linting issues 2026-02-01 00:48:01 -08:00
biome.json split larger files into multiple, slim down biome config, dont retry for permanent errors, consistently use Link, new chi middleware to fix 401s hanging 2026-02-10 17:10:02 -08:00
docker-compose.yml persist signal-data when using docker compose, update docker command 2026-02-11 01:23:04 -08:00
Dockerfile fix version in api/health response 2026-02-14 14:40:47 -08:00
go.mod update deps 2026-02-10 17:29:33 -08:00
go.sum update deps 2026-02-10 17:29:33 -08:00
LICENSE init project 2026-01-13 22:10:12 -08:00
main.go fix version in api/health response 2026-02-14 14:40:47 -08:00
Makefile fix ci 2026-02-13 17:57:23 -08:00
README.md clean up unused admin routes, expose existing apps via new endpoint, update schema to allow an app to have many subscription channels 2026-02-15 21:19:40 -08:00
VERSION clean up unused admin routes, expose existing apps via new endpoint, update schema to allow an app to have many subscription channels 2026-02-15 21:19:40 -08:00

Prism Icon

Prism

Self-hosted notification gateway with email monitoring

SetupIntegrationsExamples

Prism is a self-hosted notification gateway. Prism can receive messages and route them to Signal, Telegram or WebPush URLs. Messages can be sent via webhooks or monitored from a Proton Mail account integration.

Setup

# Create .env file
curl -L -O https://raw.githubusercontent.com/lone-cloud/prism/master/.env.example
mv .env.example .env
nano .env  # Set API_KEY=your-secret-key-here

# Run Prism
docker run -d \
  --name prism \
  -p 8080:8080 \
  -v prism-data:/app/data \
  -v signal-data:/home/prism/.local/share/signal-cli \
  --env-file .env \
  ghcr.io/lone-cloud/prism:latest

Binary (Alternative)

# Download latest release
curl -L -O https://github.com/lone-cloud/prism/releases/latest/download/prism-linux-amd64
chmod +x prism-linux-amd64
mv prism-linux-amd64 prism

# Create .env file
curl -L -O https://raw.githubusercontent.com/lone-cloud/prism/master/.env.example
mv .env.example .env
nano .env  # Set API_KEY=your-secret-key-here

# Run Prism
./prism

Prism is now running at http://localhost:8080.

Prism Dashboard

Integrations

All integrations are configured through the web UI - no environment variables or command-line setup needed!

Authenticate using your API_KEY as the password (username can be anything).

Signal

Send notifications through Signal Messenger.

Setup:

  1. Visit http://localhost:8080 and authenticate with your API_KEY
  2. Expand the Signal integration card
  3. Click "Link Device"
  4. Scan the QR code with Signal on your phone:
    • Open Signal → Settings → Linked Devices → Link New Device
    • Scan the displayed QR code
  5. Your device will link automatically

All notifications will be sent via Signal.

Note: If running the binary directly (not Docker), you'll need signal-cli installed and in your PATH. Docker images include signal-cli automatically.

Telegram

Send notifications through a Telegram bot.

Setup:

  1. Create a bot:

    • Message @BotFather on Telegram
    • Send /newbot and follow the prompts
    • Copy the bot token
  2. Get your Chat ID:

    • Message @userinfobot on Telegram
    • Copy your Chat ID from the response
  3. Configure in Prism:

    • Visit http://localhost:8080 and authenticate with your API_KEY
    • Expand the Telegram integration card
    • Enter your bot token and chat ID
    • Click "Configure"

All notifications will be sent to your Telegram chat.

Proton Mail

Monitor a Proton Mail account and forward new emails as notifications through Signal or Telegram.

Features:

  • Monitors inbox for new emails in real-time
  • Supports 2FA-enabled accounts
  • Auto-creates "Proton Mail" app for received emails
  • Secure credential storage with AES-256-GCM encryption
  • Automatic token refresh - no re-authentication needed

Setup:

  1. Visit http://localhost:8080 and authenticate with your API_KEY
  2. Configure Signal or Telegram first (required for routing)
  3. Expand the Proton Mail integration card
  4. Enter your Proton Mail credentials:
    • Email address
    • Password
    • 2FA code (if enabled)
  5. Click "Link"

Proton Mail will connect and begin monitoring. New emails will appear as notifications from the "Proton Mail" app.

Note: Prism uses the official Proton Mail API (same as the Proton Bridge). Credentials are encrypted and stored locally. Tokens refresh automatically in the background.

WebPush

Send notifications directly to your browser.

Setup:

  1. Visit http://localhost:8080 and authenticate with your API_KEY
  2. Allow browser notifications when prompted
  3. Apps without Signal or Telegram configured will automatically use WebPush

You'll receive browser notifications when messages arrive.

Real-World Examples

Email Monitoring

Receive instant Signal or Telegram notifications when new emails arrive in your Proton Mail inbox.

Prism monitors your Proton Mail account using the official Proton API and forwards new emails as notifications. Perfect for monitoring important accounts without constantly checking email.

Home Assistant Alerts

Add a rest notification configuration (eg. add to configuration.yaml) to Home Assistant like:

notify:
  - platform: rest
    name: Prism
    resource: "http://<Your Prism server network IP>/Home Assistant"
    method: POST
    headers:
      Authorization: !secret prism_api_key

Since Home Assistant and Prism are both on your local network, HTTP is allowed automatically - no additional configuration needed.

Add your API_KEY to your secrets.yaml:

prism_api_key: "Bearer YOUR_API_KEY_HERE"

Reboot your Home Assistant system and you'll then be able to send Signal notifications to yourself by using this notify prism action.

Sending Notifications

Send notifications via HTTP POST to /{appName}:

JSON format:

curl -X POST http://localhost:8080/my-app \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title": "Alert", "message": "Something happened"}'

Plain text (ntfy-compatible):

curl -X POST http://localhost:8080/my-app \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d "Simple message text"

Messages are routed based on your app's subscriptions configured in the web UI. Apps can have multiple subscriptions (Signal + WebPush + Telegram) and will receive notifications on all configured channels.

Monitoring

Health Endpoints

GET /health

Public health check endpoint (no authentication required). Returns 200 OK when the service is running. Used for Docker health checks and load balancer health probes.

curl http://localhost:8080/health

GET /api/v1/health

Detailed health endpoint (requires authentication). Returns JSON with uptime and integration status:

curl http://localhost:8080/api/v1/health \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "version": "0.2.0",
  "uptime": "2h15m",
  "signal": {"linked": true, "account": "+1234567890"},
  "telegram": {"linked": true, "account": "123456789"},
  "proton": {"linked": true, "account": "user@proton.me"}
}

API Key Security

Your API_KEY is both the login password and the master encryption key for all integration credentials. Use a strong unique password. Changing it will make all encrypted credentials unrecoverable.