Skip to main content
tuliprox can send notifications when important events occur — playlist updates complete, errors are detected, watched groups change, or usage statistics are ready. Notifications are configured under the messaging key in config.yml.

Notification providers

messaging:
  notify_on:
    - info
    - stats
    - error
    - watch
  telegram:
    markdown: true
    bot_token: "<your bot token>"
    chat_ids:
      - "<chat id>"
      - "<chat id>:<thread id>"
Set markdown: true to send messages with Telegram’s MarkdownV2 formatting. Use the <chat id>:<thread id> syntax to post into a specific topic thread in a group.

notify_on events

The notify_on list controls which event types trigger notifications:
EventWhen it fires
infoGeneral informational messages, including successful playlist updates
statsUsage statistics after a playlist update completes
errorErrors during processing, streaming, or metadata resolution
watchA watched group changes (channels added, removed, or modified)
You can include any combination of these events. Leave notify_on empty to disable all notifications while keeping the provider config in place.

Message templates

tuliprox uses Handlebars to render notification messages. Templates have access to the following variables:
VariableTypeDescription
messagestringThe human-readable event description
kindstringThe event type (info, stats, error, watch)
timestampstringISO 8601 timestamp of the event
statsobjectPlaylist statistics (channel counts, group counts, etc.) — present for stats events
watchobjectGroup change details — present for watch events
processingobjectProcessing result details — present after playlist updates

Loading templates from files or URLs

Instead of embedding a template string inline, you can point tuliprox to a file or remote URL:
messaging:
  notify_on:
    - stats
  telegram:
    bot_token: "<token>"
    chat_ids:
      - "<chat id>"
    template: "file:///etc/tuliprox/templates/stats.hbs"
Supported URI schemes for templates:
SchemeExample
file://file:///etc/tuliprox/templates/update.hbs
http://http://config-server.internal/notify-template.hbs
https://https://config-server.example/notify-template.hbs

Watching groups for changes

The watch feature in a target monitors final group names and emits a watch notification whenever those groups gain or lose channels. Configure watch on a target in source.yml:
targets:
  - name: my_target
    output:
      - type: m3u
    watch:
      - 'FR - Movies \(202[34]\)'
      - 'FR - Series'
Each entry is a regex matched against the final group names after all processing has completed. When tuliprox detects a change in a watched group after a playlist update, it fires a watch notification through all configured providers.
The watch event in notify_on must be enabled for watch notifications to be delivered.

Web UI monitoring

The built-in Web UI provides real-time visibility into tuliprox’s state without any external tooling:
  • Active streams — see which channels are being streamed and by which users right now
  • User sessions — connected users, their priority, and connection counts
  • Playlist state — inspect the current processed playlist, group counts, and channel lists
  • Download manager — queue and monitor video downloads (when the video.download integration is enabled)
Enable the Web UI in config.yml:
web_ui:
  enabled: true
  user_ui_enabled: true
  auth:
    enabled: true
    issuer: tuliprox
    secret: "<jwt secret>"
    userfile: user.txt
The userfile contains one username:password_hash entry per line. Generate password hashes with:
tuliprox --genpwd
Set combine_views_stats_streams: true under web_ui to merge the stats and active-streams views into a single dashboard panel.

Full messaging example

This example sends info and error events to Telegram, and watch events to both Telegram and a custom REST endpoint:
messaging:
  notify_on:
    - info
    - stats
    - error
    - watch
  telegram:
    markdown: true
    bot_token: "123456:ABCDefgh..."
    chat_ids:
      - "-100123456789"
  rest:
    url: "https://hooks.example.com/tuliprox"
    method: POST
    headers:
      Content-Type: "application/json"

Build docs developers (and LLMs) love