reflect-metadata

A polyfill for the Metadata Reflection API that powers decorator metadata in TypeScript and JavaScript.

Library
npm
v0.2.2
3,360 stars
Apache License 2.0

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
53 /100 Fair
Development Activity 28
Maintenance 24
Community 60
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
84 /100 Excellent
Architecture 84
Code Quality 85
Innovation 88
Learning Curve 80

reflect-metadata is a lightweight, zero-dependency polyfill that adds a Metadata Reflection API to the global Reflect object, letting you attach and read arbitrary metadata on classes and their members. It is the runtime that makes TypeScript’s legacy experimentalDecorators and emitDecoratorMetadata options useful, and it underpins dependency-injection and reflection features in frameworks like Angular, NestJS, TypeORM, and InversifyJS.

The library exposes a small, consistent set of imperative methods (defineMetadata, getMetadata, hasMetadata, and friends) alongside a @Reflect.metadata decorator, works across NodeJS, browsers, and bundlers, and ships CommonJS, ESM, lite, and no-conflict builds to fit different runtime constraints.

What You Get

  • A global Reflect polyfill exposing defineMetadata, getMetadata, hasMetadata, getMetadataKeys, deleteMetadata, and their own-property variants.
  • A @Reflect.metadata(key, value) decorator for declaratively attaching metadata to classes and members.
  • Multiple builds — full (with internal Map/Set/WeakMap polyfills), lite, and no-conflict — plus CommonJS, ESM, and browser <script> distributions.
  • First-class TypeScript typings and support for emitDecoratorMetadata, enabling auto-generated design:type, design:paramtypes, and design:returntype metadata.

Common Use Cases

  • Powering dependency-injection containers that resolve constructor parameter types from emitted metadata.
  • Building runtime type assertions, validation, and serialization from decorator-attached annotations.
  • Supporting ORM and framework decorators (entities, routes, DTOs) that need to read type metadata reflectively.

Under The Hood

Architecture - The library is authored as a single TypeScript namespace Reflect in Reflect.ts (~93KB) that installs itself onto the global Reflect object, or creates one on ES5 runtimes. Metadata is stored in a nested WeakMap keyed first by target object, then by property key, then by metadata key, using internal Map/Set/WeakMap polyfills for legacy environments. Parallel ReflectLite.ts and ReflectNoConflict.ts sources produce the lite (no internal polyfills) and no-conflict builds, exposed through package.json exports as ., ./lite, and ./no-conflict.

Tech Stack - Written entirely in TypeScript with zero runtime dependencies, compiled via a gulp build pipeline (gulpfile.js, tsconfig-release.json) that emits CommonJS .js bundles plus .d.ts typings (index.d.ts, standalone.d.ts, no-conflict.d.ts). The ECMAScript specification itself is authored in spec.html with ecmarkup. Tests run on mocha with chai assertions.

Code Quality - The test/ directory holds 28 focused suites, one per public API method (reflect-definemetadata.ts, reflect-getmetadata.ts, reflect-decorate.ts, and so on), giving thorough behavioral coverage of the metadata operations. The source is extensively documented with JSDoc examples on each exported function, and public surfaces are fully typed.

API Design - The public API is small, consistent, and ergonomic: paired hasMetadata/hasOwnMetadata, getMetadata/getOwnMetadata, and prototype-chain vs own-key variants follow a predictable naming scheme. Metadata key and value precede the target argument so the optional propertyKey sits last and the calls curry cleanly with Function#bind. Getting started requires only a single import "reflect-metadata" at the entry point, with rich typings surfacing documentation directly in the editor.

Used by 46 apps in this directory

TypeScript
67%
MIT

Scalar

Developer Tools

16,313

Beautiful, interactive OpenAPI documentation with a built-in offline-first API client and multi-language code generation — all in one open-source platform.

View details
90
Repo Health
89
Technical
65
Dependency
Built with
TypeScript 67%
Vue 29%
Updated 5 days ago
TypeScript
91%
MIT

SerpBear

Analytics · Marketing

2,128

Self-hosted keyword rank tracker with Google Search Console integration, multi-provider SERP scraping, and a built-in REST API.

View details
48
Repo Health
67
Technical
68
Dependency
Built with
TypeScript 91%
Updated 5 months ago
TypeScript
83%
AGPL 3.0

Standard Notes

Note Taking

6,681

End-to-end encrypted notes and files — private by design, built to last, and fully self-hostable.

View details
89
Repo Health
83
Technical
68
Dependency
Built with
TypeScript 83%
JavaScript 14%
Updated 6 days ago
TypeScript
97%
AGPL 3.0

Swetrix

Analytics

1,213

Privacy-first, cookieless web analytics with error tracking, session replays, and performance monitoring — self-host or use Cloud.

View details
87
Repo Health
71
Technical
66
Dependency
Built with
TypeScript 97%
Updated 1 weeks ago
TypeScript
99%
Other

Teable

Databases · No Code Platforms

21,920

A no-code PostgreSQL database with spreadsheet UX, real-time collaboration, and native AI agents — built for teams that outgrow Airtable.

View details
78
Repo Health
76
Technical
62
Dependency
Built with
TypeScript 99%
Updated 6 days ago
Rust
66%
Apache 2.0

Temps

Analytics · Devops · Monitoring

865

A self-hosted Rust PaaS that replaces Vercel, Sentry, PostHog, Pingdom, Resend, and E2B with one binary — plus 440+ CLI operations agents like Claude Code can drive directly.

View details
81
Repo Health
86
Technical
66
Dependency
Built with
Rust 66%
TypeScript 33%
Updated 6 days ago
TypeScript
55%
Other

Tolgee

Developer Tools

4,139

In-context localization platform that lets developers and translators edit app strings directly in the running application, with AI-powered machine translation and framework SDKs for React, Angular, Vue, and Svelte.

View details
91
Repo Health
84
Technical
66
Dependency
Built with
TypeScript 55%
Kotlin 44%
Updated 6 days ago
TypeScript
79%
MIT

Trench

Analytics · Data Engineering · Monitoring

1,665

Open-source event tracking infrastructure built on Kafka and ClickHouse that handles thousands of events per second on a single node, with full Segment API compatibility and no cookies.

View details
44
Repo Health
81
Technical
73
Dependency
Built with
TypeScript 79%
MDX 15%
Updated 6 months ago
TypeScript
84%
Other

twenty

CRM

59,615

The open-source CRM you build, ship, and version like the rest of your stack — with customizable objects, AI agents, and a TypeScript SDK.

View details
92
Repo Health
82
Technical
64
Dependency
Built with
TypeScript 84%
MDX 14%
Updated 6 days ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers