About BeautifyXML
BeautifyXML is a careful XML formatting, inspection and comparison workspace. Its promise is readable XML with explicit preservation rules: element-only structure is indented, while text, mixed content and xml:space="preserve" regions are copied exactly and marked. Every formatted result is re-parsed and compared with the source before you can apply it.
Profile and limits
- Parser: bxml-cst 1.0.0, written for this site. XML 1.0 + Namespaces 1.0. XML 1.1 documents are parsed with 1.0 rules and flagged.
- No external DTD or entity is ever fetched; internal entities are recorded but not expanded; the five predefined entities and character references are decoded only for comparison.
- Positions: lines and columns start at 1; columns count UTF-16 code units in the decoded text (BOM removed).
- Limits: 12 MB editing input, nesting depth 1,000, 500,000 nodes, 40,000 tree-view nodes, syntax colouring up to 300,000 characters. Hitting a limit gives a partial status, never a silent truncation.
- XPath: XPath 1.0 only, via the browser engine on the page thread. XSD/DTD validation: not available (shown as unknown).
- Storage: drafts and recipes in this browser’s IndexedDB. That is not a backup — export what you need to keep.
Feature status
Statuses map to the product requirement IDs. LOCAL means deterministic code running in your browser; NATIVE means a browser built-in; UNSUPPORTED means not available yet or excluded. See also the privacy note.
| ID | Capability | Status | Label | Notes |
|---|---|---|---|---|
| BXML-001 | Open/paste XML (R1) | Done | LOCAL | Paste, file picker, drag-and-drop. BOM and declaration sniffed; conflicts require a decision; original bytes kept for download. |
| BXML-002 | Well-formedness parser (R1) | Done | LOCAL | Own error-recovering XML 1.0 + Namespaces parser with exact spans (line/column in UTF-16 code units). Invalid source stays editable. |
| BXML-003 | Source/tree/split view (R1) | Done | LOCAL | Source editor + tree (elements, attributes, text, CDATA, comments, PIs, DOCTYPE) with keyboard navigation and search. |
| BXML-004 | Namespace inspector (R1) | Done | LOCAL | Bindings, uses, rebinding, unused, prefix vs expanded names, same-local-name collisions; unbound prefixes diagnosed. |
| BXML-005 | Safe indentation (R1) | Done | LOCAL | Only element-only regions with line-break whitespace are re-indented; output re-parsed and compared before it is offered. |
| BXML-006 | xml:space handling (R1) | Done | LOCAL | Inherited preserve/default computed per element; preserve subtrees copied verbatim (nested default regions are conservatively left as written). |
| BXML-007 | Attribute layout choices (R1) | Done | LOCAL | Keep / one line / wrap / aligned / one per line; quote normalisation with escaping; explicit sort by expanded name. |
| BXML-008 | Empty-element style (R1) | Done | LOCAL | Keep, <a/> or <a></a>; count reported. |
| BXML-009 | Comment/PI retention (R1) | Done | LOCAL | Position and order retained; invariant check includes comments and PIs. |
| BXML-010 | CDATA controls (R1) | Partial | LOCAL | CDATA boundaries always retained by the formatter; diff can treat CDATA as text. No CDATA↔text normalisation command yet. |
| BXML-011 | Entity safety (R1) | Done | LOCAL | No external DTD/entity fetch anywhere; internal entities never expanded; recursion and expansion bombs reported as bounded errors. XPath strips the DOCTYPE before DOMParser. |
| BXML-012 | Format preview/diff (R1) | Done | LOCAL | Preview, line diff and content check before Apply; Apply disabled until the result matches the current revision. |
| BXML-013 | Minify with preservation (R1) | Done | LOCAL | Removes only formatting whitespace in element-only regions; comment removal is opt-in and reported. |
| BXML-014 | Unicode/encoding export (R1) | Done | LOCAL | UTF-8 (±BOM), UTF-16LE/BE, ISO-8859-1, US-ASCII. Unrepresentable characters block or convert to verified character references; declaration must match. |
| BXML-015 | Structural/source compare (R1) | Done | LOCAL | Separate lexical (Myers line diff) and structural (parsed node stream) results with a visible equality policy. |
| BXML-016 | Signature warning (R1) | Done | LOCAL | ds:Signature detected by expanded name; warning in preview, findings, export and batch. No validity claims. |
| BXML-017 | Download/copy original or output (R1) | Done | LOCAL | Export review: output, current source, extracted element or original bytes, with findings and revision shown. |
| BXML-018 | Undo/recovery (R1) | Done | LOCAL | Transaction undo/redo (30 steps); IndexedDB draft autosave on the home workspace with restore banner; private mode. |
| BXML-019 | Safe selection formatting (R2) | Not done | UNSUPPORTED | Roadmap. Whole-document formatting only; subtree extraction is available. |
| BXML-020 | Batch/ZIP (R2) | Done | LOCAL | Files or ZIP (stored/deflate); path, count and expanded-size validation; per-file results; ZIP output. |
| BXML-021 | Local XPath profile (R2) | Done | NATIVE | Browser XPath 1.0 via document.evaluate on the main thread with limits; 2.0+ syntax flagged unsupported; typed results; zero matches distinct from failure. |
| BXML-022 | Local XSD validation (R2) | Not done | UNSUPPORTED | No qualified engine. Status is shown as “unknown — not checked”, never valid. |
| BXML-023 | XML↔JSON mapping (R2) | Done | LOCAL | Ordered (round-trip) and compact profiles; compact always lossy with an itemised loss report; JSON→XML rules. |
| BXML-024 | SOAP/request inspection (R2) | Partial | LOCAL | SOAP 1.1/1.2 envelope summary (header blocks, payload, fault) in Findings; no separate envelope source views. Nothing is ever sent. |
| BXML-025 | Namespace rename (R2) | Not done | UNSUPPORTED | Roadmap. |
| BXML-026 | Extract elements/attributes/text (R2) | Partial | LOCAL | Element extraction with ancestor namespace context (and inherited xml:space), or blocked when unresolved. Attribute/text extraction via XPath export. |
| BXML-027 | XML escape/unescape (R2) | Done | LOCAL | Text, attribute (both quotes) and CDATA contexts; single-pass unescape into a text box only. |
| BXML-028 | Rule-based lint (R2) | Partial | LOCAL | Six style rules shown separately from syntax and schema status; rules are not configurable yet. |
| BXML-029 | Presets/recipes (R2) | Done | LOCAL | Versioned JSON recipes (beautifyxml.recipe/1), strict validation, IndexedDB storage, import/export. |
| BXML-030 | Qualified canonicalization (R3) | Not done | UNSUPPORTED | Not offered. Formatting is not canonicalization. |
| BXML-031 | Large-file source mode (R3) | Partial | LOCAL | Bounded: 12 MB editing limit, depth 1000, 500k nodes, 40k tree nodes, highlighting off above 300k chars; partial status shown, never silent truncation. |
| BXML-032 | Arbitrary XSLT/remote resolution (X) | Not done | UNSUPPORTED | Excluded by design. |
| BXML-101 | Protected-region explanation (R2) | Done | LOCAL | Hatched marks in the preview with reasons, “next region” navigation, list in Findings. |
| BXML-102 | Attribute alignment presets (R2) | Done | LOCAL | Aligned/wrapped/one-line layouts; duplicate expanded names rejected by the parser and the invariant check. |
| BXML-103 | XML declaration editor (R2) | Partial | LOCAL | Encoding pseudo-attribute is synchronised on export when chosen; no general version/standalone editor. |
| BXML-104 | Entity notation inspector (R2) | Done | LOCAL | References listed as written vs resolved character content with status (predefined, char, internal-unexpanded, external-blocked, undeclared). |
| BXML-105 | Namespace dependency report (R2) | Partial | LOCAL | Shown for element extraction (added bindings, heuristic QName values); no move operation. |
| BXML-106 | XPath result export (R2) | Done | NATIVE | JSON/CSV export with declared result type, expression and namespace map. |
| BXML-107 | Schema error source mapping (R2) | Not done | UNSUPPORTED | Depends on BXML-022. |
| BXML-108 | Safe pretty-print recipes (R2) | Done | LOCAL | Recipes pin formatter version, options and policy; data only. |
| BXML-109 | Document statistics (R2) | Done | LOCAL | Counts with complete/partial status. |
| BXML-110 | Format version comparison (R3) | Not done | UNSUPPORTED | Single formatter version so far. |
| BXML-111 | Comment removal transformation (R3) | Partial | LOCAL | Available in the minifier as an explicit, reported option; Undo restores. |
| BXML-112 | PI handling controls (R3) | Partial | LOCAL | PIs preserved as inert data; no removal/reorder controls. |
| BXML-113 | Secure SVG source mode (R3) | Partial | LOCAL | SVG is edited as source/tree only and never rendered; no isolated preview. |
| BXML-114 | Canonicalization conformance report (R3) | Not done | UNSUPPORTED | — |
| BXML-115 | XML test fixture bundle (R3) | Not done | UNSUPPORTED | The PRD acceptance fixtures exist as unit tests in the source repository. |
Sample documents
All sample XML and JSON on this site is synthetic and self-authored (version 1, October 2026). It contains no real customer, account or signature data; the signature sample’s values are placeholders.