prop-types

Runtime type checking for React component props, warning in development when data doesn't match the declared shape.

Library
npm
v15.8.1
4,444 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
40 /100 Fair
Development Activity 0
Maintenance 0
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 →
81 /100 Excellent
Architecture 80
Code Quality 75
Innovation 85
Learning Curve 85

prop-types is Facebook’s standalone runtime type-checking library for React component props, extracted from React core in 2017 so it could evolve independently of React’s release cycle and be reused by libraries beyond React itself.

It lets you declare the expected shape of a component’s props using composable validators (strings, numbers, shapes, arrays of a type, unions, and more), then warns in the console during development whenever a parent passes data that doesn’t match — without adding any overhead to production builds.

What You Get

  • Primitive validators for array, bool, func, number, object, string, symbol, and bigint prop types.
  • Composable validators like arrayOf, objectOf, shape, exact, oneOf, and oneOfType for structured or constrained data.
  • React-aware validators for node, element, and elementType, covering anything renderable or component-like.
  • A production-safe checkPropTypes() API for validating props manually outside of a component’s own propTypes.

Common Use Cases

  • Documenting and enforcing the expected shape of props on shared or public React components.
  • Catching integration bugs early in development when a parent passes the wrong data type to a child component.
  • Validating props on plain JS objects using PropTypes.checkPropTypes() outside of React’s normal render cycle.

Under The Hood

Architecture - index.js branches on NODE_ENV to load one of two factories: factoryWithTypeCheckers.js (development) builds the full set of validator functions with warnings, while factoryWithThrowingShims.js (production) swaps in shims that are no-ops unless called directly, in which case they throw to prevent accidental production use. factory.js is a separate legacy-compat entry point that always returns the full type-checker factory regardless of environment, preserving behavior for old React versions (<=15.5) that expect validators to be callable directly. checkPropTypes.js implements the shared validation loop: it iterates a component’s typeSpecs, invokes each validator with a secret token (lib/ReactPropTypesSecret.js) that authorizes internal React calls while blocking direct end-user invocation, and memoizes each unique failure message in loggedTypeFailures so repeated renders don’t spam the console.

Tech Stack - Plain ES5 CommonJS JavaScript with no TypeScript and no ESM build. Three runtime dependencies: react-is (element/type detection), object-assign (an Object.assign ponyfill for older engines), and loose-envify (a transform that dead-code-eliminates the NODE_ENV branches during bundling). Dev tooling is Jest for tests, ESLint for linting, and Browserify plus UglifyJS for producing the CDN UMD bundles (prop-types.js / prop-types.min.js) — the npm-published CommonJS source itself ships unbundled.

Code Quality - The tests directory contains four large suites (PropTypesDevelopmentReact15.js, PropTypesDevelopmentStandalone-test.js, PropTypesProductionReact15-test.js, PropTypesProductionStandalone-test.js) totaling roughly 4,600 lines of tests against ~600 lines of source in factoryWithTypeCheckers.js — an unusually high test-to-source ratio that reflects the combinatorial surface of validator types crossed with required/optional and dev/prod/legacy variants. There’s no TypeScript and no formal error-code system, just hand-written message strings, but the codebase is small and single-purpose enough that this is a minor tradeoff. GitHub activity is low (last commit May 2024) — consistent with a stable, feature-complete primitive rather than an abandoned project.

API Design - Usage is zero-config: import PropTypes and assign validators to a component’s propTypes object. The chainable .isRequired modifier and composable builders (shape({…}), arrayOf(PropTypes.number), oneOfType([…])) read close to natural language, and failures are non-fatal, dev-only console warnings, deduplicated per message. Its one sharp edge — validators throw if called directly outside of checkPropTypes, a deliberate change from the old React.PropTypes gated by a secret token — is clearly documented in the README’s migration section.

Used by 45 apps in this directory

TypeScript
72%
Apache 2.0

Supabase

Authentication · Databases · Developer Tools

113,827

The open-source Postgres development platform that replaces Firebase with authentication, real-time APIs, edge functions, storage, and vector embeddings — all built on PostgreSQL.

View details
90
Repo Health
91
Technical
62
Dependency
Built with
TypeScript 72%
MDX 26%
Updated 6 days ago
JavaScript
93%
Apache 2.0

swagger-ui

Developer Tools

29,042

Transform OpenAPI specifications into interactive, browser-based API documentation that developers and consumers can explore and test live.

View details
98
Repo Health
83
Technical
62
Dependency
Built with
JavaScript 93%
Updated 1 weeks ago
Go
75%
AGPL 3.0

Teleport

Authentication · Security

21,016

Zero-trust infrastructure access platform that replaces credentials and VPNs with short-lived certificates, SSO, and identity-aware proxies for SSH, Kubernetes, databases, RDP, and AI agents.

View details
94
Repo Health
81
Technical
68
Dependency
Built with
Go 75%
TypeScript 16%
Updated 1 weeks ago
TypeScript
98%
Apache 2.0

TinaCMS

CMS

13,845

An open-source, Git-backed headless CMS that gives editors a live visual editing UI over Markdown, MDX, JSON, and YAML content while developers keep everything in version control.

View details
92
Repo Health
74
Technical
59
Dependency
Built with
TypeScript 98%
Updated 1 weeks ago
TypeScript
99%
Apache 2.0

Trigger.dev

AI Development · Automation · Developer Tools

16,606

Build and deploy fully-managed AI agents and background jobs in TypeScript — with no timeouts, durable retries, real-time observability, and elastic scaling built in.

View details
90
Repo Health
9
Technical
63
Dependency
Built with
TypeScript 99%
Updated 6 days ago
JavaScript
74%
AGPL 3.0

Twake Drive

Collaboration · File Storage

989

Open-source, self-hosted file manager with collaborative drives, AI-powered summarization, and OnlyOffice document editing for teams who want full data sovereignty.

View details
91
Repo Health
78
Technical
71
Dependency
Built with
JavaScript 74%
TypeScript 25%
Updated 1 weeks ago
TypeScript
99%
MIT

Umami

Analytics

39,609

Privacy-first web analytics that respects your users — self-hosted, cookieless, and GDPR compliant out of the box.

View details
95
Repo Health
83
Technical
67
Dependency
Built with
TypeScript 99%
Updated 1 weeks ago
TypeScript
97%
Apache 2.0

Unleash

Ab Testing Experimentation · Developer Tools · Devops

13,899

The open-source feature management platform that lets you ship code to production and control who sees it — without redeploying.

View details
91
Repo Health
84
Technical
69
Dependency
Built with
TypeScript 97%
Updated 1 weeks ago
TypeScript
58%
MIT

web-check

Developer Tools · Security

35,205

All-in-one OSINT dashboard that dissects any website's IP, SSL, DNS, headers, cookies, ports, trackers, and more in a single scan.

View details
81
Repo Health
75
Technical
71
Dependency
Built with
TypeScript 58%
JavaScript 23%
Astro 17%
Updated 1 weeks 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