# Architecture Data Tools is a relocatable static React application. There is no application server and no runtime API. ## Pipeline 1. The UI checks the local file size before decoding and passes text, the selected format and the optional filename to a fresh module worker. 2. The worker applies byte/character and structural preflight limits, including a streaming dimension pass before delimited parsing, then parses with format-specific defensive options and converts the result into a serialisable typed node model. 3. The model is measured again for node count and depth before it is returned. A newer request terminates the older worker, and a 30-second deadline terminates a stalled parse. The UI retains the last successful model until a new one is ready. 4. Tree, table, flattened and query projections operate on the model with their own preview/result caps. 5. Serialisers create a new string and a structured list of notices, coercions and losses. Output is capped before it reaches copy or download actions. The node model has explicit null, boolean, string, number, date, array and ordered-object variants. Number nodes retain a source representation (`exact`, `bigint` or `binary`) and an exact display lexeme. Objects use ordered entry arrays rather than assigning untrusted keys to ordinary JavaScript objects. XML deliberately does not pretend to be a JSON object. It is represented as explicit element records containing qualified name, namespace URI, attributes and ordered child records. Converting XML to another syntax therefore exposes this model and reports the convention. ## Parsers Runtime versions are pinned exactly: `lossless-json` 4.3.1, `yaml` 2.9.0, `smol-toml` 1.8.0, `@xmldom/xmldom` 0.9.12 and `papaparse` 5.7.0. No imported value is rendered as HTML or executed. Version 0.1 keeps its bounded data-model functions as pure app modules rather than introducing a runtime helper dependency. They are intentionally shaped for later replacement by the shared limits and download APIs.