For agents and scripts
Everything here is readable without a browser.
If you are an AI agent helping someone plan digital independence, start at /llms.txt. This page shows the same in a form humans can check.
Endpoints
GET /api/catalog.json | the whole catalogue — areas, needs, tools with vendor, offerings, footprint and precomputed verdicts, data classes, quiz, price table, sources |
GET /api/needs/<id>.json | one need with its tools |
GET /api/tools/<id>.json | one tool |
GET /api/price-table.json | the dated price basis |
GET /api/plan?… | resolve a plan: verdicts with reasons, tally, infrastructure, costs, risk, comparison |
GET /api/health | liveness |
All JSON, UTF-8, Access-Control-Allow-Origin: *, no cookies, no keys.
The plan URL
/plan?a=<person|company>
&n=<need,need,…>
&c=<need:tool:mode,…> mode ∈ sh | eu | ex
&t=<need:tool,…> what is used today
&seats=<n>&v=<plan|today> Example — a company that runs its analytics and newsletter itself and used Google Analytics before:
https://independence.kokal.cloud/plan?a=company&c=web-analytics:umami:sh,newsletter:listmonk:sh&t=web-analytics:google-analytics&seats=12 Resolve it without rendering anything:
curl "https://independence.kokal.cloud/api/plan?a=company&c=web-analytics:umami:sh,newsletter:listmonk:sh&t=web-analytics:google-analytics&seats=12" The decoder is lenient: unknown ids are ignored and listed in warnings. Only modes listed in a tool's modes are valid for it.
The verdict rule
Verdict rule (first match wins):
1. Host it yourself and the tool is self-hostable → GREEN.
3. Hosted outside Europe → RED.
4. Hosted in Europe but the company's jurisdiction or the server region is unknown → UNKNOWN (never green).
5. Hosted in Europe but the company (or its parent) is outside Europe → RED.
6. European company, servers outside Europe → RED.
7. European company, servers in Europe → YELLOW; if the data centre is run by a non-European cloud provider, YELLOW with a caveat.
Europe = EU, EEA, EFTA and the United Kingdom (data/europe.yaml). Green, yellow and red are the three answers a visitor asked for. Unknown is the fourth state the data forces on us: a missing fact never becomes green. Yellow can carry a caveat when a European service runs on a non-European cloud provider's European region; the risk section lists those separately.
Ids you will need
Need ids: media-library music-library audiobooks-podcasts ebooks photo-library home-automation voice-assistant home-cameras email calendar-contacts file-storage file-transfer backup password-manager identity-sso notes bookmarks-reading recipes rss messaging video-calls polls-dates dns-adblock vpn-remote-access search-engine ai-assistant ai-models budgeting documents-paperless pdf-tools translation website blog newsletter web-analytics forms-surveys scheduling-booking crm events-ticketing ecommerce payments community-forum live-chat helpdesk team-chat office-suite wiki-knowledge whiteboard e-signature project-management time-tracking hr invoicing dashboards-bi database-spreadsheet server-hosting object-storage container-management monitoring-metrics status-monitoring secrets-management domains-dns git-hosting error-tracking design-tool workflow-automation transactional-email
Tool ids are in catalog.json (tools[].id); every tool lists the needs it serves and the modes it can be chosen in.
Attribution
Open-source facts (licence, source, stars, activity, platforms) are merged from awesome-selfhosted-data (CC-BY-SA 3.0). The curated fields (vendor jurisdiction, hosting region, footprint, verdict) are ours. Prices are captured from Hetzner Cloud on 2026-09-04. Details on /sources.