{"adoption": {"forks": 266, "observed_at": "2026-08-28T04:04:21.368919+00:00", "stars": 1319}, "canonical_url": "https://ross.abutalabs.com/products/jsreport", "card": {"archived": false, "artifact_type": "application", "description": "javascript based business reporting platform :rocket:", "domain": ["pdf", "backend", "web-development", "developer-tools"], "enriched": true, "function": ["templating", "pdf", "scheduling", "api-framework", "http-server", "email", "self-hosted", "developer-tools"], "health_score": 100, "homepage": "https://jsreport.net", "language": "JavaScript", "license": "LGPL-3.0", "license_family": "copyleft", "maturity": "stable", "member_repos": ["jsreport/jsreport"], "name": "jsreport/jsreport", "platform": ["windows", "self-hosted", "cloud", "cross-platform"], "pushed_at": "2026-08-26T18:20:38+00:00", "repo": "jsreport/jsreport", "stars": 1319, "tags": ["reporting-server", "report-designer", "handlebars", "excel-reports", "docx", "rest-api", "business-intelligence", "report-templates", "reporting", "automation", "nodejs", "docker", "linux", "macos"], "topics": ["reporting", "pdf", "excel"], "urls": [], "use_cases": ["generate pdf reports from html templates", "create excel reports from an xlsx template", "schedule recurring report generation and email delivery", "embed a reporting server into a node.js application", "design reports with a web-based report designer", "render invoices or e-tickets as pdf via a REST API", "build dashboards with charts exported to pdf"], "what_it_is": "jsreport is an open-source JavaScript-based reporting platform and server for designing and rendering reports using templating engines like Handlebars. It outputs HTML, PDF, Excel, DOCX, and CSV, and ships with a web-based designer, REST API, scheduling, user management, and email delivery.", "when_to_avoid": ["you only need simple one-off PDF generation without a reporting server", "you require a permissive license - jsreport is LGPL-3.0", "your stack is not JavaScript/Node.js based and you prefer native reporting tools", "you need heavy statistical BI features rather than document generation"], "when_to_choose": ["you need a self-hosted reporting server with multiple output formats", "you want to define reports with JavaScript templating engines and full CSS support", "you need scheduling, versioning, and user management out of the box", "you want to render reports programmatically via REST API, CLI, or SDKs"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/jsreport", "repo": "jsreport/jsreport", "role": "main", "score": 94}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:21.368919+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:47:54.436333+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3daf9c140a4bbbd32b357416a9d9382e18b46394436e70c8a492bfab085d4ea5", "fetched_at": "2026-08-28T04:04:21.368919+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jsreport/jsreport"}, {"content_hash": "0894e5043f40d3873d6028852d6c27a3652c77363226873a01cdf4159168ae88", "fetched_at": "2026-08-29T12:06:42.516329+00:00", "kind": "homepage", "missing": false, "url": "https://jsreport.net"}, {"content_hash": "19272798093b44675a31e4108fc8e5a2b5636a65f5b74119c12a3b5ee5413eac", "fetched_at": "2026-08-29T12:06:42.518818+00:00", "kind": "site_page", "missing": false, "url": "https://jsreport.net/about"}, {"content_hash": "f5f8e4b8f895de075630424b53ca3b6eb01d9939b2756807e6786e79436c1637", "fetched_at": "2026-08-29T12:06:42.520572+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/jsreport"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:21.368919+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:47:54.436333+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3daf9c140a4bbbd32b357416a9d9382e18b46394436e70c8a492bfab085d4ea5", "fetched_at": "2026-08-28T04:04:21.368919+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jsreport/jsreport"}, {"content_hash": "0894e5043f40d3873d6028852d6c27a3652c77363226873a01cdf4159168ae88", "fetched_at": "2026-08-29T12:06:42.516329+00:00", "kind": "homepage", "missing": false, "url": "https://jsreport.net"}, {"content_hash": "19272798093b44675a31e4108fc8e5a2b5636a65f5b74119c12a3b5ee5413eac", "fetched_at": "2026-08-29T12:06:42.518818+00:00", "kind": "site_page", "missing": false, "url": "https://jsreport.net/about"}, {"content_hash": "f5f8e4b8f895de075630424b53ca3b6eb01d9939b2756807e6786e79436c1637", "fetched_at": "2026-08-29T12:06:42.520572+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/jsreport"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:47:54.436333+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3daf9c140a4bbbd32b357416a9d9382e18b46394436e70c8a492bfab085d4ea5", "fetched_at": "2026-08-28T04:04:21.368919+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jsreport/jsreport"}, {"content_hash": "0894e5043f40d3873d6028852d6c27a3652c77363226873a01cdf4159168ae88", "fetched_at": "2026-08-29T12:06:42.516329+00:00", "kind": "homepage", "missing": false, "url": "https://jsreport.net"}, {"content_hash": "19272798093b44675a31e4108fc8e5a2b5636a65f5b74119c12a3b5ee5413eac", "fetched_at": "2026-08-29T12:06:42.518818+00:00", "kind": "site_page", "missing": false, "url": "https://jsreport.net/about"}, {"content_hash": "f5f8e4b8f895de075630424b53ca3b6eb01d9939b2756807e6786e79436c1637", "fetched_at": "2026-08-29T12:06:42.520572+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/jsreport"}], "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:21.368919+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:21.368919+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:21.368919+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:47:54.436333+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3daf9c140a4bbbd32b357416a9d9382e18b46394436e70c8a492bfab085d4ea5", "fetched_at": "2026-08-28T04:04:21.368919+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jsreport/jsreport"}, {"content_hash": "0894e5043f40d3873d6028852d6c27a3652c77363226873a01cdf4159168ae88", "fetched_at": "2026-08-29T12:06:42.516329+00:00", "kind": "homepage", "missing": false, "url": "https://jsreport.net"}, {"content_hash": "19272798093b44675a31e4108fc8e5a2b5636a65f5b74119c12a3b5ee5413eac", "fetched_at": "2026-08-29T12:06:42.518818+00:00", "kind": "site_page", "missing": false, "url": "https://jsreport.net/about"}, {"content_hash": "f5f8e4b8f895de075630424b53ca3b6eb01d9939b2756807e6786e79436c1637", "fetched_at": "2026-08-29T12:06:42.520572+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/jsreport"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:21.368919+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:21.368919+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:47:54.436333+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3daf9c140a4bbbd32b357416a9d9382e18b46394436e70c8a492bfab085d4ea5", "fetched_at": "2026-08-28T04:04:21.368919+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jsreport/jsreport"}, {"content_hash": "0894e5043f40d3873d6028852d6c27a3652c77363226873a01cdf4159168ae88", "fetched_at": "2026-08-29T12:06:42.516329+00:00", "kind": "homepage", "missing": false, "url": "https://jsreport.net"}, {"content_hash": "19272798093b44675a31e4108fc8e5a2b5636a65f5b74119c12a3b5ee5413eac", "fetched_at": "2026-08-29T12:06:42.518818+00:00", "kind": "site_page", "missing": false, "url": "https://jsreport.net/about"}, {"content_hash": "f5f8e4b8f895de075630424b53ca3b6eb01d9939b2756807e6786e79436c1637", "fetched_at": "2026-08-29T12:06:42.520572+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/jsreport"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:21.368919+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:21.368919+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:21.368919+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:47:54.436333+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3daf9c140a4bbbd32b357416a9d9382e18b46394436e70c8a492bfab085d4ea5", "fetched_at": "2026-08-28T04:04:21.368919+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jsreport/jsreport"}, {"content_hash": "0894e5043f40d3873d6028852d6c27a3652c77363226873a01cdf4159168ae88", "fetched_at": "2026-08-29T12:06:42.516329+00:00", "kind": "homepage", "missing": false, "url": "https://jsreport.net"}, {"content_hash": "19272798093b44675a31e4108fc8e5a2b5636a65f5b74119c12a3b5ee5413eac", "fetched_at": "2026-08-29T12:06:42.518818+00:00", "kind": "site_page", "missing": false, "url": "https://jsreport.net/about"}, {"content_hash": "f5f8e4b8f895de075630424b53ca3b6eb01d9939b2756807e6786e79436c1637", "fetched_at": "2026-08-29T12:06:42.520572+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/jsreport"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:21.368919+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:21.368919+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:47:54.436333+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3daf9c140a4bbbd32b357416a9d9382e18b46394436e70c8a492bfab085d4ea5", "fetched_at": "2026-08-28T04:04:21.368919+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jsreport/jsreport"}, {"content_hash": "0894e5043f40d3873d6028852d6c27a3652c77363226873a01cdf4159168ae88", "fetched_at": "2026-08-29T12:06:42.516329+00:00", "kind": "homepage", "missing": false, "url": "https://jsreport.net"}, {"content_hash": "19272798093b44675a31e4108fc8e5a2b5636a65f5b74119c12a3b5ee5413eac", "fetched_at": "2026-08-29T12:06:42.518818+00:00", "kind": "site_page", "missing": false, "url": "https://jsreport.net/about"}, {"content_hash": "f5f8e4b8f895de075630424b53ca3b6eb01d9939b2756807e6786e79436c1637", "fetched_at": "2026-08-29T12:06:42.520572+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/jsreport"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:47:54.436333+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3daf9c140a4bbbd32b357416a9d9382e18b46394436e70c8a492bfab085d4ea5", "fetched_at": "2026-08-28T04:04:21.368919+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jsreport/jsreport"}, {"content_hash": "0894e5043f40d3873d6028852d6c27a3652c77363226873a01cdf4159168ae88", "fetched_at": "2026-08-29T12:06:42.516329+00:00", "kind": "homepage", "missing": false, "url": "https://jsreport.net"}, {"content_hash": "19272798093b44675a31e4108fc8e5a2b5636a65f5b74119c12a3b5ee5413eac", "fetched_at": "2026-08-29T12:06:42.518818+00:00", "kind": "site_page", "missing": false, "url": "https://jsreport.net/about"}, {"content_hash": "f5f8e4b8f895de075630424b53ca3b6eb01d9939b2756807e6786e79436c1637", "fetched_at": "2026-08-29T12:06:42.520572+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/jsreport"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:47:54.436333+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3daf9c140a4bbbd32b357416a9d9382e18b46394436e70c8a492bfab085d4ea5", "fetched_at": "2026-08-28T04:04:21.368919+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jsreport/jsreport"}, {"content_hash": "0894e5043f40d3873d6028852d6c27a3652c77363226873a01cdf4159168ae88", "fetched_at": "2026-08-29T12:06:42.516329+00:00", "kind": "homepage", "missing": false, "url": "https://jsreport.net"}, {"content_hash": "19272798093b44675a31e4108fc8e5a2b5636a65f5b74119c12a3b5ee5413eac", "fetched_at": "2026-08-29T12:06:42.518818+00:00", "kind": "site_page", "missing": false, "url": "https://jsreport.net/about"}, {"content_hash": "f5f8e4b8f895de075630424b53ca3b6eb01d9939b2756807e6786e79436c1637", "fetched_at": "2026-08-29T12:06:42.520572+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/jsreport"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:47:54.436333+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3daf9c140a4bbbd32b357416a9d9382e18b46394436e70c8a492bfab085d4ea5", "fetched_at": "2026-08-28T04:04:21.368919+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jsreport/jsreport"}, {"content_hash": "0894e5043f40d3873d6028852d6c27a3652c77363226873a01cdf4159168ae88", "fetched_at": "2026-08-29T12:06:42.516329+00:00", "kind": "homepage", "missing": false, "url": "https://jsreport.net"}, {"content_hash": "19272798093b44675a31e4108fc8e5a2b5636a65f5b74119c12a3b5ee5413eac", "fetched_at": "2026-08-29T12:06:42.518818+00:00", "kind": "site_page", "missing": false, "url": "https://jsreport.net/about"}, {"content_hash": "f5f8e4b8f895de075630424b53ca3b6eb01d9939b2756807e6786e79436c1637", "fetched_at": "2026-08-29T12:06:42.520572+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/jsreport"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 84}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4904, "days_push": 7, "days_rel": 29, "gap_med": 77, "n_releases_24m": 10}, "score": 94, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}