Structure Viewer
Explore folders, ZIPs, JSON & GitHub repos
Explorer
No data loaded.
Notes
How things work
Privacy
Local only. Everything runs in your browser — no uploads, no servers, no tracking.
Loading data
Folder. Uses the File System Access API — supported in Chrome and Edge. Subfolders load lazily for performance.
ZIP. Drop in any .zip to explore its full structure without extracting. Works in all modern browsers.
JSON. Loads any .json file as an interactive tree. Arrays of objects use name, title, label, or id as labels when available.
GitHub. Enter owner/repo and an optional branch to load any public repository. Uses the GitHub API — rate limits may apply.
Annotations
💬 Comments. Hover a row and click to add a short note. Appears inline as ← your note. Click again to edit or close. Saved across reloads.
🎨 Highlights. Pick from 6 colours to tint a row. On folders, use 📂 inside the palette to extend the colour to all contents. Changing colour while folder highlight is active updates both together.
📋 Legend. Once a row is coloured, attach a label to that colour (e.g. “backend”). Labels are shared across all nodes of the same colour and appear as a live panel below the tree. Each label must be unique.
🗑 Clearing. Colors wipes all highlights and legend labels. Legend clears labels only. Comments clears all comments. All three also clear the corresponding localStorage data.
Export
Export view captures exactly what is expanded. Export full expands everything first. Comments, highlights, and the legend are all included. UI buttons and inputs are never exported.
Theme background. Toggle whether exports include the current theme background or use a transparent background.
Other
Advanced icons. Replaces generic file emoji with file-type icons based on extension. Loaded from the web and cached locally. May slow down very large trees slightly.
Performance. Expanding very large trees may take a moment, especially with “Expand all”.
JSON display. For arrays of objects, common fields (name, username, title, id) are used as node labels when available.