{"adoption": {"forks": 221, "observed_at": "2026-08-28T04:04:54.348976+00:00", "stars": 1501}, "canonical_url": "https://ross.abutalabs.com/products/montage", "card": {"archived": false, "artifact_type": "framework", "description": "Montage is an elegant, open source HTML5 framework maintained by Montage Studio that rivals native SDKs, yet is easier to learn. It offers modular components, two-way data binding, and much more. Join us on irc.freenode.net#montage. Sign up for our beta to build Montage applications in the cloud.", "domain": ["web-development", "frontend"], "enriched": true, "function": ["frontend-framework", "ui-components", "state-management", "templating", "serialization"], "health_score": 78, "homepage": "http://montagestudio.com/montagejs", "language": "JavaScript", "license": "NOASSERTION", "license_family": "other", "maturity": "maintenance", "member_repos": ["montagejs/montage"], "name": "montagejs/montage", "platform": ["browser", "cross-platform"], "pushed_at": "2026-08-05T19:37:25+00:00", "repo": "montagejs/montage", "stars": 1501, "tags": ["html5", "single-page-applications", "data-binding", "commonjs", "component-based", "functional-reactive-bindings", "nodejs"], "topics": [], "urls": [], "use_cases": ["build a single-page web application with modular components", "two-way data binding between UI and application state", "create reusable custom UI components with HTML templates and CSS", "manage application state with functional reactive bindings", "develop rich HTML5 apps using CommonJS modules"], "what_it_is": "Montage is an open-source HTML5 application framework for building rich single-page web applications using standard web technologies. It provides encapsulated custom UI components, functional reactive two-way data binding, object serialization with DOM mapping, and CommonJS module support.", "when_to_avoid": ["you need a framework with a large active community and ecosystem", "you are building with modern React/Vue-style virtual DOM workflows", "you require server-side rendering or mobile native output", "you want long-term assurance of active maintenance"], "when_to_choose": ["you want a component-based HTML5 framework built on standard web technologies", "you need powerful reactive data bindings over property paths and collections", "you prefer HTML/CSS templates over JavaScript-driven rendering", "your team wants separation of concerns between designers and developers"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/montage", "repo": "montagejs/montage", "role": "main", "score": 66}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.348976+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:32:57.105643+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1e263c2473db421e5813d8b5ae7f7a13d86d2a38771660f64671b9b833a40605", "fetched_at": "2026-08-28T04:04:54.348976+00:00", "kind": "readme", "missing": false, "url": "https://github.com/montagejs/montage"}, {"content_hash": "4b425e4335a0f1f7b1c51dd08c3078c035799eca301a6cd005683b914dec8b04", "fetched_at": "2026-08-29T11:38:36.033926+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/montage"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.348976+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:32:57.105643+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1e263c2473db421e5813d8b5ae7f7a13d86d2a38771660f64671b9b833a40605", "fetched_at": "2026-08-28T04:04:54.348976+00:00", "kind": "readme", "missing": false, "url": "https://github.com/montagejs/montage"}, {"content_hash": "4b425e4335a0f1f7b1c51dd08c3078c035799eca301a6cd005683b914dec8b04", "fetched_at": "2026-08-29T11:38:36.033926+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/montage"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:32:57.105643+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1e263c2473db421e5813d8b5ae7f7a13d86d2a38771660f64671b9b833a40605", "fetched_at": "2026-08-28T04:04:54.348976+00:00", "kind": "readme", "missing": false, "url": "https://github.com/montagejs/montage"}, {"content_hash": "4b425e4335a0f1f7b1c51dd08c3078c035799eca301a6cd005683b914dec8b04", "fetched_at": "2026-08-29T11:38:36.033926+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/montage"}], "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:54.348976+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.348976+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.348976+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:32:57.105643+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1e263c2473db421e5813d8b5ae7f7a13d86d2a38771660f64671b9b833a40605", "fetched_at": "2026-08-28T04:04:54.348976+00:00", "kind": "readme", "missing": false, "url": "https://github.com/montagejs/montage"}, {"content_hash": "4b425e4335a0f1f7b1c51dd08c3078c035799eca301a6cd005683b914dec8b04", "fetched_at": "2026-08-29T11:38:36.033926+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/montage"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.348976+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.348976+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:32:57.105643+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1e263c2473db421e5813d8b5ae7f7a13d86d2a38771660f64671b9b833a40605", "fetched_at": "2026-08-28T04:04:54.348976+00:00", "kind": "readme", "missing": false, "url": "https://github.com/montagejs/montage"}, {"content_hash": "4b425e4335a0f1f7b1c51dd08c3078c035799eca301a6cd005683b914dec8b04", "fetched_at": "2026-08-29T11:38:36.033926+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/montage"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.348976+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.348976+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.348976+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:32:57.105643+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1e263c2473db421e5813d8b5ae7f7a13d86d2a38771660f64671b9b833a40605", "fetched_at": "2026-08-28T04:04:54.348976+00:00", "kind": "readme", "missing": false, "url": "https://github.com/montagejs/montage"}, {"content_hash": "4b425e4335a0f1f7b1c51dd08c3078c035799eca301a6cd005683b914dec8b04", "fetched_at": "2026-08-29T11:38:36.033926+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/montage"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.348976+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.348976+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:32:57.105643+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1e263c2473db421e5813d8b5ae7f7a13d86d2a38771660f64671b9b833a40605", "fetched_at": "2026-08-28T04:04:54.348976+00:00", "kind": "readme", "missing": false, "url": "https://github.com/montagejs/montage"}, {"content_hash": "4b425e4335a0f1f7b1c51dd08c3078c035799eca301a6cd005683b914dec8b04", "fetched_at": "2026-08-29T11:38:36.033926+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/montage"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:32:57.105643+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1e263c2473db421e5813d8b5ae7f7a13d86d2a38771660f64671b9b833a40605", "fetched_at": "2026-08-28T04:04:54.348976+00:00", "kind": "readme", "missing": false, "url": "https://github.com/montagejs/montage"}, {"content_hash": "4b425e4335a0f1f7b1c51dd08c3078c035799eca301a6cd005683b914dec8b04", "fetched_at": "2026-08-29T11:38:36.033926+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/montage"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:32:57.105643+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1e263c2473db421e5813d8b5ae7f7a13d86d2a38771660f64671b9b833a40605", "fetched_at": "2026-08-28T04:04:54.348976+00:00", "kind": "readme", "missing": false, "url": "https://github.com/montagejs/montage"}, {"content_hash": "4b425e4335a0f1f7b1c51dd08c3078c035799eca301a6cd005683b914dec8b04", "fetched_at": "2026-08-29T11:38:36.033926+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/montage"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:32:57.105643+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1e263c2473db421e5813d8b5ae7f7a13d86d2a38771660f64671b9b833a40605", "fetched_at": "2026-08-28T04:04:54.348976+00:00", "kind": "readme", "missing": false, "url": "https://github.com/montagejs/montage"}, {"content_hash": "4b425e4335a0f1f7b1c51dd08c3078c035799eca301a6cd005683b914dec8b04", "fetched_at": "2026-08-29T11:38:36.033926+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/montage"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 96, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 5382, "days_push": 28, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 66, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}