{"adoption": {"forks": 290, "observed_at": "2026-08-28T04:05:30.298677+00:00", "stars": 1741}, "canonical_url": "https://ross.abutalabs.com/products/swiftymarkdown", "card": {"archived": false, "artifact_type": "library", "description": "Converts Markdown files and strings into NSAttributedStrings with lots of customisation options.", "domain": ["text-editors", "developer-tools", "mobile-development", "cross-platform"], "enriched": true, "function": ["markdown", "parser", "serialization"], "health_score": 20, "homepage": null, "language": "Swift", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["SimonFairbairn/SwiftyMarkdown"], "name": "SimonFairbairn/SwiftyMarkdown", "platform": [], "pushed_at": "2024-08-07T04:55:05+00:00", "repo": "SimonFairbairn/SwiftyMarkdown", "stars": 1741, "tags": ["nsattributedstring", "apple-platforms", "dynamic-type", "dark-mode", "uikit", "swift", "ios", "macos", "mobile", "desktop"], "topics": ["character-styles", "formatting", "markdown", "markdown-converter"], "urls": [], "use_cases": ["render markdown text in a UILabel or UITextView", "convert markdown strings to attributed strings in an iOS app", "display markdown files bundled with an app", "customize fonts and styles for markdown rendering on Apple platforms", "support dark mode when showing markdown content", "parse markdown with lists, blockquotes, and code blocks in Swift"], "what_it_is": "A Swift library that converts Markdown files and strings into NSAttributedStrings with extensive customization options. It supports Apple platforms with dynamic type, Dark Mode, and a rules-based tokenisation engine for headings, lists, links, images, code blocks, and blockquotes.", "when_to_avoid": ["you need full CommonMark compliance or complex Markdown extensions like tables or footnotes", "you are targeting non-Apple platforms", "you need HTML or cross-platform rendering like WebKit-based views", "you need to convert Markdown to formats other than attributed strings"], "when_to_choose": ["you need to render Markdown natively in iOS, macOS, tvOS, or watchOS apps", "you want NSAttributedString output for UIKit or AppKit text controls", "you need Dynamic Type and Dark Mode support out of the box", "you want a pure Swift, lightweight Markdown-to-attributed-string converter"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/swiftymarkdown", "repo": "SimonFairbairn/SwiftyMarkdown", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.298677+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:30:01.698076+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f386aa16259afbd63652a4c4564535d339ee889ee05454ff5c1b4e79d91e31d", "fetched_at": "2026-08-28T04:05:30.298677+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SimonFairbairn/SwiftyMarkdown"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.298677+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:30:01.698076+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f386aa16259afbd63652a4c4564535d339ee889ee05454ff5c1b4e79d91e31d", "fetched_at": "2026-08-28T04:05:30.298677+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SimonFairbairn/SwiftyMarkdown"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:30:01.698076+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f386aa16259afbd63652a4c4564535d339ee889ee05454ff5c1b4e79d91e31d", "fetched_at": "2026-08-28T04:05:30.298677+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SimonFairbairn/SwiftyMarkdown"}], "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:30.298677+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.298677+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.298677+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:30:01.698076+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f386aa16259afbd63652a4c4564535d339ee889ee05454ff5c1b4e79d91e31d", "fetched_at": "2026-08-28T04:05:30.298677+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SimonFairbairn/SwiftyMarkdown"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.298677+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.298677+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:30:01.698076+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f386aa16259afbd63652a4c4564535d339ee889ee05454ff5c1b4e79d91e31d", "fetched_at": "2026-08-28T04:05:30.298677+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SimonFairbairn/SwiftyMarkdown"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.298677+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.298677+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.298677+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:30:01.698076+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f386aa16259afbd63652a4c4564535d339ee889ee05454ff5c1b4e79d91e31d", "fetched_at": "2026-08-28T04:05:30.298677+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SimonFairbairn/SwiftyMarkdown"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.298677+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:30.298677+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:30:01.698076+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f386aa16259afbd63652a4c4564535d339ee889ee05454ff5c1b4e79d91e31d", "fetched_at": "2026-08-28T04:05:30.298677+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SimonFairbairn/SwiftyMarkdown"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:30:01.698076+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f386aa16259afbd63652a4c4564535d339ee889ee05454ff5c1b4e79d91e31d", "fetched_at": "2026-08-28T04:05:30.298677+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SimonFairbairn/SwiftyMarkdown"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:30:01.698076+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f386aa16259afbd63652a4c4564535d339ee889ee05454ff5c1b4e79d91e31d", "fetched_at": "2026-08-28T04:05:30.298677+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SimonFairbairn/SwiftyMarkdown"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:30:01.698076+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5f386aa16259afbd63652a4c4564535d339ee889ee05454ff5c1b4e79d91e31d", "fetched_at": "2026-08-28T04:05:30.298677+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SimonFairbairn/SwiftyMarkdown"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3833, "days_push": 756, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}