React Syntax Highlighter

A React component for syntax-highlighting code blocks using highlight.js or Prism ASTs, with JavaScript-based styles and no external stylesheet required.

Library
npm
v16.1.2
4,673 stars
MIT License

Repository Health

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

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
71 /100 Good
Architecture 74
Code Quality 68
Innovation 70
Learning Curve 72

React Syntax Highlighter is a component library that renders syntax-highlighted code blocks inside React applications. Instead of manually manipulating the DOM in componentDidMount/componentDidUpdate and injecting HTML with dangerouslySetInnerHTML, it walks an abstract syntax tree produced by highlight.js (via lowlight) or Prism (via refractor) and builds it into the virtual DOM, so updates only touch the nodes that actually changed and the component works as an idiomatic, pure function component.

All bundled styles are plain JavaScript objects rather than CSS files, so consumers get out-of-the-box code theming without adding a stylesheet <link> tag — every highlight.js and Prism theme has been ported to JS. Teams that prefer CSS classes instead can opt out with useInlineStyles={false}. A “light build” variant lets consumers register only the specific languages and styles they need to keep bundle size down, and async variants defer loading the highlighting engine and language definitions via dynamic import() for faster first paint.

What You Get

  • A default SyntaxHighlighter component backed by highlight.js/lowlight, plus a Prism variant backed by refractor for better JSX and TSX highlighting fidelity
  • Every highlight.js and Prism theme pre-ported to JavaScript style objects, importable directly from react-syntax-highlighter/dist/esm/styles/{hljs|prism}
  • Light/PrismLight builds that only bundle languages you explicitly registerLanguage(), keeping bundle size small for apps that only need a handful of languages
  • LightAsync/PrismAsyncLight/PrismAsync variants that dynamically import() the highlighting engine and language grammars for faster initial page loads
  • Line-number rendering (showLineNumbers, showInlineLineNumbers), custom line wrapping (wrapLines, wrapLongLines), and per-line prop injection (lineProps) for building diff- or annotation-style code views
  • A pluggable renderer prop and custom PreTag/CodeTag overrides for non-DOM targets (e.g. virtualized lists, React Native renderers)

Common Use Cases

  • Rendering highlighted code snippets inside documentation sites, blog posts, or MDX content
  • Building an in-app code viewer/diff viewer for developer tools, IDE-in-the-browser products, or PR review UIs
  • Displaying generated or example code inside a design-system playground, API reference, or interactive tutorial
  • Presentation/slide tools (e.g. mdx-deck) and Electron-based documentation editors that need themeable code blocks without a CSS build step

Under The Hood

Architecture src/index.js exports a family of components — the default highlight.js-backed SyntaxHighlighter, Light/PrismLight register-only-what-you-use builds, and LightAsync/PrismAsync/PrismAsyncLight dynamic-import variants — all funneling into the ~440-line src/highlight.js, which walks the AST returned by lowlight (highlight.js) or refractor (Prism) and recursively converts it into React elements via create-element.js (~210 lines), handling line numbers, line wrapping, and custom renderers along the way. async-syntax-highlighter.js (~155 lines) wraps the synchronous highlighter so language/theme modules can be code-split, rendering plain unhighlighted text with line numbers as a fallback while the import resolves.

Tech Stack Plain JavaScript compiled with Babel (no TypeScript in the source; types ship separately via DefinitelyTyped’s @types/react-syntax-highlighter), dual-published as CJS and ESM (build:cjs/build:esm) plus a webpack UMD bundle. Highlighting is delegated to highlight.js/lowlight and prismjs/refractor, with highlightjs-vue covering Vue templates; React itself is only a peer dependency (>= 0.14.0), so the library stays agnostic to the consumer’s React version.

Code Quality 20 Jest test files under __tests__/ use react-test-renderer snapshots to cover the async, light, and Prism variants, line-number rendering, custom pre/code tags, line wrapping, and unusual inputs (unknown language, plain text, Vue). Coverage is broad but mostly snapshot-based rather than fine-grained behavioral assertions. ESLint, Prettier, and husky/lint-staged enforce style at commit time; per the health-score data, recent commit velocity is low relative to the project’s age despite fairly regular point releases.

API Design The public API is declarative and low-boilerplate — <SyntaxHighlighter language="js" style={theme}>{code}</SyntaxHighlighter> is enough to get syntax highlighting working, and switching highlighting engine or loading strategy (sync/light/async) is a matter of swapping the import rather than learning a new API. The README documents every prop in one place with live demo links, though supported languages/styles are discoverable only via separate markdown reference files rather than editor autocomplete in the base package.

Used by 59 apps in this directory

TypeScript
56%
MIT

open-notebook

AI Assistants · Note Taking

40,513

A privacy-first, self-hosted AI research notebook with 18+ model providers, multi-speaker podcast generation, and full REST API—your open-source alternative to Google Notebook LM.

View details
89
Repo Health
84
Technical
71
Dependency
Built with
TypeScript 56%
Python 42%
Updated 1 weeks ago
TypeScript
96%

Open Scouts

AI Agents · Automation

1,370

Create automated AI scouts that continuously search the web and send email alerts when they find what you're looking for.

View details
33
Repo Health
65
Technical
69
Dependency
Built with
TypeScript 96%
Updated 5 months ago
TypeScript
92%
Other

OpenHands

AI Code Assistants · AI Development

91,695

The self-hosted developer control center for running AI coding agents — locally, in Docker, on VMs, or across cloud backends — with automation workflows for GitHub, Slack, and more.

View details
91
Repo Health
82
Technical
67
Dependency
Built with
TypeScript 92%
Updated 6 days ago
TypeScript
91%
AGPL 3.0

OpenPanel

Analytics

7,187

Open-source Mixpanel alternative with session replay, MCP integration, and privacy-first product analytics you fully control.

View details
83
Repo Health
74
Technical
64
Dependency
Built with
TypeScript 91%
Updated 6 days ago
TypeScript
93%
MIT

OpenReel Video

Video Editors

5,442

A browser-based, GPU-accelerated video editor with multi-track timelines, color grading, and 4K export — no uploads, no installs, no watermarks.

View details
72
Repo Health
80
Technical
71
Dependency
Built with
TypeScript 93%
Updated 1 weeks ago
JavaScript
64%
AGPL 3.0

overleaf

Collaboration · Productivity

18,266

Open-source, real-time collaborative LaTeX editor with sandboxed compilation and full TeXLive support for self-hosted academic and research teams.

View details
84
Repo Health
80
Technical
59
Dependency
Built with
JavaScript 64%
TypeScript 30%
Updated 1 months ago
TypeScript
50%
Other

Phase Console

Devops · Security

931

End-to-end encrypted secrets management for engineering teams — from local dev to Kubernetes production.

View details
85
Repo Health
73
Technical
63
Dependency
Built with
TypeScript 50%
Python 48%
Updated 6 days ago
TypeScript
99%
MIT

Rudel

Developer Tools

306

Open-source analytics for Claude Code and Codex sessions — a CLI uploads session transcripts to a self-hostable dashboard tracking token usage, session duration, activity patterns, and model usage.

View details
75
Repo Health
67
Technical
71
Dependency
Built with
TypeScript 99%
Updated 1 weeks ago
TypeScript
98%
AGPL 3.0

Rybbit

Analytics

13,155

Open-source, privacy-friendly web and product analytics with cookieless tracking, session replays, funnels, and real-time dashboards — a self-hostable alternative to Google Analytics.

View details
87
Repo Health
85
Technical
68
Dependency
Built with
TypeScript 98%
Updated 5 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