{"adoption": {"forks": 85, "observed_at": "2026-08-28T04:05:32.038553+00:00", "stars": 1754}, "canonical_url": "https://ross.abutalabs.com/products/bgub-eta", "card": {"archived": false, "artifact_type": "library", "description": "Embedded JS template engine for Node, Deno, and the browser. Lighweight, fast, and pluggable. Written in TypeScript", "domain": ["web-development", "frontend", "backend", "developer-tools"], "enriched": true, "function": ["templating"], "health_score": 85, "homepage": "https://eta.js.org", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["bgub/eta"], "name": "bgub/eta", "platform": ["browser"], "pushed_at": "2026-04-25T18:35:44+00:00", "repo": "bgub/eta", "stars": 1754, "tags": ["template-engine", "ejs-alternative", "html-templates", "layouts", "partials", "express-view-engine", "fastify", "typescript", "esm", "zero-dependencies", "lightweight", "nodejs", "deno"], "topics": ["nodejs", "deno", "deno-module", "typescript", "template-engine", "expressjs-templating-engine", "ejs-alternative", "javascript", "template-engine-html"], "urls": [], "use_cases": ["render html templates in node.js", "ejs alternative for javascript templating", "template engine that works in deno and the browser", "express or fastify view engine for server-side html", "html templates with layouts and partials", "small lightweight templating library for bundling in the frontend"], "what_it_is": "Eta is a lightweight, fast embedded JavaScript templating engine written in TypeScript that runs in Node, Deno, and the browser. It supports layouts, partials, plugins, custom delimiters, caching, and precompilation, positioning itself as a more configurable EJS alternative with only ~3.5 KB minzipped and zero dependencies.", "when_to_avoid": ["You need component-based or JSX-style templates rather than embedded-tag templates", "You rely on CommonJS require - Eta v4 is ESM-only", "You need a large ecosystem of prebuilt helpers (e.g. Handlebars) or logic-less templating like Mustache"], "when_to_choose": ["You want an EJS-like syntax but need Deno support, layouts, or custom delimiters out of the box", "Bundle size and render speed matter - it is ~3.5 KB minzipped with zero dependencies", "You need TypeScript types, ESM exports, informative syntax errors, and plugin/custom-tag extensibility"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/bgub-eta", "repo": "bgub/eta", "role": "main", "score": 84}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.038553+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:28:02.667397+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6ab08681c8081834e708a1e3215f2d176dfdd2dc951016dd8c002fac447599f6", "fetched_at": "2026-08-28T04:05:32.038553+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bgub/eta"}, {"content_hash": "5a9f2911d33cff3f24dd3b91008265b84f819141980c4980f23fc93062af3ef9", "fetched_at": "2026-08-29T11:06:24.764241+00:00", "kind": "homepage", "missing": false, "url": "https://eta.js.org"}, {"content_hash": "e0bf031eb21b903c4ba7488c0e591ce16e7221066b2a98fe39905ecf11613903", "fetched_at": "2026-08-29T11:06:24.773602+00:00", "kind": "site_page", "missing": false, "url": "https://eta.js.org/docs"}, {"content_hash": "1e2911b42e572bf6765ed8c0de424578741ae018aa5e96ea16c35e2d9d2fc226", "fetched_at": "2026-08-29T11:06:24.775446+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/eta"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.038553+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:28:02.667397+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6ab08681c8081834e708a1e3215f2d176dfdd2dc951016dd8c002fac447599f6", "fetched_at": "2026-08-28T04:05:32.038553+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bgub/eta"}, {"content_hash": "5a9f2911d33cff3f24dd3b91008265b84f819141980c4980f23fc93062af3ef9", "fetched_at": "2026-08-29T11:06:24.764241+00:00", "kind": "homepage", "missing": false, "url": "https://eta.js.org"}, {"content_hash": "e0bf031eb21b903c4ba7488c0e591ce16e7221066b2a98fe39905ecf11613903", "fetched_at": "2026-08-29T11:06:24.773602+00:00", "kind": "site_page", "missing": false, "url": "https://eta.js.org/docs"}, {"content_hash": "1e2911b42e572bf6765ed8c0de424578741ae018aa5e96ea16c35e2d9d2fc226", "fetched_at": "2026-08-29T11:06:24.775446+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/eta"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:28:02.667397+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6ab08681c8081834e708a1e3215f2d176dfdd2dc951016dd8c002fac447599f6", "fetched_at": "2026-08-28T04:05:32.038553+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bgub/eta"}, {"content_hash": "5a9f2911d33cff3f24dd3b91008265b84f819141980c4980f23fc93062af3ef9", "fetched_at": "2026-08-29T11:06:24.764241+00:00", "kind": "homepage", "missing": false, "url": "https://eta.js.org"}, {"content_hash": "e0bf031eb21b903c4ba7488c0e591ce16e7221066b2a98fe39905ecf11613903", "fetched_at": "2026-08-29T11:06:24.773602+00:00", "kind": "site_page", "missing": false, "url": "https://eta.js.org/docs"}, {"content_hash": "1e2911b42e572bf6765ed8c0de424578741ae018aa5e96ea16c35e2d9d2fc226", "fetched_at": "2026-08-29T11:06:24.775446+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/eta"}], "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:32.038553+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.038553+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.038553+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:28:02.667397+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6ab08681c8081834e708a1e3215f2d176dfdd2dc951016dd8c002fac447599f6", "fetched_at": "2026-08-28T04:05:32.038553+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bgub/eta"}, {"content_hash": "5a9f2911d33cff3f24dd3b91008265b84f819141980c4980f23fc93062af3ef9", "fetched_at": "2026-08-29T11:06:24.764241+00:00", "kind": "homepage", "missing": false, "url": "https://eta.js.org"}, {"content_hash": "e0bf031eb21b903c4ba7488c0e591ce16e7221066b2a98fe39905ecf11613903", "fetched_at": "2026-08-29T11:06:24.773602+00:00", "kind": "site_page", "missing": false, "url": "https://eta.js.org/docs"}, {"content_hash": "1e2911b42e572bf6765ed8c0de424578741ae018aa5e96ea16c35e2d9d2fc226", "fetched_at": "2026-08-29T11:06:24.775446+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/eta"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.038553+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.038553+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:28:02.667397+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6ab08681c8081834e708a1e3215f2d176dfdd2dc951016dd8c002fac447599f6", "fetched_at": "2026-08-28T04:05:32.038553+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bgub/eta"}, {"content_hash": "5a9f2911d33cff3f24dd3b91008265b84f819141980c4980f23fc93062af3ef9", "fetched_at": "2026-08-29T11:06:24.764241+00:00", "kind": "homepage", "missing": false, "url": "https://eta.js.org"}, {"content_hash": "e0bf031eb21b903c4ba7488c0e591ce16e7221066b2a98fe39905ecf11613903", "fetched_at": "2026-08-29T11:06:24.773602+00:00", "kind": "site_page", "missing": false, "url": "https://eta.js.org/docs"}, {"content_hash": "1e2911b42e572bf6765ed8c0de424578741ae018aa5e96ea16c35e2d9d2fc226", "fetched_at": "2026-08-29T11:06:24.775446+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/eta"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.038553+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.038553+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.038553+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:28:02.667397+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6ab08681c8081834e708a1e3215f2d176dfdd2dc951016dd8c002fac447599f6", "fetched_at": "2026-08-28T04:05:32.038553+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bgub/eta"}, {"content_hash": "5a9f2911d33cff3f24dd3b91008265b84f819141980c4980f23fc93062af3ef9", "fetched_at": "2026-08-29T11:06:24.764241+00:00", "kind": "homepage", "missing": false, "url": "https://eta.js.org"}, {"content_hash": "e0bf031eb21b903c4ba7488c0e591ce16e7221066b2a98fe39905ecf11613903", "fetched_at": "2026-08-29T11:06:24.773602+00:00", "kind": "site_page", "missing": false, "url": "https://eta.js.org/docs"}, {"content_hash": "1e2911b42e572bf6765ed8c0de424578741ae018aa5e96ea16c35e2d9d2fc226", "fetched_at": "2026-08-29T11:06:24.775446+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/eta"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.038553+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:32.038553+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:28:02.667397+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6ab08681c8081834e708a1e3215f2d176dfdd2dc951016dd8c002fac447599f6", "fetched_at": "2026-08-28T04:05:32.038553+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bgub/eta"}, {"content_hash": "5a9f2911d33cff3f24dd3b91008265b84f819141980c4980f23fc93062af3ef9", "fetched_at": "2026-08-29T11:06:24.764241+00:00", "kind": "homepage", "missing": false, "url": "https://eta.js.org"}, {"content_hash": "e0bf031eb21b903c4ba7488c0e591ce16e7221066b2a98fe39905ecf11613903", "fetched_at": "2026-08-29T11:06:24.773602+00:00", "kind": "site_page", "missing": false, "url": "https://eta.js.org/docs"}, {"content_hash": "1e2911b42e572bf6765ed8c0de424578741ae018aa5e96ea16c35e2d9d2fc226", "fetched_at": "2026-08-29T11:06:24.775446+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/eta"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:28:02.667397+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6ab08681c8081834e708a1e3215f2d176dfdd2dc951016dd8c002fac447599f6", "fetched_at": "2026-08-28T04:05:32.038553+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bgub/eta"}, {"content_hash": "5a9f2911d33cff3f24dd3b91008265b84f819141980c4980f23fc93062af3ef9", "fetched_at": "2026-08-29T11:06:24.764241+00:00", "kind": "homepage", "missing": false, "url": "https://eta.js.org"}, {"content_hash": "e0bf031eb21b903c4ba7488c0e591ce16e7221066b2a98fe39905ecf11613903", "fetched_at": "2026-08-29T11:06:24.773602+00:00", "kind": "site_page", "missing": false, "url": "https://eta.js.org/docs"}, {"content_hash": "1e2911b42e572bf6765ed8c0de424578741ae018aa5e96ea16c35e2d9d2fc226", "fetched_at": "2026-08-29T11:06:24.775446+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/eta"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:28:02.667397+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6ab08681c8081834e708a1e3215f2d176dfdd2dc951016dd8c002fac447599f6", "fetched_at": "2026-08-28T04:05:32.038553+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bgub/eta"}, {"content_hash": "5a9f2911d33cff3f24dd3b91008265b84f819141980c4980f23fc93062af3ef9", "fetched_at": "2026-08-29T11:06:24.764241+00:00", "kind": "homepage", "missing": false, "url": "https://eta.js.org"}, {"content_hash": "e0bf031eb21b903c4ba7488c0e591ce16e7221066b2a98fe39905ecf11613903", "fetched_at": "2026-08-29T11:06:24.773602+00:00", "kind": "site_page", "missing": false, "url": "https://eta.js.org/docs"}, {"content_hash": "1e2911b42e572bf6765ed8c0de424578741ae018aa5e96ea16c35e2d9d2fc226", "fetched_at": "2026-08-29T11:06:24.775446+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/eta"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:28:02.667397+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6ab08681c8081834e708a1e3215f2d176dfdd2dc951016dd8c002fac447599f6", "fetched_at": "2026-08-28T04:05:32.038553+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bgub/eta"}, {"content_hash": "5a9f2911d33cff3f24dd3b91008265b84f819141980c4980f23fc93062af3ef9", "fetched_at": "2026-08-29T11:06:24.764241+00:00", "kind": "homepage", "missing": false, "url": "https://eta.js.org"}, {"content_hash": "e0bf031eb21b903c4ba7488c0e591ce16e7221066b2a98fe39905ecf11613903", "fetched_at": "2026-08-29T11:06:24.773602+00:00", "kind": "site_page", "missing": false, "url": "https://eta.js.org/docs"}, {"content_hash": "1e2911b42e572bf6765ed8c0de424578741ae018aa5e96ea16c35e2d9d2fc226", "fetched_at": "2026-08-29T11:06:24.775446+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/eta"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 79, "longevity": 100, "rhythm": 81}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2352, "days_push": 130, "days_rel": 130, "gap_med": 0.0, "n_releases_24m": 11}, "score": 84, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}