Free PaaS/container hosting for self-hosted ntfy

Checked 2026-09-01 UTC. “Free” means an ongoing $0 allowance, not merely an introductory credit. Prices, quotas, regions, and capacity can change; confidence below reflects how directly the provider’s current official pages support the conclusion.

Executive conclusion

ntfy’s relevant requirements are unusually important here: its default cache/auth/web-push state is file/database-backed, attachments need storage, and clients use long-lived HTTP streams or WebSockets. The official configuration supports PostgreSQL via database-url and S3-compatible attachment storage via attachment-cache-dir; this can make a stateless container viable, but it does not make a sleeping service reliable.

Comparison

Provider What is actually free Persistence Ports / sleep ntfy assessment Confidence
Northflank Developer Sandbox: 2 free services, 1 free database, 2 free cron jobs; pricing says always-on compute/no sleeping. Ephemeral container storage is lost on restart. Persistent volumes exist, but the free-plan inclusion/pricing is not explicit; use the advertised free database addon for ntfy’s PostgreSQL backend. Public HTTP/HTTP2 ports are supported and route through HTTPS; arbitrary container ports are allowed. No sleep in Sandbox. Best PaaS candidate, if the free database addon is available with an adequate limit. Put auth/cache state in PostgreSQL; avoid local attachments or use S3. High for free service/no sleep/ports; medium for exact free DB limits.
Render Genuine ongoing $0 Free web service; 750 free instance-hours per workspace/month. Free web services have ephemeral filesystems; free web services cannot attach persistent disks. Free Postgres is 1 GB but expires after 30 days, then is deleted after a grace period. Public HTTP/HTTPS via one forwarded port; bind 0.0.0.0:$PORT (default 10000). Free web services spin down after 15 minutes without inbound traffic and take about a minute to restart. Demo only standalone. A sleeping ntfy server breaks/restarts long-lived subscribers and loses SQLite/local files. External PostgreSQL plus S3 fixes persistence, not availability. High
Koyeb Current official pricing UI shows “Free 5h”, $0/hr and $0/mo, 0.25 vCPU, 1 GB RAM, and 1 GB local storage; the FAQ refers to an included monthly free credit. This is a quota, not a trial credit, but the page is not clear about the “5h” cadence. Free/eco instances cannot attach Koyeb volumes. Local storage is ephemeral. Volumes are 1–10 GB, public preview, and only attach to standard/GPU services. Public HTTP service with explicit exposed port and injected PORT. The Free instance automatically scales to zero after 1 hour without traffic; it cannot be disabled. Not suitable for always-available ntfy. It can host a test or an externally-backed service, but cold starts and scale-to-zero are poor for subscriptions. Medium on the exact free-quota interpretation; high on persistence/sleep behavior.
Fly.io No ongoing free tier for new accounts. Current trial is 2 total VM-hours or 7 days, whichever comes first; trial Machines auto-stop after 5 minutes. Trial includes up to 20 GB volume storage, but after trial Fly Volumes are billed ($0.15/GB-month). Volumes are persistent but single-host/single-Machine and not replicated automatically. Public HTTP/HTTPS/TCP services and free shared IPv4/IPv6 are supported. Machines can stop/start, but paid compute is required after trial. Not free. Technically a good low-cost ntfy host once billing is accepted; use a volume and backups. High
Railway Official current pricing page says Free is $0 but says “30-day free trial with $5 credits, then $1 per month.” Current reference docs instead say Free is $0 with $1 free credit/month. These official pages conflict, so it is not safe to call Railway permanently $0. Free/Trial plans list a 0.5 GB volume and one volume per project; volumes are billed by storage usage and cannot use replicas. Volume deployments have brief downtime on redeploy. Public HTTP/HTTPS domains and automatic TLS. No current official sleep guarantee was found; assume an always-running, metered service rather than free sleep. Not a clean free option. A tiny persistent ntfy may fit technically, but the subscription/credit contradiction and volume billing need account-level confirmation. Medium
Zeabur Hosted plan is $0 for dashboard basics, but current comparison lists daily quota 0, monthly quota 0, and 0 domains. It can manage one server owned elsewhere; that is control-plane free, not free hosted compute. Hosted volumes are persistent but billed. On a user-owned server, persistence is ordinary local disk. HTTP services get a zeabur.app domain; non-HTTP services get an assigned host/port. Official docs do not establish a free hosted runtime or a useful ntfy sleep guarantee. Not a free hosted PaaS. Useful only if using Zeabur to manage a server you already own. High for no hosted free quota.
Google Cloud Run Ongoing monthly free tier is usage-based, aggregated by billing account—not a free always-on container. Billing account/card and overage controls are required. Container filesystem is in-memory and lost when instances stop. Use external PostgreSQL and S3/GCS-compatible attachment storage. Must listen on 0.0.0.0:$PORT (default 8080). Default scales to zero; request timeout is at most 60 minutes, so ntfy streams/WebSockets must reconnect. Possible stateless front end, but not a straightforward standalone ntfy host. Low traffic may fit the free tier; long-lived subscribers and external storage complicate the cost model. High
Oracle Cloud Always Free Separate from Oracle’s 30-day $300 trial: Always Free resources do not expire. The account/trial requires identity/card verification and capacity is not guaranteed. Persistent boot/block volumes are available within the Always Free limits; run ntfy + SQLite directly in Docker. Keep backups. Full VM networking: open 80/443 in the security list and bind ntfy to 0.0.0.0. No PaaS sleep, though Oracle can reclaim excess Arm allocations after trial for accounts exceeding the stated free-user limits. Best complete $0 architecture if VM provisioning succeeds. More administration than PaaS. High for Always Free/persistence; medium for current regional capacity and exact Arm quotas.

Source URLs

ntfy

Northflank

Render

Koyeb

Fly.io

Railway

Zeabur

Google Cloud Run

Oracle Cloud

Practical deployment choices

  1. Northflank: deploy ntfy as one public HTTP service, set PORT/listen address, enable ntfy authentication, and configure NTFY_DATABASE_URL to the free PostgreSQL addon. Do not rely on the service’s ephemeral filesystem for attachments.
  2. Oracle VM: run the ntfy Docker image with /var/lib/ntfy (or the configured data directory) on the persistent boot/block volume, expose HTTPS through Caddy/nginx, and back up the database.
  3. Render/Koyeb/Cloud Run: only choose these with an external PostgreSQL/S3 design and acceptance of sleeping/cold starts and reconnects.

Never expose an unauthenticated public ntfy instance merely to test whether a provider is free; public topic publishing can consume quotas and trigger abuse suspension.