{"adoption": {"forks": 89, "observed_at": "2026-08-28T04:04:33.394581+00:00", "stars": 1377}, "canonical_url": "https://ross.abutalabs.com/products/rajdeep-proton", "card": {"archived": false, "artifact_type": "library", "description": "Purely native and extensible rich text editor for iOS and macOS Catalyst apps", "domain": ["text-editors", "mobile-development", "cross-platform"], "enriched": true, "function": ["editor", "ui-components", "plugin-system"], "health_score": 37, "homepage": null, "language": "Swift", "license": "NOASSERTION", "license_family": "other", "maturity": "experimental", "member_repos": ["rajdeep/proton"], "name": "rajdeep/proton", "platform": [], "pushed_at": "2025-04-21T09:20:06+00:00", "repo": "rajdeep/proton", "stars": 1377, "tags": ["rich-text-editor", "textkit", "wysiwyg", "uitextview", "maccatalyst", "extensible", "ios", "macos", "swift"], "topics": ["editor", "plugin-architecture", "extensible", "textkit", "wysiwyg-editor", "native", "rich-text-editor", "richtexteditor", "swift", "maccatalyst", "ios", "wysiwyg", "text"], "urls": [], "use_cases": ["build a wysiwyg rich text editor in an iOS app", "embed custom views like images or nested editors inline with text", "convert markdown-style markup into formatted text as the user types", "share one formatting toolbar across multiple editor views", "replace UITextView with an extensible rich text component", "support rich text editing on macOS Catalyst with minimal effort"], "what_it_is": "Proton is a native Swift rich text editor library for iOS and macOS Catalyst, built on TextKit as an extensible replacement for UITextView. It supports embedding arbitrary views (including nested editors) as attachments, text processors for markup-as-you-type, and editor commands for on-demand formatting.", "when_to_avoid": ["you need a cross-platform editor beyond Apple platforms", "you require a fully stable 1.0 API without breaking changes", "you need a web-based or JavaScript rich text editor"], "when_to_choose": ["you need a native Swift rich text editor on iOS or macOS Catalyst", "you want to embed arbitrary UIViews inline with flowing text", "you need plugin-style extensibility via text processors and commands"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/rajdeep-proton", "repo": "rajdeep/proton", "role": "main", "score": 30}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.394581+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:40:27.429332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e808bbc3f574f55fe559e655aa123f4941089013bd5f1cb61a1e7145b6ddcd7", "fetched_at": "2026-08-28T04:04:33.394581+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rajdeep/proton"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.394581+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:40:27.429332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e808bbc3f574f55fe559e655aa123f4941089013bd5f1cb61a1e7145b6ddcd7", "fetched_at": "2026-08-28T04:04:33.394581+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rajdeep/proton"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:40:27.429332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e808bbc3f574f55fe559e655aa123f4941089013bd5f1cb61a1e7145b6ddcd7", "fetched_at": "2026-08-28T04:04:33.394581+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rajdeep/proton"}], "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:04:33.394581+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.394581+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.394581+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:40:27.429332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e808bbc3f574f55fe559e655aa123f4941089013bd5f1cb61a1e7145b6ddcd7", "fetched_at": "2026-08-28T04:04:33.394581+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rajdeep/proton"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.394581+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.394581+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:40:27.429332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e808bbc3f574f55fe559e655aa123f4941089013bd5f1cb61a1e7145b6ddcd7", "fetched_at": "2026-08-28T04:04:33.394581+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rajdeep/proton"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.394581+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.394581+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.394581+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:40:27.429332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e808bbc3f574f55fe559e655aa123f4941089013bd5f1cb61a1e7145b6ddcd7", "fetched_at": "2026-08-28T04:04:33.394581+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rajdeep/proton"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.394581+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:33.394581+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:40:27.429332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e808bbc3f574f55fe559e655aa123f4941089013bd5f1cb61a1e7145b6ddcd7", "fetched_at": "2026-08-28T04:04:33.394581+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rajdeep/proton"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:40:27.429332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e808bbc3f574f55fe559e655aa123f4941089013bd5f1cb61a1e7145b6ddcd7", "fetched_at": "2026-08-28T04:04:33.394581+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rajdeep/proton"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:40:27.429332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e808bbc3f574f55fe559e655aa123f4941089013bd5f1cb61a1e7145b6ddcd7", "fetched_at": "2026-08-28T04:04:33.394581+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rajdeep/proton"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:40:27.429332+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3e808bbc3f574f55fe559e655aa123f4941089013bd5f1cb61a1e7145b6ddcd7", "fetched_at": "2026-08-28T04:04:33.394581+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rajdeep/proton"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 17, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2437, "days_push": 499, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 30, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}