rehype-sanitize

A unified rehype plugin that sanitizes HTML to prevent XSS by dropping anything a schema does not explicitly allow.

Library
npm
v6.0.0
224 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
37 /100 Needs Attention
Development Activity 0
Maintenance 20
Community 48
Maturity 60
Momentum 20

Technical Analysis

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

rehype-sanitize is a rehype (unified) plugin that makes HTML safe by cleaning a hast syntax tree against a configurable schema, dropping any element or attribute that is not explicitly allowed. It defaults to GitHub’s sanitation rules, so untrusted markup, inline event handlers, dangerous URLs, and injected scripts are stripped out before rendering.

Built on hast-util-sanitize, it slots into any unified/rehype pipeline between parsing and stringifying. It is the standard way to defend against cross-site scripting when rendering user-authored or plugin-generated HTML, and its schema can be extended to safely permit math, syntax highlighting, or other trusted markup.

What You Get

  • A drop-in rehype plugin that sanitizes a hast tree against a configurable allowlist schema.
  • A secure default schema (defaultSchema) modeled on GitHub’s sanitation rules, requiring no configuration to be safe.
  • Protection against XSS, DOM clobbering (via user-content- id/name prefixing), dangerous URLs, and inline event handlers.
  • Full TypeScript types (via JSDoc) and ESM-only distribution with 100% type and test coverage.
  • Extensible schemas so you can safely opt in to math, syntax highlighting, or other trusted markup.

Common Use Cases

  • Sanitizing user-authored HTML or Markdown-derived HTML before rendering it on a page.
  • Hardening a rehype/remark content pipeline against XSS from untrusted authors or third-party plugins.
  • Allowing specific trusted classes so plugins like rehype-katex or rehype-highlight can run safely.
  • Preventing DOM clobbering when generating heading IDs from user content.

Under The Hood

Architecture

The package is intentionally tiny. index.js re-exports defaultSchema from hast-util-sanitize and the default plugin from lib/index.js. lib/index.js defines rehypeSanitize(options), which returns a unified transformer that calls sanitize(tree, options) on the incoming hast Root and returns the cleaned tree. All actual sanitation logic lives in the underlying hast-util-sanitize utility; this plugin is the thin unified-integration layer that lets you drop sanitation into a .use() chain between parse and stringify.

Tech Stack

Written in modern ESM JavaScript (Node 16+), typed entirely through JSDoc with TypeScript checking (tsconfig.json, type-coverage at 100%). Runtime dependencies are just hast-util-sanitize (the sanitizer) and @types/hast (types). Tooling includes xo and prettier for linting/formatting, c8 for coverage, and the built-in node:test runner. The build compiles type declarations with tsc.

Code Quality

Quality is high and rigorously enforced: test.js uses node:test to verify the public API surface, default sanitation of an onmouseover attribute, and schema-merged options, with c8 enforcing 100% line coverage and type-coverage enforcing 100% typed coverage in strict mode. The code is small, documented with JSDoc, and follows consistent unified-ecosystem conventions.

API Design

The public API is minimal and ergonomic: a default export used as .use(rehypeSanitize[, schema]) plus a named defaultSchema export for extension. Being safe by default with zero configuration is the key DX win, and the extensive README documents real-world schema-extension recipes (math, highlighting, DOM-clobbering mitigation). Familiarity with hast/unified is needed only for advanced schema customization.

Used by 33 apps in this directory

Python
71%
Apache 2.0

SurfSense

AI Assistants · Search

16,586

The open-source, unlimited NotebookLM alternative with real-time collaboration, a desktop app, and no vendor lock-in.

View details
88
Repo Health
71
Technical
66
Dependency
Built with
Python 71%
TypeScript 27%
Updated 5 days ago
Rust
93%
Other

Tabby

AI Code Assistants

33,924

Self-hosted AI coding assistant — run GitHub Copilot-grade code completion on your own hardware with no cloud dependency.

View details
55
Repo Health
78
Technical
61
Dependency
Built with
Rust 93%
Updated 4 months ago
Python
68%
AGPL 3.0

Tracecat

AI Agents · Automation · Security

3,860

Open-source agentic security automation platform that runs AI agents and durable workflows at scale with sandboxed execution.

View details
89
Repo Health
88
Technical
66
Dependency
Built with
Python 68%
TypeScript 30%
Updated 5 days ago
Rust
71%
MIT

Trieve

AI Development · Developer Tools · Search

2,721

All-in-one self-hostable platform for hybrid search, RAG, recommendations, and analytics built on Rust and Qdrant.

View details
42
Repo Health
74
Technical
65
Dependency
Built with
Rust 71%
Updated 9 months ago
Rust
50%
Apache 2.0

Vibe Kanban

AI Agents · AI Code Assistants · Project Management

28,441

A kanban board for planning work and dispatching Claude Code, Codex, Gemini CLI, and eight other coding agents into isolated git worktrees, then reviewing and merging their diffs from one UI.

View details
72
Repo Health
75
Technical
63
Dependency
Built with
Rust 50%
TypeScript 46%
Updated 1 months ago
Rust
33%
Other

Windmill

Automation · Developer Tools

18,257

Turn scripts into webhooks, workflows, and auto-generated UIs — the fastest self-hostable workflow engine, 13x faster than Airflow.

View details
91
Repo Health
82
Technical
64
Dependency
Built with
Rust 33%
TypeScript 24%
Svelte 22%
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