About opencatalog.sh
opencatalog.sh is a map from paid software to serious FOSS alternatives. Every claim is grounded, every install path is verified, every gap is labeled. The page you read and the JSON an agent fetches are the same content.
Most "alternatives" sites are listicles. They rank tools by popularity, not by whether they actually replace the paid product for a specific workflow. They don't tell you the license obligations. They don't tell you what doesn't work. They don't tell you how to install anything.
opencatalog.sh is the opposite: a field manual. Each paid product page is a switch map — a grid of workflows × alternatives, with every cell grounded in a source you can click. Each alternative page lists install paths, maturity signals, and known gaps. Every record carries a freshness timestamp and a verification badge.
Every load-bearing fact carries a basis: probed (we checked the source directly), cited (we read the documentation), or claimed (asserted without independent verification).
A record is verified only if its license is grounded, at least one install path is probed or cited, and load-bearing workflow facts are not merely claimed. The validator enforces this mechanically — bun run validate fails the build if a verified record has a claimed-only license.
Every record carries generatedAt. Maturity signals carry probedAt and a derived stale flag. Stale probes are visible on the page — we do not hide decay.
The entire catalog is available as a static JSON envelope at /api.json and as a JSON Schema document at /api.schema.json. Schema version: 0.1.0.
The full agent guide — every endpoint, every available slug, the schema reference, the trust model, and the submission flow — is at /agents.md (and /skills.md, the same content re-framed as agent capabilities). An /llms.txt pointer is also available at the site root.
Agents can fetch the envelope, validate against the schema, and reason about FOSS alternatives without scraping HTML. The JSON and the HTML are generated from the same curated records — there is no separate API model.
At launch, opencatalog.sh is a curated seed. There is no public contribution UI, no raw-feed normalizer, no community submission flow. Those are post-launch. The curated records in curated/ are hand-written against a Zod schema and validated in CI.
Source-available tools (non-OSI licenses) are modeled as excluded, not silently omitted. When the raw-feed pipeline ships, uncurated records will appear with a visible uncurated badge — never mixed into verified results.