{"adoption": {"forks": 240, "observed_at": "2026-08-28T04:09:56.241851+00:00", "stars": 7149}, "canonical_url": "https://ross.abutalabs.com/products/roughviz", "card": {"archived": false, "artifact_type": "library", "description": "Reusable JavaScript library for creating sketchy/hand-drawn styled charts in the browser.", "domain": ["data-visualization", "data-science", "web-development", "frontend"], "enriched": true, "function": ["data-visualization", "charts"], "health_score": 20, "homepage": "https://www.jwilber.me/roughviz/", "language": "JavaScript", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["jwilber/roughViz"], "name": "jwilber/roughViz", "platform": ["browser"], "pushed_at": "2024-04-26T11:54:48+00:00", "repo": "jwilber/roughViz", "stars": 7149, "tags": ["hand-drawn", "sketchy", "d3js", "roughjs", "charting", "svg", "xkcd-style", "responsive-charts", "nodejs"], "topics": ["data-visualization", "d3v5", "dashboard", "data-science", "visualization", "charting-library"], "urls": [], "use_cases": ["create hand-drawn style charts in the browser", "make sketchy xkcd-looking plots for a web page", "visualize data with a fun rough aesthetic instead of precise charts", "add informal looking bar and pie charts to a blog or presentation", "build a dashboard with sketchy styled charts via CDN or npm", "make charts that communicate intent or generality rather than precision"], "what_it_is": "roughViz.js is a reusable JavaScript library for creating sketchy, hand-drawn styled charts in the browser, built on D3v5, roughjs, and handy. It provides an API for bar, horizontal bar, donut, line, pie, scatter, stacked bar, force, and network charts with configurable roughness, fill styles, and colors.", "when_to_avoid": ["You need polished, professional charts for precise data reporting or enterprise BI", "You need a broad set of chart types, advanced interactions, or long-term active maintenance beyond the supported set", "You need server-side or non-browser chart rendering without a DOM"], "when_to_choose": ["Your communication goal is to show intent or generality, not absolute precision", "You want playful, hand-drawn aesthetics in web dashboards, demos, or articles", "You need a simple drop-in JS chart API usable via script tag or npm, with React/Vue/Python wrappers available"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/roughviz", "repo": "jwilber/roughViz", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.241851+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:40:00.448909+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac33cc410911eeeaca5a03821d83b03450ab8b123b5c662952c00340bc13d40", "fetched_at": "2026-08-28T04:09:56.241851+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jwilber/roughViz"}, {"content_hash": "a2c229dc5e1e60bac7b4f7da89e944be4c93c568b70e0a3a6e3121d3a0e7059c", "fetched_at": "2026-08-29T08:35:40.412065+00:00", "kind": "homepage", "missing": false, "url": "https://www.jwilber.me/roughviz/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.241851+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:40:00.448909+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac33cc410911eeeaca5a03821d83b03450ab8b123b5c662952c00340bc13d40", "fetched_at": "2026-08-28T04:09:56.241851+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jwilber/roughViz"}, {"content_hash": "a2c229dc5e1e60bac7b4f7da89e944be4c93c568b70e0a3a6e3121d3a0e7059c", "fetched_at": "2026-08-29T08:35:40.412065+00:00", "kind": "homepage", "missing": false, "url": "https://www.jwilber.me/roughviz/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:40:00.448909+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac33cc410911eeeaca5a03821d83b03450ab8b123b5c662952c00340bc13d40", "fetched_at": "2026-08-28T04:09:56.241851+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jwilber/roughViz"}, {"content_hash": "a2c229dc5e1e60bac7b4f7da89e944be4c93c568b70e0a3a6e3121d3a0e7059c", "fetched_at": "2026-08-29T08:35:40.412065+00:00", "kind": "homepage", "missing": false, "url": "https://www.jwilber.me/roughviz/"}], "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:56.241851+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.241851+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.241851+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:40:00.448909+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac33cc410911eeeaca5a03821d83b03450ab8b123b5c662952c00340bc13d40", "fetched_at": "2026-08-28T04:09:56.241851+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jwilber/roughViz"}, {"content_hash": "a2c229dc5e1e60bac7b4f7da89e944be4c93c568b70e0a3a6e3121d3a0e7059c", "fetched_at": "2026-08-29T08:35:40.412065+00:00", "kind": "homepage", "missing": false, "url": "https://www.jwilber.me/roughviz/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.241851+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.241851+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:40:00.448909+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac33cc410911eeeaca5a03821d83b03450ab8b123b5c662952c00340bc13d40", "fetched_at": "2026-08-28T04:09:56.241851+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jwilber/roughViz"}, {"content_hash": "a2c229dc5e1e60bac7b4f7da89e944be4c93c568b70e0a3a6e3121d3a0e7059c", "fetched_at": "2026-08-29T08:35:40.412065+00:00", "kind": "homepage", "missing": false, "url": "https://www.jwilber.me/roughviz/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.241851+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.241851+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.241851+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:40:00.448909+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac33cc410911eeeaca5a03821d83b03450ab8b123b5c662952c00340bc13d40", "fetched_at": "2026-08-28T04:09:56.241851+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jwilber/roughViz"}, {"content_hash": "a2c229dc5e1e60bac7b4f7da89e944be4c93c568b70e0a3a6e3121d3a0e7059c", "fetched_at": "2026-08-29T08:35:40.412065+00:00", "kind": "homepage", "missing": false, "url": "https://www.jwilber.me/roughviz/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.241851+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:56.241851+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:40:00.448909+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac33cc410911eeeaca5a03821d83b03450ab8b123b5c662952c00340bc13d40", "fetched_at": "2026-08-28T04:09:56.241851+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jwilber/roughViz"}, {"content_hash": "a2c229dc5e1e60bac7b4f7da89e944be4c93c568b70e0a3a6e3121d3a0e7059c", "fetched_at": "2026-08-29T08:35:40.412065+00:00", "kind": "homepage", "missing": false, "url": "https://www.jwilber.me/roughviz/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:40:00.448909+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac33cc410911eeeaca5a03821d83b03450ab8b123b5c662952c00340bc13d40", "fetched_at": "2026-08-28T04:09:56.241851+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jwilber/roughViz"}, {"content_hash": "a2c229dc5e1e60bac7b4f7da89e944be4c93c568b70e0a3a6e3121d3a0e7059c", "fetched_at": "2026-08-29T08:35:40.412065+00:00", "kind": "homepage", "missing": false, "url": "https://www.jwilber.me/roughviz/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:40:00.448909+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac33cc410911eeeaca5a03821d83b03450ab8b123b5c662952c00340bc13d40", "fetched_at": "2026-08-28T04:09:56.241851+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jwilber/roughViz"}, {"content_hash": "a2c229dc5e1e60bac7b4f7da89e944be4c93c568b70e0a3a6e3121d3a0e7059c", "fetched_at": "2026-08-29T08:35:40.412065+00:00", "kind": "homepage", "missing": false, "url": "https://www.jwilber.me/roughviz/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:40:00.448909+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4ac33cc410911eeeaca5a03821d83b03450ab8b123b5c662952c00340bc13d40", "fetched_at": "2026-08-28T04:09:56.241851+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jwilber/roughViz"}, {"content_hash": "a2c229dc5e1e60bac7b4f7da89e944be4c93c568b70e0a3a6e3121d3a0e7059c", "fetched_at": "2026-08-29T08:35:40.412065+00:00", "kind": "homepage", "missing": false, "url": "https://www.jwilber.me/roughviz/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2541, "days_push": 859, "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}}