sanitize-html

Allowlist-based HTML sanitizer that strips XSS vectors from untrusted markup while preserving the tags and attributes you choose to keep.

Library
npm
v2.18.1
4,652 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
85 /100 Excellent
Development Activity 100
Maintenance 52
Community 88
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 82
Code Quality 85
Innovation 78
Learning Curve 80

sanitize-html cleans up user-submitted or otherwise untrusted HTML by keeping only an allowlist of tags and per-tag attributes and discarding everything else. Built on the htmlparser2 streaming parser, it is tolerant of messy input, making it well suited to the fragments produced by rich-text editors like CKEditor and TinyMCE or pasted from Word.

Beyond simple tag filtering, it validates href and src URL schemes, filters iframe hostnames, sanitizes inline styles with PostCSS, escapes all text content, and lets you transform tags on the fly. The result is a small, dependency-light module that gives you fine-grained, server-side control over which HTML is safe to store and render.

What You Get

  • A single sanitizeHtml(dirty, options) function that returns cleaned HTML
  • A configurable per-tag allowlist for tags, attributes, classes, and URL schemes
  • Inline CSS sanitization via PostCSS and iframe hostname filtering
  • transformTags, exclusiveFilter, and textFilter hooks for custom rewriting
  • A sensible default option set covering common rich-text markup

Common Use Cases

  • Sanitizing rich-text editor output before persisting it to a database
  • Cleaning pasted-from-Word markup by stripping unwanted inline styles and tags
  • Rendering user-generated comments or posts without exposing an XSS surface
  • Whitelisting a narrow set of formatting tags for constrained content fields

Under The Hood

Architecture - The entire library is a single ~1,000-line index.js exporting one function, sanitizeHtml. It drives htmlparser2 with onopentag, ontext, onclosetag, and oncomment handlers, maintaining a stack of open tags so it can decide whether each node and its text are kept, escaped, or discarded (tracking depth for discard modes). URL attributes flow through naughtyHref checks, srcset through parse-srcset, and inline styles through a PostCSS AST pass before being reserialized.

Tech Stack - Pure CommonJS JavaScript targeting Node 22+, with a small dependency set: htmlparser2 for parsing, postcss for style sanitization, deepmerge and is-plain-object for option merging, escape-string-regexp, parse-srcset, and launder for href laundering. No build step or transpilation is involved; the published package is just index.js.

Code Quality - The code favors small pure helpers (each, has, filter, isEmptyObject) and defensive guards against prototype-pollution vectors like proto. It is backed by an extensive Mocha suite of roughly 240 test cases in a 2,400-line test file exercising allowlists, URL validation, style filtering, and known XSS payloads, plus ESLint via eslint-config-apostrophe.

API Design - The public surface is deliberately minimal: sanitizeHtml(dirty, options). A well-documented default option set gets developers productive immediately, while allowedTags, allowedAttributes, allowedSchemes, transformTags, exclusiveFilter, and textFilter provide progressively deeper control. The README is thorough with copy-paste examples, keeping the learning curve gentle for the common case.

Used by 42 apps in this directory

TypeScript
93%
Apache 2.0

Openship

Devops · Hosting Control Panel

14,912

Openship is an open-source, self-hostable deployment platform that points at a repo and builds, ships, routes, and TLS-terminates the app — driven from a desktop app, web dashboard, or CLI.

View details
84
Repo Health
85
Technical
65
Dependency
Built with
TypeScript 93%
Updated 5 days 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
99%
Other

Papermark

Digital Signiture · File Storage

9,263

Open-source DocSend alternative with page-by-page analytics, secure data rooms, and custom domains for document sharing.

View details
78
Repo Health
63
Technical
66
Dependency
Built with
TypeScript 99%
Updated 2 months ago
TypeScript
91%
AGPL 3.0

PeerTube

Social Media

15,362

A federated, ActivityPub-based video hosting platform built by Framasoft — self-hostable instances interconnect into a network with no vendor lock-in, P2P-assisted streaming, and no ads.

View details
96
Repo Health
75
Technical
66
Dependency
Built with
TypeScript 91%
Updated 1 weeks ago
TypeScript
67%
AGPL 3.0

Plane

Collaboration · Productivity · Project Management

61,353

Open-source project management platform to replace Jira, Linear, and ClickUp — with built-in cycles, real-time collaborative docs, and full self-hosting.

View details
92
Repo Health
82
Technical
77
Dependency
Built with
TypeScript 67%
Python 30%
Updated 6 days ago
TypeScript
51%
ZLIB

Portainer

Devops

38,707

A lightweight, open-source web UI that puts Docker, Kubernetes, and Podman management within reach of any team—no CLI expertise required.

View details
93
Repo Health
79
Technical
65
Dependency
Built with
TypeScript 51%
Go 38%
Updated 6 days ago
TypeScript
97%
Other

Rocket.Chat

Team Chat

46,304

The secure, self-hosted team communications platform for organizations that cannot compromise on data sovereignty.

View details
96
Repo Health
79
Technical
63
Dependency
Built with
TypeScript 97%
Updated 5 days ago
TypeScript
100%
AGPL 3.0

RSSHub

Automation · Social Media

46,631

Turn any website into an RSS feed — social media, streaming platforms, and niche sites all become subscribable in seconds.

View details
94
Repo Health
82
Technical
71
Dependency
Built with
TypeScript 100%
Updated 5 days ago
JavaScript
100%
AGPL 3.0

Social Analyzer

Security

24,366

Find and analyze a person's digital footprint across 1000+ social media platforms using multi-layer detection, OCR, and metadata extraction.

View details
42
Repo Health
52
Technical
69
Dependency
Built with
JavaScript 100%
Updated 9 months 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