Kener is a self-hosted status page replacing Statuspage with built-in multi-protocol uptime checks, incident timelines, and zero subscriber fees.
A SaaS company running a dozen microservices faces steep monthly invoices just to publish uptime badges and incident announcements. Teams operating under strict budget caps or data governance often struggle when commercial vendors restrict custom domains, private pages, or subscriber notifications behind premium tiers. Kener solves this by pairing an independent SvelteKit dashboard with active synthetic probing on your own infrastructure.
Statuspage locks core operational integrations behind enterprise tiers, restricting custom webhooks, subscriber notification quotas, and multi-component displays. Kener treats integrations as baseline capabilities: alerts fan out to Discord, Slack, email, and arbitrary webhooks without subscriber caps or per-seat fees. Its REST API allows DevOps engineers to trigger incidents, update component health, and announce maintenance directly from deployment pipelines. Kener also folds synthetic monitoring into the status page itself, probing HTTP endpoints, TCP sockets, DNS records, SSL certificates, SQL queries, and cron heartbeats without external collector daemons.
The primary trade-off is failure domain isolation. Atlassian Statuspage runs on external cloud infrastructure, remaining reachable when your application cluster fails. With Kener, DevOps teams must isolate the deployment—typically on an independent VPS alongside its Redis dependency—so primary outages do not silence the status dashboard. Teams accepting that operational ownership gain unmetered API automation, complete data sovereignty, and custom styling without subscription overhead.
/status requires dedicated container image tags and strict origin header configuration to prevent routing failures.Is Kener free for commercial use? Yes. It carries permissive MIT terms that allow companies to deploy and modify public or internal status dashboards without commercial fees.
Kener vs Statuspage — which should an engineering team choose? Statuspage suits enterprises needing managed offsite hosting with Jira workflows; Kener is ideal for teams wanting zero subscriber fees, self-hosted data ownership, and integrated synthetic checks.
Does Kener require an external database? Kener stores configuration in an embedded SQLite database, but version 4 requires a Redis instance to manage background job queues and alert dispatching.
Kener is well-suited for teams that want an integrated status dashboard with native synthetic probing on their own hardware, provided they host it outside their primary failure domain. Active maintenance with commits pushed in September 2026 and an MIT license that permits unconstrained deployment make it an effective self-hosted alternative to commercial status portals.
We started this exact setup from scratch in a clean Linux machine on Nov 3, 2026 and checked it through Kener's own API: every check passed. Recipes are re-checked regularly and removed if they stop working.
mkdir -p kener && cd kener
curl -fsSL https://open-source.store/tools/kener/compose.yml -o compose.ymlcat > .env <<EOF
KENER_SECRET_KEY=$(openssl rand -hex 32)
ORIGIN=http://localhost:3000
ADMIN_PASSWORD=$(openssl rand -hex 12)
EOFKENER_SECRET_KEY — Random secret key used to sign sessions, tokens, and hashes. Generated above; keep it secret.ORIGIN — Public URL where visitors reach Kener (set this to your external domain or IP).ADMIN_PASSWORD — Password set for the initial admin user during smoke testing. Generated above; keep it secret.docker compose up -dservices:
kener:
image: rajnandan1/kener:4.1.11
ports:
- "3000:3000"
environment:
KENER_SECRET_KEY: ${KENER_SECRET_KEY}
ORIGIN: ${ORIGIN}
REDIS_URL: redis://redis:6379
volumes:
- data:/app/database
depends_on:
redis:
condition: service_healthy
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "curl -sf http://localhost:3000/healthcheck || exit 1"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
restart: unless-stopped
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
volumes:
data:
redis_data:
Go, gRPC and Protobuf done right, LLM agents in production, and the hard parts of shipping a first product.
Show that Kener is listed as an open-source alternative. Paste into your README:
Ubuntu 24.04 · Apple container, Docker 29.1.3, Compose 2.40.3+ds1-0ubuntu1~24.04.1. Images pulled in 131 s: rajnandan1/kener:4.1.11, redis:7-alpine.
Based on the upstream setup. Official compose. Image pinned to 4.1.11; secret key and public origin configured via .env; container names removed.
kener-1 | 2026-11-03T02:09:44.234705928Z kener-1 | 2026-11-03T02:09:44.234708344Z [404] GET /include/downmix.inc.php kener-1 | 2026-11-03T02:09:44.234843053Z kener-1 | 2026-11-03T02:09:44.234844678Z [404] GET /templates/config/profmanage.php kener-1 | 2026-11-03T02:09:44.236628761Z kener-1 | 2026-11-03T02:09:44.236631678Z [404] GET /install/index.php kener-1 | 2026-11-03T02:09:44.236786678Z kener-1 | 2026-11-03T02:09:44.236788053Z [404] GET /dana-na/auth/url_default/welcome.cgi kener-1 | 2026-11-03T02:09:44.236900469Z kener-1 | 2026-11-03T02:09:44.236901553Z [404] GET /dana-na/auth/url_default/welcome.cgi kener-1 | 2026-11-03T02:09:44.237000469Z kener-1 | 2026-11-03T02:09:44.237001511Z [404] GET /concrete5/index.php/install kener-1 | 2026-11-03T02:09:44.237110178Z kener-1 | 2026-11-03T02:09:44.237111511Z [404] GET /templates/config/profmanage.php kener-1 | 2026-11-03T02:09:44.237233844Z kener-1 | 2026-11-03T02:09:44.237235011Z [404] GET /components/statestore kener-1 | 2026-11-03T02:09:44.237321511Z kener-1 | 2026-11-03T02:09:44.237322594Z [404] GET /components/statestore kener-1 | 2026-11-03T02:09:44.237409469Z kener-1 | 2026-11-03T02:09:44.237410386Z [404] GET /dana-na/auth/url_6/welcome.cgi kener-1 | 2026-11-03T02:09:44.237497636Z kener-1 | 2026-11-03T02:09:44.237498803Z [404] GET /dana-na/auth/url_6/welcome.cgi kener-1 | 2026-11-03T02:09:44.237610428Z kener-1 | 2026-11-03T02:09:44.237613386Z [404] GET /Schemas/$%7B%27%27.class.forName%28%27javax.script.ScriptEngineManager%27%29.newInstance%28%29.getEngineByName%28%27js%27%29.eval%28%27java.lang.Runtime.getRuntime%28%29.exec%28%22id%22%29%27%29%7D kener-1 | 2026-11-03T02:09:44.237696219Z kener-1 | 2026-11-03T02:09:44.237697469Z [404] GET /Schemas/$%7B%27%27.class.forName%28%27javax.script.ScriptEngineManager%27%29.newInstance%28%29.getEngineByName%28%27js%27%29.eval%28%27java.lang.Runtime.getRuntime%28%29.exec%28%22id%22%29%27%29%7D kener-1 | 2026-11-03T02:09:44.237828219Z kener-1 | 2026-11-03T02:09:44.237829344Z [404] GET /general/appbuilder/web/portal/gateway/getdata kener-1 | 2026-11-03T02:09:44.237959094Z kener-1 | 2026-11-03T02:09:44.237960219Z [404] GET /pagesi3efi%22%3e%3cimg%20src%3da%20onerror%3dalert(document.domain)%3ebdk84/no-permission-role kener-1 | 2026-11-03T02:09:44.238039303Z kener-1 | 2026-11-03T02:09:44.238040303Z [404] GET /pagesi3efi%22%3e%3cimg%20src%3da%20onerror%3dalert(document.domain)%3ebdk84/no-permission-role kener-1 | 2026-11-03T02:09:44.239009094Z kener-1 | 2026-11-03T02:09:44.239010928Z [404] GET /chat/imController/showOrDownByurl.do kener-1 | 2026-11-03T02:09:44.239109803Z kener-1 | 2026-11-03T02:09:44.239112053Z [404] GET /chat/imController/showOrDownByurl.do kener-1 | 2026-11-03T02:09:44.240106344Z kener-1 | 2026-11-03T02:09:44.240110344Z [404] GET /general/appbuilder/web/portal/gateway/getdata kener-1 | 2026-11-03T02:09:44.240253553Z kener-1 | 2026-11-03T02:09:44.240255303Z [404] GET /dana/home/index.cgi kener-1 | 2026-11-03T02:09:44.240349094Z kener-1 | 2026-11-03T02:09:44.240350553Z [404] GET /dana/home/index.cgi kener-1 | 2026-11-03T02:09:44.241403678Z kener-1 | 2026-11-03T02:09:44.241406428Z [404] GET /photoalbum/index.php kener-1 | 2026-11-03T02:09:44.241541303Z kener-1 | 2026-11-03T02:09:44.241542928Z [404] GET /photoalbum/index.php kener-1 | 2026-11-03T02:09:44.241668094Z kener-1 | 2026-11-03T02:09:44.241669428Z [404] GET /StudioServer/.git/config kener-1 | 2026-11-03T02:09:44.241793594Z kener-1 | 2026-11-03T02:09:44.241794886Z [404] GET /StudioServer/.git/config kener-1 | 2026-11-03T02:09:44.255260136Z kener-1 | 2026-11-03T02:09:44.255275053Z [404] GET /service/v1/service-details kener-1 | 2026-11-03T02:09:44.255431261Z kener-1 | 2026-11-03T02:09:44.255433844Z [404] GET /irj/cache.jsp kener-1 | 2026-11-03T02:09:44.258833636Z kener-1 | 2026-11-03T02:09:44.258841219Z [404] GET /irj/helper.jsp kener-1 | 2026-11-03T02:09:44.259068928Z kener-1 | 2026-11-03T02:09:44.259070886Z [404] GET /static/ueditor/php/controller.php kener-1 | 2026-11-03T02:09:44.259793178Z kener-1 | 2026-11-03T02:09:44.259796678Z [404] GET /image/image%3A%2F%2F%2e%2e%252fetc%252fpasswd kener-1 | 2026-11-03T02:09:44.260329511Z kener-1 | 2026-11-03T02:09:44.260331678Z [404] GET /sphinxsearch/sphinx.conf kener-1 | 2026-11-03T02:09:44.260632053Z kener-1 | 2026-11-03T02:09:44.260633553Z [404] GET /extensions/realestate/index.php/properties/list/list-with-sidebar/realties kener-1 | 2026-11-03T02:09:44.260875094Z kener-1 | 2026-11-03T02:09:44.260876303Z [404] GET /extensions/realestate/index.php/properties/list/list-with-sidebar/realties kener-1 | 2026-11-03T02:09:44.261167053Z kener-1 | 2026-11-03T02:09:44.261168594Z [404] GET /wp-admin/admin-ajax.php kener-1 | 2026-11-03T02:09:44.261439886Z kener-1 | 2026-11-03T02:09:44.261441219Z [404] GET /install/index.php kener-1 | 2026-11-03T02:09:45.184717636Z kener-1 | 2026-11-03T02:09:45.184748470Z [404] GET /manage/fileDownloader kener-1 | 2026-11-03T02:09:45.188981595Z kener-1 | 2026-11-03T02:09:45.188992220Z [404] GET /windows/win.ini kener-1 | 2026-11-03T02:09:45.189448220Z kener-1 | 2026-11-03T02:09:45.189452803Z [404] GET /windows/win.ini kener-1 | 2026-11-03T02:09:45.196267511Z kener-1 | 2026-11-03T02:09:45.196277595Z [404] GET /wp-admin/admin-ajax.php kener-1 | 2026-11-03T02:09:45.196617095Z kener-1 | 2026-11-03T02:09:45.196620511Z [404] GET /wp-admin/admin-ajax.php kener-1 | 2026-11-03T02:09:45.198738720Z kener-1 | 2026-11-03T02:09:45.198743053Z [404] GET /bin/get/XWiki/SuggestSolrService kener-1 | 2026-11-03T02:09:45.198964178Z kener-1 | 2026-11-03T02:09:45.198966678Z [404] GET /bin/get/XWiki/SuggestSolrService kener-1 | 2026-11-03T02:09:45.201909511Z kener-1 | 2026-11-03T02:09:45.201920595Z [404] GET /xwiki/bin/get/XWiki/SuggestSolrService kener-1 | 2026-11-03T02:09:45.202235428Z kener-1 | 2026-11-03T02:09:45.202243595Z [404] GET /xwiki/bin/get/XWiki/SuggestSolrService kener-1 | 2026-11-03T02:09:45.202532011Z kener-1 | 2026-11-03T02:09:45.202534053Z [404] GET /action/usermanager.htm kener-1 | 2026-11-03T02:09:45.202743095Z kener-1 | 2026-11-03T02:09:45.202744636Z [404] GET /action/usermanager.htm kener-1 | 2026-11-03T02:09:45.206527886Z kener-1 | 2026-11-03T02:09:45.206535053Z [404] GET /bonita/portal/themeResource kener-1 | 2026-11-03T02:09:45.207444636Z kener-1 | 2026-11-03T02:09:45.207447386Z [404] GET /bonita/portal/themeResource kener-1 | 2026-11-03T02:09:45.207567886Z kener-1 | 2026-11-03T02:09:45.207569553Z [404] GET /bonita/portal/themeResource kener-1 | 2026-11-03T02:09:45.207751553Z kener-1 | 2026-11-03T02:09:45.207752970Z [404] GET /manage/fileDownloader kener-1 | 2026-11-03T02:09:45.207971720Z kener-1 | 2026-11-03T02:09:45.207974011Z [404] GET /bonita/portal/themeResource kener-1 | 2026-11-03T02:09:45.219454761Z kener-1 | 2026-11-03T02:09:45.219462886Z [404] GET /etc/passwd kener-1 | 2026-11-03T02:09:45.221094553Z kener-1 | 2026-11-03T02:09:45.221101011Z [404] GET /etc/passwd kener-1 | 2026-11-03T02:09:45.224851303Z kener-1 | 2026-11-03T02:09:45.224862095Z [404] GET /ACSServer/WebServlet kener-1 | 2026-11-03T02:09:45.225036678Z kener-1 | 2026-11-03T02:09:45.225038845Z [404] GET /ACSServer/WebServlet kener-1 | 2026-11-03T02:09:45.225120136Z kener-1 | 2026-11-03T02:09:45.225121470Z [404] GET /irj/cache.jsp kener-1 | 2026-11-03T02:09:45.225236928Z kener-1 | 2026-11-03T02:09:45.225244636Z [404] GET /ACSServer/WebServlet kener-1 | 2026-11-03T02:09:45.225360470Z kener-1 | 2026-11-03T02:09:45.225361720Z [404] GET /ACSServer/WebServlet kener-1 | 2026-11-03T02:09:45.228633761Z kener-1 | 2026-11-03T02:09:45.228641595Z [404] GET /..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fetc/passwd kener-1 | 2026-11-03T02:09:45.229700928Z kener-1 | 2026-11-03T02:09:45.229703511Z [404] GET /..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fetc/passwd