Arbor XML Viewer is a local-only web app for manually inspecting XML documents in a browser. It is built with Preact, TypeScript, and Vite, and it is designed to feel like a polished application rather than a bare developer utility.
This project was vibecoded with GPT-5.4 in the Codex desktop app for full transparency.
The app supports:
- pasting raw XML
- dragging and dropping a local XML file
- choosing a local XML file from disk
- browsing a collapsible tree view of elements, attributes, text nodes, comments, and CDATA
- searching tags, attributes, and text content
- viewing file and structure stats in a floating dock
- light and dark themes
- keyboard shortcuts for common inspection actions
Importer-first workspace for pasting XML or opening a local file:
Loaded inspection view with the collapsible tree and floating stats dock:
Preactfor the UITypeScriptfor application logicVitefor local development and production buildsTailwind CSSfor styling primitivesPlaywrightfor browser-based checksVitestfor unit tests
Node.js 22+npm
npm installStart the Vite development server:
npm run devVite will print a local URL, usually:
http://localhost:5173
Open that URL in your browser.
Create a production build:
npm run buildThe built app is written to dist/.
Because the Vite config uses a relative asset base, the built files can be:
- served by any tiny static server
- previewed with Vite
- opened from a local static hosting setup without a backend
Preview the production build locally:
npm run previewRun the unit test suite:
npm testRun the browser-based end-to-end checks:
npm run test:e2eRun the full verification pass:
npm test
npm run test:e2e
npm run build- Open the app in your browser.
- Load XML in one of three ways:
- paste XML into the input area and click
Parse XML - drag an
.xmlfile into the window - click
Choose XML file
- paste XML into the input area and click
- Inspect the tree view:
- expand and collapse nodes
- click a row to focus it
- use search to jump to matching nodes
- Use the floating stats dock in the upper-right to review file metadata and structure counts.
- Toggle the theme or open the shortcut guide from the top-right controls.
After a document loads, the importer collapses so the tree stays visually dominant. You can reopen the importer at any time from the viewer toolbar.
Cmd/Ctrl + O: open a fileCmd/Ctrl + Enter: parse the current pasted XMLCmd/Ctrl + For/: focus searchEnterorShift + Enterin search: next or previous matchShift + E: expand allShift + C: collapse allI: show or hide the stats dock?: open the shortcut guideEsc: close the shortcut guide when it has focus
src/app.tsx: main UI and interaction logicsrc/lib/xml.ts: XML parsing, normalization, search helpers, and stats computationsrc/lib/format.ts: formatting helpers for sizes, counts, and timingssrc/index.cssandsrc/app.css: visual system and app stylingtests/: Playwright smoke, import, navigation, and styling checkssrc/lib/xml.test.ts: unit tests for the XML model layerdocs/screenshots/: README screenshots of the app states
- The app is read-only in v1. It does not edit or save XML.
- XML content stays in the browser. There is no backend or upload path.
- The current implementation is optimized for typical developer-sized XML files rather than massive streamed datasets.
This project is licensed under the MIT License. See LICENSE.

