Launch-Alert

Launch-Alert

Docker app from hmallen's Repository

Overview

Rocket launch reminders on your phones and computers through ntfy. Sends an alert about 30 minutes before launches with a listed livestream, including a watch link. Follows delays and holds, retries failed notifications, and preserves reminder history across restarts. Set your own private ntfy topic and subscribe each device. Headless: configure this app in Unraid's container settings; no WebUI or published ports are required. Internet access and working device notification permissions are required. Launch times and push receipt can change.

Launch Alert for Unraid

This directory packages Launch Alert for Unraid's Docker manager and Community Applications. The app runs in the background and sends ntfy notifications 30 minutes before eligible rocket launches with livestreams. It has no web interface or published ports.

Public images are available at ghcr.io/hmallen/launch-alert:latest and ghcr.io/hmallen/launch-alert:1.0.0. You can install the template manually using the steps below. Availability in Community Applications requires submission and approval through its portal.

Install and test on your Unraid server

  1. Enable Docker in Unraid's Settings → Docker. Keep the server running and its clock synchronized, with outbound HTTPS access to ll.thespacedevs.com and your ntfy server.

  2. Download launch-alert.xml to /boot/config/plugins/dockerMan/templates-user/my-launch-alert.xml on the server. Create the templates-user directory if necessary. For an unpublished checkout, copy its templates/launch-alert.xml to that path instead.

  3. In Docker → Add Container, select the Launch-Alert user template. Enable Advanced View to inspect all settings.

  4. Set Private ntfy topic to a long, random value from a password manager. Subscribe your devices to that same topic in the ntfy app or at https://ntfy.sh/YOUR_TOPIC, then enable notification permissions and background delivery. Keep this topic private: anyone who knows an unprotected topic can subscribe and publish to it.

  5. Review the appdata path, notification server, lead time, and display timezone. Leave Display time zone blank to use your Unraid server's timezone, or enter an IANA timezone such as Europe/London for local times in messages.

  6. Apply the template, enable the container's Autostart switch, and inspect its logs. After the first successful schedule refresh, Docker health should become healthy.

  7. From the Unraid terminal, send a real test notification:

    docker exec Launch-Alert python -m launch_alert test-notification
    docker exec Launch-Alert python -m launch_alert status
    

    Verify receipt on every device while locked or idle. The container name in these commands must match the name in your template.

If the image has not been published yet, build a local image from a checkout on the Unraid server:

docker build -t launch-alert:local .

In the template, temporarily set Repository to launch-alert:local and install it using the steps above. This validates your local build; repeat the installation with the published GHCR image before submission.

Settings and persistent data

Template setting Default Purpose
Appdata /mnt/user/appdata/launch-alert Maps to /config; contains the SQLite state and delivery history.
ntfy server https://ntfy.sh Server used by both the service and your devices.
Private ntfy topic Required; blank Private random topic shared with your devices.
ntfy access token Empty Optional bearer token for authenticated publishing.
Reminder lead time (minutes) 30 Minutes before the latest scheduled launch time.
Schedule refresh interval (seconds) 300 Interval between launch schedule refreshes.
Display time zone Empty Uses Unraid's timezone; set explicitly to override. Scheduling uses UTC.
Maximum data age (seconds) 900 Stops reminders when schedule data becomes stale.

Advanced settings include an optional Launch Library API token. Masked token fields hide their display in the form; Unraid still stores the values in its container configuration. Protect the flash drive, appdata backups, and server access accordingly.

The template's --user=99:100 runs the process as Unraid's nobody:users. Unraid creates new appdata directories with the appropriate ownership; an existing directory must also be writable by that identity. If permissions need repair, stop the container and correct ownership on this app's directory only. There are no PUID or PGID variables.

When installing through Community Applications, Unraid may replace the declared appdata path with your configured appdata root plus the container name (for example, /mnt/user/appdata/Launch-Alert). Check the path shown before applying the template. A local user-template installation can retain the declared lowercase path.

Updates preserve the appdata directory. Stop the container before backing it up; retain its SQLite database to preserve reminder history and pending retries. Use one instance per database. Unraid's normal image update controls work once the image is public. Restart or recreate the container after changing its configuration.

The app's health endpoint stays inside the container; use Docker health and the status command above. An unhealthy status does not itself restart a container. Host outages and device push settings can prevent alerts; see device setup and reliability details, including Android background delivery and self-hosted ntfy's iOS requirements.

Tested compatibility

Release v1.0.0 was tested on Unraid 7.3.3 with Docker 29.8.2 on 2026-10-16, using the public latest image. Verification covered installation as UID 99/GID 100, read-only container operation, persistent appdata after restart, Docker health, live schedule refreshes, and ntfy publishing. Android notification delivery was confirmed while the device was locked after correcting its subscription settings.

Publish and submit to Community Applications

  1. Keep the source repository public at hmallen/launch-alert, including its MIT license, icon, ca_profile.xml, and template. Update the repository, maintainer, support, icon, and registry URLs together if publishing under another account.

  2. In GitHub Actions → Publish image → Run workflow, enter a version such as v1.0.0, or push a matching release tag. The workflow builds linux/amd64 and linux/arm64 images after verification. Stable versions update latest; prereleases such as v1.1.0-rc.1 publish only their full version tag. If the GHCR package is private after its first publication, set its visibility to Public in GitHub's package settings; a public source repository alone does not make its package public.

  3. Verify the release can be pulled without registry credentials. On a machine without saved GHCR credentials, run:

    docker pull ghcr.io/hmallen/launch-alert:latest
    

    Test each advertised architecture on suitable hardware. Install the published image through the template on a current Unraid release, confirm appdata permissions, restart persistence, health status, and delivery to locked devices, and record the Unraid version tested.

  4. Run the repository checks before submission:

    python3 tools/validate_unraid.py
    python3 -m unittest discover -s tests -v
    python3 tools/integration_smoke.py
    docker build -t launch-alert:unraid .
    python3 tools/unraid_smoke.py
    
  5. Use the Community Applications submission portal. Submit https://github.com/hmallen/launch-alert as the repository, follow the portal's Validate and Scan checks, address reported issues, then submit for review. Approval and availability in Apps are controlled by Community Applications. Follow the current official starter instructions if requirements change.

Suggested description for the submission:

Launch Alert sends ntfy notifications to phones and computers shortly before rocket launches that have a livestream. It follows Launch Library 2 schedule changes, persists delivery state in appdata, and retries temporary notification failures. The default lead time is 30 minutes. Requires a configured ntfy topic and an always-on server; no web interface or inbound ports are needed.

Use GitHub Issues for app support. Publishing the image, completing a real Unraid installation, and submitting the repository are release steps; they are not performed by the local validation scripts.

The template's beta flag was removed after the real Unraid installation and locked-device delivery tests passed. Local container smoke checks exercise permissions, appdata persistence, and health with fixtures; they do not contact the launch API or send real notifications.

Requirements

Outbound HTTPS access to ll.thespacedevs.com and your ntfy server. Subscribe your devices to the configured topic. Keep the Unraid server running and its clock synchronized.

Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/hmallen/launch-alert:latest
Last Updated2026-10-16
First Seen2026-10-16

Runtime arguments

Network
bridge
Shell
sh
Privileged
false
Extra Params
--user=99:100 --restart=unless-stopped --read-only --cap-drop=ALL --security-opt=no-new-privileges --tmpfs=/tmp:rw,noexec,nosuid,size=16m

Template configuration

AppdataPathrw

Persistent reminder history and retry state. Keep this folder across container updates.

Target
/config
Default
/mnt/user/appdata/launch-alert
ntfy serverVariable

HTTPS ntfy server. The default supports Android, iPhone, and desktop clients.

Target
NTFY_SERVER
Default
https://ntfy.sh
Private ntfy topicVariable

Required: enter your own long random topic and subscribe every device to it. Anyone who knows an unreserved public topic can read and publish to it. Do not reuse an example topic.

Target
NTFY_TOPIC
Reminder lead time (minutes)Variable

Send reminders this many minutes before the published launch time (1-1440).

Target
LEAD_MINUTES
Default
30
Display time zoneVariable

Optional IANA time zone, such as America/Chicago. Leave blank to use the Unraid server's time zone.

Target
DISPLAY_TIMEZONE
ntfy access tokenVariable

Optional bearer token for an authenticated ntfy server. Masking hides this value in the form; Unraid still stores it in the container configuration.

Target
NTFY_TOKEN
Schedule refresh interval (seconds)Variable

Keep 300 for the free Launch Library API (15 requests/hour per IP). Must be shorter than the maximum data age.

Target
POLL_SECONDS
Default
300
Maximum data age (seconds)Variable

Suppress notifications when schedule data is older than this. Must exceed the refresh interval (60-3600).

Target
MAX_DATA_AGE_SECONDS
Default
900
Launch Library access tokenVariable

Optional Launch Library 2 API token for a paid account.

Target
LL2_TOKEN
Database pathVariable

SQLite database in the persistent appdata mount.

Target
DB_PATH
Default
/config/launch-alert.sqlite3
Configuration fileVariable

Unraid supplies settings as environment variables.

Target
ENV_FILE
Default
/dev/null