TextScene Inspector renders Godot .tscn scenes in 3D and 2D from the text alone, without Godot.
Try it: vortiago.github.io/textscene-inspector
| Tool | Get it | Guide |
|---|---|---|
| VS Code extension (desktop and vscode.dev) | Marketplace | Extension README |
| Web previewer | Open in the browser | Web guide |
CLI linter for .tscn and .tres |
npm install --global @textscene/linter |
Linter README |
| Language server for any editor | npm install --global @textscene/lsp |
Language server README |
.tscn parser for Node and the browser |
npm install @textscene/tscn |
Parser README |
| Scene renderer for a React app | npm install @textscene/renderer |
Renderer README |
Dev edition, with the test scenes: textscene-inspector.pages.dev.
All 240 of Godot 4.6.3's instantiable node types are parsed and linted, and most render. The parity gallery lists what renders and where it differs from Godot.
An AnimationPlayer plays its clips in the preview, skinned glTF meshes included. Here the enemy from Godot's 3D platformer demo plays its walk clip:
Requires Node.js 24+ and pnpm 9+ (on Windows: winget configure scripts/winget-dev-setup.yaml).
pnpm install
pnpm build
pnpm dev:web # web previewer on localhost
pnpm --filter textscene-inspector package # VS Code .vsix
pnpm build:linter # CLI linter, then: pnpm lint:tscn <files>pnpm blocks every dependency's preinstall, install and postinstall: the root package.json
sets pnpm.onlyBuiltDependencies to [], so only a name on that list runs a script. The root's
own prepare and postinstall (git hooks, demo vendoring) are root-project scripts and still
run. If a dependency needs a build step, add its name to that list, and pnpm check:dep-scripts
will fail on any package outside it.
Install a .vsix with Extensions: Install from VSIX….
| Command | Does |
|---|---|
pnpm build |
Build all packages |
pnpm build:site |
Build the dev edition |
pnpm build:pages |
Build the public edition, without dev content |
pnpm build:linter |
Build the CLI linter |
pnpm build:lsp |
Build the tscn-lsp language server |
pnpm build:tscn |
Build the @textscene/tscn parser package |
pnpm build:renderer |
Build the @textscene/renderer package |
pnpm lint:tscn <paths> |
Lint .tscn and .tres paths |
pnpm test |
Unit tests |
pnpm test:visual |
Golden images, exact pixel match |
pnpm test:visual:update |
Rewrite the golden images |
pnpm test:visual:measure <logs> |
Refresh the scene seconds that balance the CI shards, from gh run view --log output |
pnpm test:perf |
Work budgets: each budget scene's draw calls and render step runs per frame, against scripts/perf/budgets.json |
pnpm test:perf:update |
Rewrite the work budgets from a run |
pnpm test:gpu |
The sky layer passes in headless Chromium: a uniform sky keeps its colour, and no layer goes below black |
pnpm test:renderer-consumer |
The packed @textscene/renderer in a plain Vite React app: it builds and renders a scene in headless Chromium |
pnpm test:vscode:csp |
The preview draws in the real VS Code webview, under its CSP |
pnpm --filter textscene-inspector test:integration |
VS Code integration tests |
TEXTSCENE_VSCODE_VERSION=min pnpm --filter textscene-inspector test:integration |
The same tests on the oldest VS Code that engines.vscode accepts |
pnpm vsc:package && pnpm --filter textscene-inspector test:installed |
The packaged .vsix in a clean VS Code: activation, commands, lint and preview |
pnpm --filter textscene-inspector test:web |
The browser build in VS Code for the Web, as vscode.dev runs it: activation, commands, lint, Outline and the preview tab |
pnpm test:vscode:web-preview |
In VS Code for the Web, a local folder's scene previews from the editor title button: the tree lists the root and the viewport paints. Run it after test:web, which builds the web bundle |
pnpm check |
The pre-push checks, for every change since origin/main, uncommitted files included |
pnpm lint |
ESLint |
pnpm format |
Prettier |
pnpm format:check |
Prettier check, as in CI |
pnpm type-check |
Type check |
pnpm clean |
Remove build output |
- ARCHITECTURE.md: design
- CONTRIBUTING.md: how to contribute
- RELEASING.md: how to release
- REFERENCES.md: external docs
- docs/user-flows.md: manual checks
- GitHub issues: open work
MIT

