{"adoption": {"forks": 400, "observed_at": "2026-08-28T04:08:09.237490+00:00", "stars": 3541}, "canonical_url": "https://ross.abutalabs.com/products/bastillion", "card": {"archived": false, "artifact_type": "application", "description": "Bastillion gives you a clean, browser-based way to manage SSH access across all your systems—like a bastion host with a friendly dashboard.", "domain": ["security", "self-hosted", "developer-tools"], "enriched": true, "function": ["ssh", "auth", "security", "http-server", "developer-tools"], "health_score": 100, "homepage": "https://loophole.company", "language": "Java", "license": "NOASSERTION", "license_family": "other", "maturity": "active", "member_repos": ["bastillion-io/Bastillion"], "name": "bastillion-io/Bastillion", "platform": ["self-hosted", "jvm", "windows"], "pushed_at": "2026-08-25T20:54:35+00:00", "repo": "bastillion-io/Bastillion", "stars": 3541, "tags": ["bastion-host", "ssh-key-management", "session-recording", "two-factor-authentication", "web-terminal", "privileged-access", "source-available", "devops", "web-server", "linux", "macos", "docker"], "topics": ["ssh", "bastion-host", "java", "javascript", "web-app", "web-based", "ssh-client", "ssh-key", "ssh-server", "devops", "remote-access", "security", "self-hosted", "two-factor-authentication"], "urls": [], "use_cases": ["manage ssh access to servers from a browser", "centralize ssh key distribution and rotation", "record and replay ssh sessions for compliance audits", "broadcast commands to multiple servers at once", "set up a bastion host with two-factor authentication", "control which users can access which systems"], "what_it_is": "Bastillion is a self-hosted, web-based SSH console and SSH key management platform that acts like a bastion host with a dashboard. It provides browser-based terminal sessions, centralized key issuance and rotation, two-factor authentication, and recorded, replayable session auditing.", "when_to_avoid": ["you need more than 5 registered systems without paying for a license (source-available, not fully open source)", "you only need simple one-off SSH from a terminal without a management layer", "you require a fully open-source licensed tool for redistribution", "you need agentless access to protocols beyond SSH"], "when_to_choose": ["you need audit-ready SSH session recording for PCI DSS, HIPAA, SOC 2, or NIST", "you want centralized SSH key management so users never hold long-lived keys", "you need a self-hosted web terminal with 2FA and per-profile access control", "you run commands across a fleet of hosts and want synchronized sessions"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/bastillion", "repo": "bastillion-io/Bastillion", "role": "main", "score": 99}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.237490+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.420241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5056367f4e3d4fddba7e86d1122670be45723e71e129f081232259a5d7942004", "fetched_at": "2026-08-28T04:08:09.237490+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bastillion-io/Bastillion"}, {"content_hash": "bf91f5e2a15d0165cd6778bfa3725f743ca0819a958dcca67b857b9efe3a340b", "fetched_at": "2026-08-29T09:28:39.651120+00:00", "kind": "homepage", "missing": false, "url": "https://loophole.company"}, {"content_hash": "a34aa0ff780e8a1c29dfefb54f3f674fd514fffdd70fd41cd4f677ff7a492910", "fetched_at": "2026-08-29T09:28:39.660628+00:00", "kind": "site_page", "missing": false, "url": "https://loophole.company/pricing.html"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.237490+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.420241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5056367f4e3d4fddba7e86d1122670be45723e71e129f081232259a5d7942004", "fetched_at": "2026-08-28T04:08:09.237490+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bastillion-io/Bastillion"}, {"content_hash": "bf91f5e2a15d0165cd6778bfa3725f743ca0819a958dcca67b857b9efe3a340b", "fetched_at": "2026-08-29T09:28:39.651120+00:00", "kind": "homepage", "missing": false, "url": "https://loophole.company"}, {"content_hash": "a34aa0ff780e8a1c29dfefb54f3f674fd514fffdd70fd41cd4f677ff7a492910", "fetched_at": "2026-08-29T09:28:39.660628+00:00", "kind": "site_page", "missing": false, "url": "https://loophole.company/pricing.html"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.420241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5056367f4e3d4fddba7e86d1122670be45723e71e129f081232259a5d7942004", "fetched_at": "2026-08-28T04:08:09.237490+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bastillion-io/Bastillion"}, {"content_hash": "bf91f5e2a15d0165cd6778bfa3725f743ca0819a958dcca67b857b9efe3a340b", "fetched_at": "2026-08-29T09:28:39.651120+00:00", "kind": "homepage", "missing": false, "url": "https://loophole.company"}, {"content_hash": "a34aa0ff780e8a1c29dfefb54f3f674fd514fffdd70fd41cd4f677ff7a492910", "fetched_at": "2026-08-29T09:28:39.660628+00:00", "kind": "site_page", "missing": false, "url": "https://loophole.company/pricing.html"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.237490+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.237490+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.237490+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.420241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5056367f4e3d4fddba7e86d1122670be45723e71e129f081232259a5d7942004", "fetched_at": "2026-08-28T04:08:09.237490+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bastillion-io/Bastillion"}, {"content_hash": "bf91f5e2a15d0165cd6778bfa3725f743ca0819a958dcca67b857b9efe3a340b", "fetched_at": "2026-08-29T09:28:39.651120+00:00", "kind": "homepage", "missing": false, "url": "https://loophole.company"}, {"content_hash": "a34aa0ff780e8a1c29dfefb54f3f674fd514fffdd70fd41cd4f677ff7a492910", "fetched_at": "2026-08-29T09:28:39.660628+00:00", "kind": "site_page", "missing": false, "url": "https://loophole.company/pricing.html"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.237490+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.237490+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.420241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5056367f4e3d4fddba7e86d1122670be45723e71e129f081232259a5d7942004", "fetched_at": "2026-08-28T04:08:09.237490+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bastillion-io/Bastillion"}, {"content_hash": "bf91f5e2a15d0165cd6778bfa3725f743ca0819a958dcca67b857b9efe3a340b", "fetched_at": "2026-08-29T09:28:39.651120+00:00", "kind": "homepage", "missing": false, "url": "https://loophole.company"}, {"content_hash": "a34aa0ff780e8a1c29dfefb54f3f674fd514fffdd70fd41cd4f677ff7a492910", "fetched_at": "2026-08-29T09:28:39.660628+00:00", "kind": "site_page", "missing": false, "url": "https://loophole.company/pricing.html"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.237490+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.237490+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.237490+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.420241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5056367f4e3d4fddba7e86d1122670be45723e71e129f081232259a5d7942004", "fetched_at": "2026-08-28T04:08:09.237490+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bastillion-io/Bastillion"}, {"content_hash": "bf91f5e2a15d0165cd6778bfa3725f743ca0819a958dcca67b857b9efe3a340b", "fetched_at": "2026-08-29T09:28:39.651120+00:00", "kind": "homepage", "missing": false, "url": "https://loophole.company"}, {"content_hash": "a34aa0ff780e8a1c29dfefb54f3f674fd514fffdd70fd41cd4f677ff7a492910", "fetched_at": "2026-08-29T09:28:39.660628+00:00", "kind": "site_page", "missing": false, "url": "https://loophole.company/pricing.html"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.237490+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:09.237490+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.420241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5056367f4e3d4fddba7e86d1122670be45723e71e129f081232259a5d7942004", "fetched_at": "2026-08-28T04:08:09.237490+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bastillion-io/Bastillion"}, {"content_hash": "bf91f5e2a15d0165cd6778bfa3725f743ca0819a958dcca67b857b9efe3a340b", "fetched_at": "2026-08-29T09:28:39.651120+00:00", "kind": "homepage", "missing": false, "url": "https://loophole.company"}, {"content_hash": "a34aa0ff780e8a1c29dfefb54f3f674fd514fffdd70fd41cd4f677ff7a492910", "fetched_at": "2026-08-29T09:28:39.660628+00:00", "kind": "site_page", "missing": false, "url": "https://loophole.company/pricing.html"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.420241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5056367f4e3d4fddba7e86d1122670be45723e71e129f081232259a5d7942004", "fetched_at": "2026-08-28T04:08:09.237490+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bastillion-io/Bastillion"}, {"content_hash": "bf91f5e2a15d0165cd6778bfa3725f743ca0819a958dcca67b857b9efe3a340b", "fetched_at": "2026-08-29T09:28:39.651120+00:00", "kind": "homepage", "missing": false, "url": "https://loophole.company"}, {"content_hash": "a34aa0ff780e8a1c29dfefb54f3f674fd514fffdd70fd41cd4f677ff7a492910", "fetched_at": "2026-08-29T09:28:39.660628+00:00", "kind": "site_page", "missing": false, "url": "https://loophole.company/pricing.html"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.420241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5056367f4e3d4fddba7e86d1122670be45723e71e129f081232259a5d7942004", "fetched_at": "2026-08-28T04:08:09.237490+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bastillion-io/Bastillion"}, {"content_hash": "bf91f5e2a15d0165cd6778bfa3725f743ca0819a958dcca67b857b9efe3a340b", "fetched_at": "2026-08-29T09:28:39.651120+00:00", "kind": "homepage", "missing": false, "url": "https://loophole.company"}, {"content_hash": "a34aa0ff780e8a1c29dfefb54f3f674fd514fffdd70fd41cd4f677ff7a492910", "fetched_at": "2026-08-29T09:28:39.660628+00:00", "kind": "site_page", "missing": false, "url": "https://loophole.company/pricing.html"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:34:29.420241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5056367f4e3d4fddba7e86d1122670be45723e71e129f081232259a5d7942004", "fetched_at": "2026-08-28T04:08:09.237490+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bastillion-io/Bastillion"}, {"content_hash": "bf91f5e2a15d0165cd6778bfa3725f743ca0819a958dcca67b857b9efe3a340b", "fetched_at": "2026-08-29T09:28:39.651120+00:00", "kind": "homepage", "missing": false, "url": "https://loophole.company"}, {"content_hash": "a34aa0ff780e8a1c29dfefb54f3f674fd514fffdd70fd41cd4f677ff7a492910", "fetched_at": "2026-08-29T09:28:39.660628+00:00", "kind": "site_page", "missing": false, "url": "https://loophole.company/pricing.html"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 98}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4955, "days_push": 8, "days_rel": 15, "gap_med": 29, "n_releases_24m": 4}, "score": 99, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}