{"adoption": {"forks": 115, "observed_at": "2026-09-01T02:13:55.216425+00:00", "stars": 1093}, "canonical_url": "https://ross.abutalabs.com/products/terra-draw", "card": {"archived": false, "artifact_type": "library", "description": "A library for drawing on maps that supports Mapbox, MapLibre, Google Maps, OpenLayers and Leaflet out the box ", "domain": ["web-development", "frontend"], "enriched": true, "function": ["ui-components", "graphics", "geospatial"], "health_score": 100, "homepage": "https://terradraw.io", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["JamesLMilner/terra-draw"], "name": "JamesLMilner/terra-draw", "platform": ["browser"], "pushed_at": "2026-08-31T12:15:18+00:00", "repo": "JamesLMilner/terra-draw", "stars": 1093, "tags": ["map-drawing", "geo", "leaflet", "mapbox-gl", "maplibre", "google-maps", "openlayers", "arcgis", "polygon-drawing", "geodesic", "maps", "geospatial", "javascript", "typescript"], "topics": ["draw", "geojson", "google-maps-api", "leaflet", "map", "mapbox-gl", "maps", "drawing", "maplibre", "polygon", "geodesic", "geojson-editor", "geometry", "maplibre-gl-js"], "urls": [], "use_cases": ["draw polygons on a map to define areas of interest", "let users sketch routes or lines on a Leaflet map", "add drawing tools to a MapLibre GL JS application", "capture GeoJSON geometry input from users on Google Maps", "build a map annotation or measurement feature", "edit existing GeoJSON features on a web map", "draw geodesic lines that account for earth curvature"], "what_it_is": "Terra Draw is a TypeScript library for drawing shapes and geometries on web maps, with built-in adapters for Leaflet, OpenLayers, MapLibre GL JS, Google Maps, Mapbox GL JS, and ArcGIS JS SDK. It centralizes drawing logic into reusable modes (point, line, polygon, geodesic, etc.) that work consistently across mapping libraries.", "when_to_avoid": ["you use a mapping library without a supported adapter", "you need advanced CAD-style editing or 3D drawing", "you only need static map rendering with no user interaction"], "when_to_choose": ["you need consistent drawing functionality across multiple mapping libraries", "you want out-of-the-box drawing modes without building from scratch", "your app uses MapLibre, Mapbox, Leaflet, OpenLayers, Google Maps, or ArcGIS JS", "you need GeoJSON output from user-drawn geometries"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/terra-draw", "repo": "JamesLMilner/terra-draw", "role": "main", "score": 99}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-09-01T02:13:55.216425+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:49:11.362807+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8fcf69d00f1a5b2e35b121829723c77016f0d07d25007f965fdb1e7641a99b79", "fetched_at": "2026-09-01T02:13:55.216425+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JamesLMilner/terra-draw"}, {"content_hash": "97049b2564b5d2e67c008a1ef7f3c5bdb29af8a3dfcb4459d2db846c4f3bb853", "fetched_at": "2026-08-29T12:51:22.330440+00:00", "kind": "homepage", "missing": false, "url": "https://terradraw.io"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-09-01T02:13:55.216425+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:49:11.362807+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8fcf69d00f1a5b2e35b121829723c77016f0d07d25007f965fdb1e7641a99b79", "fetched_at": "2026-09-01T02:13:55.216425+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JamesLMilner/terra-draw"}, {"content_hash": "97049b2564b5d2e67c008a1ef7f3c5bdb29af8a3dfcb4459d2db846c4f3bb853", "fetched_at": "2026-08-29T12:51:22.330440+00:00", "kind": "homepage", "missing": false, "url": "https://terradraw.io"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:49:11.362807+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8fcf69d00f1a5b2e35b121829723c77016f0d07d25007f965fdb1e7641a99b79", "fetched_at": "2026-09-01T02:13:55.216425+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JamesLMilner/terra-draw"}, {"content_hash": "97049b2564b5d2e67c008a1ef7f3c5bdb29af8a3dfcb4459d2db846c4f3bb853", "fetched_at": "2026-08-29T12:51:22.330440+00:00", "kind": "homepage", "missing": false, "url": "https://terradraw.io"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-09-01T02:13:55.216425+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-09-01T02:13:55.216425+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-09-01T02:13:55.216425+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:49:11.362807+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8fcf69d00f1a5b2e35b121829723c77016f0d07d25007f965fdb1e7641a99b79", "fetched_at": "2026-09-01T02:13:55.216425+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JamesLMilner/terra-draw"}, {"content_hash": "97049b2564b5d2e67c008a1ef7f3c5bdb29af8a3dfcb4459d2db846c4f3bb853", "fetched_at": "2026-08-29T12:51:22.330440+00:00", "kind": "homepage", "missing": false, "url": "https://terradraw.io"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-09-01T02:13:55.216425+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-09-01T02:13:55.216425+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:49:11.362807+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8fcf69d00f1a5b2e35b121829723c77016f0d07d25007f965fdb1e7641a99b79", "fetched_at": "2026-09-01T02:13:55.216425+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JamesLMilner/terra-draw"}, {"content_hash": "97049b2564b5d2e67c008a1ef7f3c5bdb29af8a3dfcb4459d2db846c4f3bb853", "fetched_at": "2026-08-29T12:51:22.330440+00:00", "kind": "homepage", "missing": false, "url": "https://terradraw.io"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-09-01T02:13:55.216425+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-09-01T02:13:55.216425+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-09-01T02:13:55.216425+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:49:11.362807+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8fcf69d00f1a5b2e35b121829723c77016f0d07d25007f965fdb1e7641a99b79", "fetched_at": "2026-09-01T02:13:55.216425+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JamesLMilner/terra-draw"}, {"content_hash": "97049b2564b5d2e67c008a1ef7f3c5bdb29af8a3dfcb4459d2db846c4f3bb853", "fetched_at": "2026-08-29T12:51:22.330440+00:00", "kind": "homepage", "missing": false, "url": "https://terradraw.io"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-09-01T02:13:55.216425+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-09-01T02:13:55.216425+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:49:11.362807+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8fcf69d00f1a5b2e35b121829723c77016f0d07d25007f965fdb1e7641a99b79", "fetched_at": "2026-09-01T02:13:55.216425+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JamesLMilner/terra-draw"}, {"content_hash": "97049b2564b5d2e67c008a1ef7f3c5bdb29af8a3dfcb4459d2db846c4f3bb853", "fetched_at": "2026-08-29T12:51:22.330440+00:00", "kind": "homepage", "missing": false, "url": "https://terradraw.io"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:49:11.362807+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8fcf69d00f1a5b2e35b121829723c77016f0d07d25007f965fdb1e7641a99b79", "fetched_at": "2026-09-01T02:13:55.216425+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JamesLMilner/terra-draw"}, {"content_hash": "97049b2564b5d2e67c008a1ef7f3c5bdb29af8a3dfcb4459d2db846c4f3bb853", "fetched_at": "2026-08-29T12:51:22.330440+00:00", "kind": "homepage", "missing": false, "url": "https://terradraw.io"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:49:11.362807+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8fcf69d00f1a5b2e35b121829723c77016f0d07d25007f965fdb1e7641a99b79", "fetched_at": "2026-09-01T02:13:55.216425+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JamesLMilner/terra-draw"}, {"content_hash": "97049b2564b5d2e67c008a1ef7f3c5bdb29af8a3dfcb4459d2db846c4f3bb853", "fetched_at": "2026-08-29T12:51:22.330440+00:00", "kind": "homepage", "missing": false, "url": "https://terradraw.io"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:49:11.362807+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8fcf69d00f1a5b2e35b121829723c77016f0d07d25007f965fdb1e7641a99b79", "fetched_at": "2026-09-01T02:13:55.216425+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JamesLMilner/terra-draw"}, {"content_hash": "97049b2564b5d2e67c008a1ef7f3c5bdb29af8a3dfcb4459d2db846c4f3bb853", "fetched_at": "2026-08-29T12:51:22.330440+00:00", "kind": "homepage", "missing": false, "url": "https://terradraw.io"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 100, "longevity": 100, "rhythm": 96}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1510, "days_push": 2, "days_rel": 25, "gap_med": 16, "n_releases_24m": 2}, "score": 99, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 5, "stale_scrape": false}}