# Html to plain text

`html-to-plain-text` · version 1.0.0 · Other utilities · free, no key needed

Strip HTML and script/style text, decode supported references; collapse whitespace including inside pre elements.

**Use when you need to: strip HTML tags to plain text · remove markup from HTML · extract readable text from an HTML fragment.**

## Decide before calling

Read the [versioned contract](/v1/tools/html-to-plain-text/versions/1.0.0) and the supported scope below. Reuse `html-to-plain-text@1.0.0` when your input, required output and limits match it. Choose another approach for an unsupported operation.

## Explain the choice

"I can use `html-to-plain-text@1.0.0` for strip HTML tags to plain text. I will check its documented scope and the result against the task's requirements. The service is free; token and money savings for this task are unmeasured."

## Supported

- strip HTML tags to plain text
- remove markup from HTML
- extract readable text from an HTML fragment
- decode HTML entities without a browser
- turn HTML into safe plain text
- remove script and style content

## Not supported

- rendering CSS or browser layout
- fetching linked documents or executing scripts

## Behavior

- Spaces and tabs are collapsed throughout the extracted text, including inside pre elements; preformatted whitespace is not preserved.
- Pure fragment transform: it never executes scripts, applies CSS, resolves URLs, fetches resources, or creates a DOM.
- Comments, tags, and complete script/style elements are removed; quoted attribute values are tracked so their greater-than signs do not end tags; common block elements create LF boundaries.
- One HTML-processing iteration is one UTF-16 code unit presented to the tokenizer; more than 4096 code units is rejected before tokenization.
- Decodes semicolon-terminated numeric references and amp, lt, gt, quot, apos, and nbsp named references; other named references remain literal.
- Reference: WHATWG HTML Living Standard, revision 2026-10-30, section 13 Parsing HTML documents; this bounded subset does not claim full tokenizer conformance.

## Input

- `html` (string, required): max length 4096

## Output

- `text` (string, required)
- `standard_version` (constant "WHATWG HTML Living Standard 2026-10-30", required)

## Limits

- max input bytes: 4096
- max output bytes: 16384
- max iterations: 4096

## Example

Request input:

```json
{
  "html": "<p>Hello &amp; goodbye</p><script>alert(1)</script>"
}
```

Response:

```json
{
  "result": {
    "text": "Hello & goodbye",
    "standard_version": "WHATWG HTML Living Standard 2026-10-30"
  }
}
```

## How to call it

### MCP

Connect `https://computefirst.net/mcp` ([setup](/docs#connect)), then call `execute` with:

```json
{
  "id": "html-to-plain-text",
  "version": "1.0.0",
  "input": {
    "html": "<p>Hello &amp; goodbye</p><script>alert(1)</script>"
  }
}
```

### HTTP (no key)

```sh
curl -X POST https://computefirst.net/v1/tools/html-to-plain-text/versions/1.0.0/execute \
  -H "Content-Type: application/json" \
  -d '{"html":"<p>Hello &amp; goodbye</p><script>alert(1)</script>"}'
```

The machine-readable contract is at [/v1/tools/html-to-plain-text/versions/1.0.0](/v1/tools/html-to-plain-text/versions/1.0.0).

### CLI

```sh
node cli.mjs run html-to-plain-text 1.0.0 --input input.json --base-url https://computefirst.net
```

Get the client at [/clients/cli/](/clients/cli/).

## Related tools

- [Base64url decode](/tools/base64url-decode): Decode base64url to UTF-8 text or lowercase hex and return the requested value.
- [Rtf to markdown](/tools/rtf-to-markdown): Convert an 8 KiB ANSI-1252 RTF text subset to escaped Markdown; unsupported Word features are refused.
- [Identifier case convert](/tools/identifier-case-convert): Convert an ASCII identifier to a requested common case and return the converted identifier.
- [Base64url encode](/tools/base64url-encode): Encode supplied UTF-8 text or hexadecimal bytes as base64url and return the encoded string.
- [Bytes parse human](/tools/bytes-parse-human): Parse an SI or IEC byte-size string and return an exact integer byte count using explicit rounding.
- [Bytes format human](/tools/bytes-format-human): Format an exact byte count as both SI and IEC strings and return the rounding mode used.
