{"adoption": {"forks": 766, "observed_at": "2026-08-28T04:09:17.864151+00:00", "stars": 5418}, "canonical_url": "https://ross.abutalabs.com/products/wetty", "card": {"archived": false, "artifact_type": "application", "description": "Terminal in browser over http/https. (Ajaxterm/Anyterm alternative, but much better)", "domain": ["developer-tools", "web-development", "self-hosted"], "enriched": true, "function": ["http-server", "websocket", "terminal-ui", "ssh"], "health_score": 99, "homepage": "https://butlerx.github.io/wetty", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["butlerx/wetty"], "name": "butlerx/wetty", "platform": ["self-hosted", "cross-platform"], "pushed_at": "2026-08-21T01:56:27+00:00", "repo": "butlerx/wetty", "stars": 5418, "tags": ["web-terminal", "xtermjs", "ssh-client", "browser-terminal", "remote-access", "command-line", "nodejs", "web-server"], "topics": ["hacktoberfest", "wetty", "ajaxterm", "anyterm", "terminal", "xterm-js", "xtermjs", "xterm", "hacktoberfest-accepted"], "urls": [], "use_cases": ["access a remote server's terminal from a browser", "provide ssh shell access over https without an ssh client", "run a web-based terminal like ajaxterm or anyterm but better", "give browser-based command line access to a docker host", "self-host a terminal behind ssl for remote administration"], "what_it_is": "WeTTY is a self-hosted Node.js application that provides terminal access in the browser over HTTP/HTTPS using xterm.js and websockets. It proxies SSH connections so users can run a remote shell from any web browser.", "when_to_avoid": ["you need a full remote desktop or file transfer solution", "you only need local terminal emulation on your own machine", "you cannot run a Node.js server on the host you want to reach"], "when_to_choose": ["you want browser-based ssh terminal access with a modern xterm.js frontend", "you need terminal access through firewalls that only allow http/https", "you want a lightweight self-hosted alternative to ajaxterm or anyterm"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/wetty", "repo": "butlerx/wetty", "role": "main", "score": 97}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:17.864151+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:56:57.106606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9223a849278a8137178eebb968f610a4002f8c49c70dfe8078fac5695d10e4", "fetched_at": "2026-08-28T04:09:17.864151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/butlerx/wetty"}, {"content_hash": "c978f012fa5f477f90ae866b52af1f13ec362f62e0dd631f0f09dd022538a8f4", "fetched_at": "2026-08-29T08:52:34.820176+00:00", "kind": "homepage", "missing": false, "url": "https://butlerx.github.io/wetty"}, {"content_hash": "10735de4b8800aaa74f07e091281b957b8522f9438b1fcceba78b2f09d39dd1f", "fetched_at": "2026-08-29T08:52:34.829024+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/wetty"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:17.864151+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:56:57.106606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9223a849278a8137178eebb968f610a4002f8c49c70dfe8078fac5695d10e4", "fetched_at": "2026-08-28T04:09:17.864151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/butlerx/wetty"}, {"content_hash": "c978f012fa5f477f90ae866b52af1f13ec362f62e0dd631f0f09dd022538a8f4", "fetched_at": "2026-08-29T08:52:34.820176+00:00", "kind": "homepage", "missing": false, "url": "https://butlerx.github.io/wetty"}, {"content_hash": "10735de4b8800aaa74f07e091281b957b8522f9438b1fcceba78b2f09d39dd1f", "fetched_at": "2026-08-29T08:52:34.829024+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/wetty"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:56:57.106606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9223a849278a8137178eebb968f610a4002f8c49c70dfe8078fac5695d10e4", "fetched_at": "2026-08-28T04:09:17.864151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/butlerx/wetty"}, {"content_hash": "c978f012fa5f477f90ae866b52af1f13ec362f62e0dd631f0f09dd022538a8f4", "fetched_at": "2026-08-29T08:52:34.820176+00:00", "kind": "homepage", "missing": false, "url": "https://butlerx.github.io/wetty"}, {"content_hash": "10735de4b8800aaa74f07e091281b957b8522f9438b1fcceba78b2f09d39dd1f", "fetched_at": "2026-08-29T08:52:34.829024+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/wetty"}], "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:09:17.864151+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:17.864151+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:17.864151+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:56:57.106606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9223a849278a8137178eebb968f610a4002f8c49c70dfe8078fac5695d10e4", "fetched_at": "2026-08-28T04:09:17.864151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/butlerx/wetty"}, {"content_hash": "c978f012fa5f477f90ae866b52af1f13ec362f62e0dd631f0f09dd022538a8f4", "fetched_at": "2026-08-29T08:52:34.820176+00:00", "kind": "homepage", "missing": false, "url": "https://butlerx.github.io/wetty"}, {"content_hash": "10735de4b8800aaa74f07e091281b957b8522f9438b1fcceba78b2f09d39dd1f", "fetched_at": "2026-08-29T08:52:34.829024+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/wetty"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:17.864151+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:17.864151+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:56:57.106606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9223a849278a8137178eebb968f610a4002f8c49c70dfe8078fac5695d10e4", "fetched_at": "2026-08-28T04:09:17.864151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/butlerx/wetty"}, {"content_hash": "c978f012fa5f477f90ae866b52af1f13ec362f62e0dd631f0f09dd022538a8f4", "fetched_at": "2026-08-29T08:52:34.820176+00:00", "kind": "homepage", "missing": false, "url": "https://butlerx.github.io/wetty"}, {"content_hash": "10735de4b8800aaa74f07e091281b957b8522f9438b1fcceba78b2f09d39dd1f", "fetched_at": "2026-08-29T08:52:34.829024+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/wetty"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:17.864151+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:17.864151+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:17.864151+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:56:57.106606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9223a849278a8137178eebb968f610a4002f8c49c70dfe8078fac5695d10e4", "fetched_at": "2026-08-28T04:09:17.864151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/butlerx/wetty"}, {"content_hash": "c978f012fa5f477f90ae866b52af1f13ec362f62e0dd631f0f09dd022538a8f4", "fetched_at": "2026-08-29T08:52:34.820176+00:00", "kind": "homepage", "missing": false, "url": "https://butlerx.github.io/wetty"}, {"content_hash": "10735de4b8800aaa74f07e091281b957b8522f9438b1fcceba78b2f09d39dd1f", "fetched_at": "2026-08-29T08:52:34.829024+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/wetty"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:17.864151+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:17.864151+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:56:57.106606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9223a849278a8137178eebb968f610a4002f8c49c70dfe8078fac5695d10e4", "fetched_at": "2026-08-28T04:09:17.864151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/butlerx/wetty"}, {"content_hash": "c978f012fa5f477f90ae866b52af1f13ec362f62e0dd631f0f09dd022538a8f4", "fetched_at": "2026-08-29T08:52:34.820176+00:00", "kind": "homepage", "missing": false, "url": "https://butlerx.github.io/wetty"}, {"content_hash": "10735de4b8800aaa74f07e091281b957b8522f9438b1fcceba78b2f09d39dd1f", "fetched_at": "2026-08-29T08:52:34.829024+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/wetty"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:56:57.106606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9223a849278a8137178eebb968f610a4002f8c49c70dfe8078fac5695d10e4", "fetched_at": "2026-08-28T04:09:17.864151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/butlerx/wetty"}, {"content_hash": "c978f012fa5f477f90ae866b52af1f13ec362f62e0dd631f0f09dd022538a8f4", "fetched_at": "2026-08-29T08:52:34.820176+00:00", "kind": "homepage", "missing": false, "url": "https://butlerx.github.io/wetty"}, {"content_hash": "10735de4b8800aaa74f07e091281b957b8522f9438b1fcceba78b2f09d39dd1f", "fetched_at": "2026-08-29T08:52:34.829024+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/wetty"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:56:57.106606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9223a849278a8137178eebb968f610a4002f8c49c70dfe8078fac5695d10e4", "fetched_at": "2026-08-28T04:09:17.864151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/butlerx/wetty"}, {"content_hash": "c978f012fa5f477f90ae866b52af1f13ec362f62e0dd631f0f09dd022538a8f4", "fetched_at": "2026-08-29T08:52:34.820176+00:00", "kind": "homepage", "missing": false, "url": "https://butlerx.github.io/wetty"}, {"content_hash": "10735de4b8800aaa74f07e091281b957b8522f9438b1fcceba78b2f09d39dd1f", "fetched_at": "2026-08-29T08:52:34.829024+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/wetty"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:56:57.106606+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e9223a849278a8137178eebb968f610a4002f8c49c70dfe8078fac5695d10e4", "fetched_at": "2026-08-28T04:09:17.864151+00:00", "kind": "readme", "missing": false, "url": "https://github.com/butlerx/wetty"}, {"content_hash": "c978f012fa5f477f90ae866b52af1f13ec362f62e0dd631f0f09dd022538a8f4", "fetched_at": "2026-08-29T08:52:34.820176+00:00", "kind": "homepage", "missing": false, "url": "https://butlerx.github.io/wetty"}, {"content_hash": "10735de4b8800aaa74f07e091281b957b8522f9438b1fcceba78b2f09d39dd1f", "fetched_at": "2026-08-29T08:52:34.829024+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/wetty"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 100, "rhythm": 93}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4540, "days_push": 13, "days_rel": 48, "gap_med": 0.0, "n_releases_24m": 7}, "score": 97, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}