Every server, one screen.
The one failure a daemon can't report is its own death. Station is a separate app you host yourself. Your RunWisp daemons connect out to it, it watches them from the outside, and your whole team logs in to one place instead of every box.
- 1,000+
- daemons on one Station, servers or Kubernetes pods
- 0
- inbound ports. Daemons dial out.
- 1
- place to log in: your OIDC or LDAP
- Free
- to self-host for small teams
Hear about the server that stopped answering.
A dead daemon can't send its own alert, and neither can a server that lost power. Station sees the heartbeat stop and tells you, once per outage, and again when it's back.
- Station down? Every daemon keeps running its own
runwisp.toml. - Host down? Runs Station scheduled for it wait, then start when it reconnects.
Runner db-primary is offline
from Station · lumen-labs
Runner db-primary is back online
from Station · lumen-labs
Logins, roles, and who clicked what.
Sign in with OIDC (Keycloak, Authentik, Entra ID, Okta, Google) or LDAP / Active Directory, with roles on top. Set it up once, not on every server.
-
Who triggered that?
Every trigger, stop and pause is tied to a real person, not to a shared password.
-
Dana left on Friday.
Remove them in your IdP and they're out of every server. Nothing to rotate.
-
Can the interns just look?
Roles built from fine-grained permissions. Read-only for most people, the trigger for a few.
Two lines on each host.
The daemon opens the connection, so none of your servers has to be reachable from the internet. Behind NAT, a firewall or a home router is fine.
# outbound WebSocket. no open ports on this box.
RUNWISP_STATION_URL=https://station.example.com
RUNWISP_STATION_TOKEN=rt_... - Scheduling across hosts
- Cron schedules, manual runs, retries, trigger chains, concurrency limits. A run for an offline host waits and starts when it reconnects.
- Live logs from any host
- Tail a running job in the browser. Finished runs keep their log archive for download.
- Always-on services
- Start, stop and watch the services your daemons supervise, without SSHing into each box.
- Notifications
- Slack, Discord, Telegram, ntfy, Gotify, Pushover, webhooks, email and an in-app inbox, with routing rules per organization.
- Built for big fleets
- Heartbeats stay in memory, nothing polls the database, and log bytes go straight from the daemon to storage.
- Organizations and API tokens
- Separate teams or clients into organizations. Invite people, hand automation its own token.
Free to self-host for small teams.
Hobbyists and very small teams should never have to pay for it. The large companies running RunWisp across many servers with SSO and audit requirements will.
RunWisp is an independent project, and Station is being built in parallel with the daemon, not after it. Keeping that pace needs money at some point. For a big fleet it's a rounding error next to one missed outage. For the project it's what keeps the daemon free and lets small teams use all of Station without paying.
FAQ
Do I need Station?
Not for one server. The daemon already runs your jobs and services, keeps their logs and alerts you when they fail, all on its own. Station is for when you have several hosts, a team, or need to hear about a server that stopped answering.
Does the daemon lose anything?
No. The daemon stays GPL-3.0 with no locked features and no license key, and it keeps working without Station. Station adds what one host can't do alone.
Why is SSO in Station and not in the daemon?
Once one place sees all your daemons, that's where logins and permissions belong: you set them up once instead of on every server. Until Station ships, the daemon has a read-only password, or you can put an SSO proxy such as oauth2-proxy in front of it.
What happens if Station goes down?
Each daemon keeps running its own runwisp.toml as usual. Runs that Station scheduled for a host wait until that host is connected again.
When does it ship?
When it's ready. It isn't yet. Leave your email for a ping when it ships, or say so on GitHub issue #418 if you want to try it early.
Be first on Station.
One email when it ships, nothing else. Want to try it before that? Say so on GitHub and you'll get pinged first.
curl -fsSL https://get.runwisp.com | sh