{"adoption": {"forks": 73, "observed_at": "2026-08-28T04:05:29.823941+00:00", "stars": 1737}, "canonical_url": "https://ross.abutalabs.com/products/tslog", "card": {"archived": false, "artifact_type": "library", "description": "📝 tslog - Universal Logger for TypeScript and JavaScript", "domain": ["developer-tools", "backend", "frontend", "monitoring"], "enriched": true, "function": ["logging", "error-handling", "serialization"], "health_score": 98, "homepage": "https://tslog.js.org", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["fullstack-build/tslog"], "name": "fullstack-build/tslog", "platform": ["bun", "browser", "cross-platform"], "pushed_at": "2026-08-10T23:32:19+00:00", "repo": "fullstack-build/tslog", "stars": 1737, "tags": ["typescript", "structured-logging", "pretty-print", "stacktrace", "secret-masking", "llm-agents", "zero-dependencies", "esm", "nodejs", "deno"], "topics": ["logger", "logging", "logging-library", "typescript-library", "stacktrace", "stack", "error-handling", "exceptions", "pretty-print", "json", "json-api"], "urls": [], "use_cases": ["add structured JSON logging to a Node.js API for log pipelines", "pretty-print logs with source-mapped line numbers and stack traces in TypeScript", "log consistently across Node.js, browser, Deno, and Bun with one library", "mask secrets and sensitive keys in log output", "create child loggers with inherited settings for modules or agents", "add logging to LLM agent workflows with session correlation"], "what_it_is": "tslog is a universal, fully typed logging library for TypeScript and JavaScript that runs in Node.js, browsers, Deno, Bun, workers, and React Native. It provides pretty colored console output by default, structured fields-first JSON for observability pipelines, secret masking, sub-loggers, and pluggable transports and middleware.", "when_to_avoid": ["you need a battle-tested log aggregator or distributed tracing backend rather than a logging library", "you are locked to CommonJS, since v5 is ESM-only", "you need file-based or rotating log sinks out of the box"], "when_to_choose": ["you want a zero-dependency, tree-shakeable logger for TypeScript/JavaScript across runtimes", "you need both human-friendly pretty output and machine-readable JSON from the same logger", "you want built-in secret masking, sub-loggers, and typed middleware/transports"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/tslog", "repo": "fullstack-build/tslog", "role": "main", "score": 96}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.823941+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:30:38.040791+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1256112a53d56d982497dff23e2e68755b2342b20afe9a067af79dca6eca823", "fetched_at": "2026-08-28T04:05:29.823941+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fullstack-build/tslog"}, {"content_hash": "2ec6af964fd97dfba4be7d9fa412c922e1dcd293f6035fe7445a72f35f282bb8", "fetched_at": "2026-08-29T11:08:02.792849+00:00", "kind": "homepage", "missing": false, "url": "https://tslog.js.org"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.823941+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:30:38.040791+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1256112a53d56d982497dff23e2e68755b2342b20afe9a067af79dca6eca823", "fetched_at": "2026-08-28T04:05:29.823941+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fullstack-build/tslog"}, {"content_hash": "2ec6af964fd97dfba4be7d9fa412c922e1dcd293f6035fe7445a72f35f282bb8", "fetched_at": "2026-08-29T11:08:02.792849+00:00", "kind": "homepage", "missing": false, "url": "https://tslog.js.org"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:30:38.040791+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1256112a53d56d982497dff23e2e68755b2342b20afe9a067af79dca6eca823", "fetched_at": "2026-08-28T04:05:29.823941+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fullstack-build/tslog"}, {"content_hash": "2ec6af964fd97dfba4be7d9fa412c922e1dcd293f6035fe7445a72f35f282bb8", "fetched_at": "2026-08-29T11:08:02.792849+00:00", "kind": "homepage", "missing": false, "url": "https://tslog.js.org"}], "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:29.823941+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.823941+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.823941+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:30:38.040791+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1256112a53d56d982497dff23e2e68755b2342b20afe9a067af79dca6eca823", "fetched_at": "2026-08-28T04:05:29.823941+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fullstack-build/tslog"}, {"content_hash": "2ec6af964fd97dfba4be7d9fa412c922e1dcd293f6035fe7445a72f35f282bb8", "fetched_at": "2026-08-29T11:08:02.792849+00:00", "kind": "homepage", "missing": false, "url": "https://tslog.js.org"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.823941+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.823941+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:30:38.040791+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1256112a53d56d982497dff23e2e68755b2342b20afe9a067af79dca6eca823", "fetched_at": "2026-08-28T04:05:29.823941+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fullstack-build/tslog"}, {"content_hash": "2ec6af964fd97dfba4be7d9fa412c922e1dcd293f6035fe7445a72f35f282bb8", "fetched_at": "2026-08-29T11:08:02.792849+00:00", "kind": "homepage", "missing": false, "url": "https://tslog.js.org"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.823941+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.823941+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.823941+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:30:38.040791+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1256112a53d56d982497dff23e2e68755b2342b20afe9a067af79dca6eca823", "fetched_at": "2026-08-28T04:05:29.823941+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fullstack-build/tslog"}, {"content_hash": "2ec6af964fd97dfba4be7d9fa412c922e1dcd293f6035fe7445a72f35f282bb8", "fetched_at": "2026-08-29T11:08:02.792849+00:00", "kind": "homepage", "missing": false, "url": "https://tslog.js.org"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.823941+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:29.823941+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:30:38.040791+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1256112a53d56d982497dff23e2e68755b2342b20afe9a067af79dca6eca823", "fetched_at": "2026-08-28T04:05:29.823941+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fullstack-build/tslog"}, {"content_hash": "2ec6af964fd97dfba4be7d9fa412c922e1dcd293f6035fe7445a72f35f282bb8", "fetched_at": "2026-08-29T11:08:02.792849+00:00", "kind": "homepage", "missing": false, "url": "https://tslog.js.org"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:30:38.040791+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1256112a53d56d982497dff23e2e68755b2342b20afe9a067af79dca6eca823", "fetched_at": "2026-08-28T04:05:29.823941+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fullstack-build/tslog"}, {"content_hash": "2ec6af964fd97dfba4be7d9fa412c922e1dcd293f6035fe7445a72f35f282bb8", "fetched_at": "2026-08-29T11:08:02.792849+00:00", "kind": "homepage", "missing": false, "url": "https://tslog.js.org"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:30:38.040791+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1256112a53d56d982497dff23e2e68755b2342b20afe9a067af79dca6eca823", "fetched_at": "2026-08-28T04:05:29.823941+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fullstack-build/tslog"}, {"content_hash": "2ec6af964fd97dfba4be7d9fa412c922e1dcd293f6035fe7445a72f35f282bb8", "fetched_at": "2026-08-29T11:08:02.792849+00:00", "kind": "homepage", "missing": false, "url": "https://tslog.js.org"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:30:38.040791+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e1256112a53d56d982497dff23e2e68755b2342b20afe9a067af79dca6eca823", "fetched_at": "2026-08-28T04:05:29.823941+00:00", "kind": "readme", "missing": false, "url": "https://github.com/fullstack-build/tslog"}, {"content_hash": "2ec6af964fd97dfba4be7d9fa412c922e1dcd293f6035fe7445a72f35f282bb8", "fetched_at": "2026-08-29T11:08:02.792849+00:00", "kind": "homepage", "missing": false, "url": "https://tslog.js.org"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 100, "rhythm": 93}, "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": 2323, "days_push": 23, "days_rel": 48, "gap_med": 1.0, "n_releases_24m": 7}, "score": 96, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}