{"adoption": {"forks": 451, "observed_at": "2026-08-28T04:05:19.619080+00:00", "stars": 1668}, "canonical_url": "https://ross.abutalabs.com/products/swiftterm", "card": {"archived": false, "artifact_type": "library", "description": "Xterm/VT100 Terminal emulator in Swift", "domain": ["developer-tools", "cross-platform"], "enriched": true, "function": ["terminal-ui", "developer-tools", "ssh"], "health_score": 100, "homepage": null, "language": "Swift", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["migueldeicaza/SwiftTerm"], "name": "migueldeicaza/SwiftTerm", "platform": [], "pushed_at": "2026-08-25T20:38:57+00:00", "repo": "migueldeicaza/SwiftTerm", "stars": 1668, "tags": ["terminal-emulator", "vt100", "xterm", "uikit", "appkit", "sixel", "ssh-client", "command-line", "macos", "ios", "swift"], "topics": ["macos", "ios", "swift", "xterm-256color", "xterm", "uikit", "appkit", "vt100", "sixel", "imgcat", "terminal-engine", "ssh-connection"], "urls": [], "use_cases": ["embed a terminal emulator in a macOS app", "add an SSH terminal view to an iOS app", "build a custom Terminal.app replacement", "render xterm/VT100 escape sequences in Swift", "display sixel images and imgcat in an embedded terminal", "build a headless terminal engine for automation"], "what_it_is": "SwiftTerm is a VT100/Xterm terminal emulator library written in Swift, with a UI-agnostic engine plus front-ends for macOS (AppKit) and iOS (UIKit). It can be embedded into apps, SSH clients, and headless scenarios, and is used in commercial products like Secure ShellFish and La Terminal.", "when_to_avoid": ["you need a terminal emulator for Linux or Windows GUIs (front-ends here target Apple platforms)", "you want a ready-made standalone terminal application rather than a library", "your project is not in Swift or the Apple ecosystem"], "when_to_choose": ["you need a terminal emulator embedded in a Swift macOS or iOS application", "you want a UI-agnostic terminal engine you can wire to your own front-end", "you need strong Unicode, UTF-8, and grapheme cluster handling in terminal rendering"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/swiftterm", "repo": "migueldeicaza/SwiftTerm", "role": "main", "score": 99}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:19.619080+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:42:50.409699+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "146a8583fb93d3a14fc02fc60caa5d1c623ba7af1b80d0735ea122c9f7ea3d16", "fetched_at": "2026-08-28T04:05:19.619080+00:00", "kind": "readme", "missing": false, "url": "https://github.com/migueldeicaza/SwiftTerm"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:19.619080+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:42:50.409699+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "146a8583fb93d3a14fc02fc60caa5d1c623ba7af1b80d0735ea122c9f7ea3d16", "fetched_at": "2026-08-28T04:05:19.619080+00:00", "kind": "readme", "missing": false, "url": "https://github.com/migueldeicaza/SwiftTerm"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:42:50.409699+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "146a8583fb93d3a14fc02fc60caa5d1c623ba7af1b80d0735ea122c9f7ea3d16", "fetched_at": "2026-08-28T04:05:19.619080+00:00", "kind": "readme", "missing": false, "url": "https://github.com/migueldeicaza/SwiftTerm"}], "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:05:19.619080+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:19.619080+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:19.619080+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:42:50.409699+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "146a8583fb93d3a14fc02fc60caa5d1c623ba7af1b80d0735ea122c9f7ea3d16", "fetched_at": "2026-08-28T04:05:19.619080+00:00", "kind": "readme", "missing": false, "url": "https://github.com/migueldeicaza/SwiftTerm"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:19.619080+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:19.619080+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:42:50.409699+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "146a8583fb93d3a14fc02fc60caa5d1c623ba7af1b80d0735ea122c9f7ea3d16", "fetched_at": "2026-08-28T04:05:19.619080+00:00", "kind": "readme", "missing": false, "url": "https://github.com/migueldeicaza/SwiftTerm"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:19.619080+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:19.619080+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:19.619080+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:42:50.409699+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "146a8583fb93d3a14fc02fc60caa5d1c623ba7af1b80d0735ea122c9f7ea3d16", "fetched_at": "2026-08-28T04:05:19.619080+00:00", "kind": "readme", "missing": false, "url": "https://github.com/migueldeicaza/SwiftTerm"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:19.619080+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:19.619080+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:42:50.409699+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "146a8583fb93d3a14fc02fc60caa5d1c623ba7af1b80d0735ea122c9f7ea3d16", "fetched_at": "2026-08-28T04:05:19.619080+00:00", "kind": "readme", "missing": false, "url": "https://github.com/migueldeicaza/SwiftTerm"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:42:50.409699+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "146a8583fb93d3a14fc02fc60caa5d1c623ba7af1b80d0735ea122c9f7ea3d16", "fetched_at": "2026-08-28T04:05:19.619080+00:00", "kind": "readme", "missing": false, "url": "https://github.com/migueldeicaza/SwiftTerm"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:42:50.409699+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "146a8583fb93d3a14fc02fc60caa5d1c623ba7af1b80d0735ea122c9f7ea3d16", "fetched_at": "2026-08-28T04:05:19.619080+00:00", "kind": "readme", "missing": false, "url": "https://github.com/migueldeicaza/SwiftTerm"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:42:50.409699+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "146a8583fb93d3a14fc02fc60caa5d1c623ba7af1b80d0735ea122c9f7ea3d16", "fetched_at": "2026-08-28T04:05:19.619080+00:00", "kind": "readme", "missing": false, "url": "https://github.com/migueldeicaza/SwiftTerm"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 98}, "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": 2716, "days_push": 8, "days_rel": 15, "gap_med": 10.0, "n_releases_24m": 17}, "score": 99, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}