---
title: "Deploy Progress Watch"
description: "Self-hostable progress tracking for anything that runs without you."
category: "Automation"
url: https://railway.com/deploy/progress-watch
---

# Deploy Progress Watch

Self-hostable progress tracking for anything that runs without you.

**[Deploy Progress Watch on Railway](https://railway.com/template/progress-watch)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/progress-watch/manifest.json

- **Creator:** My Projects
- **Category:** Automation

## Template content

### Postgres https://devicons.railway.app/i/postgresql.svg

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:18

### Redis https://cdn.sanity.io/images/sy1jschh/production/0ce0bfdcfbdbf69662b1116671f97c2dd788b655-157x157.svg

- **Image:** redis:8.2
- **Start command:** `/bin/sh -c "rm -rf $RAILWAY_VOLUME_MOUNT_PATH/lost+found/ && exec docker-entrypoint.sh redis-server --requirepass $REDIS_PASSWORD --save 60 1 --dir $RAILWAY_VOLUME_MOUNT_PATH"`

### progresswatch/progresswatch:latest

- **Image:** progresswatch/progresswatch:latest

## Documentation

# Deploy and Host Progress Watch on Railway

Progress Watch is open source progress tracking for anything that runs without you: a crawl, a training run, a migration, a CI job, an AI agent. Each one reports counts with a single HTTP request, the CLI or MCP. You watch them live in
the browser from anywhere and get a push notification when they finish.

## About Hosting Progress Watch

This template runs the published Docker image, `progresswatch/progresswatch`, with Sidekiq embedded in the web process, next to a PostgreSQL database and a Redis instance. PostgreSQL keeps spaces and the structure of each task. Redis
holds live progress and the notification queue; progress is never written to the database, so it stays small however long anything runs. A secret key is generated for every deploy, migrations run on boot, and Railway waits for `/up` to
answer before sending traffic. To turn on push notifications, add a VAPID key pair to the service variables after the first deploy, as described at https://progress.watch/docs/notifications.

## Common Use Cases

- Watching long-running scripts, crawlers and training runs, with a notification when they finish or fail
- Tracking CI jobs and deploys step by step: `progresswatch run` wraps any command and records its exit code
- Letting AI coding agents report their own work as they go, through MCP or the bundled agent skill

## Dependencies for Progress Watch Hosting

- PostgreSQL
- Redis

### Implementation Details

Point the CLI at your deployment and start reporting:

```sh
npm install -g progresswatch
progresswatch configure --server https://your-app.up.railway.app
progresswatch space new "My work"

TASK=$(progresswatch new "Crawl docs")
progresswatch update "$TASK" --current 1200 --end 50000
progresswatch done "$TASK"

A space UUID is the only credential, so keep it in a secret rather than a committed file. Anything that can send an HTTP request can report too; the full API is at https://progress.watch/docs/api.

## Why Deploy Progress Watch on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying Progress Watch on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.


## Similar templates

- [N8N Main + Worker](https://railway.com/deploy/n8n-main-worker) — Deploy and Host N8N with Inactive worker.
- [Evolution API with n8n](https://railway.com/deploy/evolution-api-with-n8n) — Automate WhatsApp workflows with Evolution API, n8n, and Postgres.
- [Postgres Backup](https://railway.com/deploy/postgres-s3-backups) — Cron-based PostgreSQL backup to bucket storage

Open this page in a browser: https://railway.com/deploy/progress-watch
