Extensions
An extension is a first-party tool that Tetravox does not ship with: bigger than a toolbar toggle and smaller than a second application — an editor for one kind of data, with its own panel, its own keys and its own file formats — downloaded, checked, and turned on by hand. Nothing is built in: every extension arrives the same way, through File ▸ Extensions…. One extension at a time sits in the panel; any number can be open at once in their own windows (below).
The switcher is the ▾ button in the toolbar's right cluster, beside ? and ⚙. It lists every extension this machine carries; picking one opens its panel, picking it again closes it. The panel itself is the slot: a section in the right column, above the Info panel, so the crosshair read-out stays visible while you work — that is the feedback most extension actions are judged by. The slot never takes more than a bit over half the column and scrolls inside itself; with no extension active it is not there at all.
Its own window. The ⧉ in the slot's header — and the ⧉ beside any row in the switcher — opens that extension in a window of its own, which you can move to a second monitor and make as large as the work needs. Nothing is unloaded by the move: the same editor, the same undo history, the same unsaved edits, and closing the window brings it straight back to the panel. It is what makes several extensions usable at once — one in the panel, the rest in windows — and what gives an extension with a lot to show more than a 320 px column. A window's keys belong to the extension in it, and the panel's keys to the extension in the panel, so two open extensions never fight over a key. Opening a second extension into the panel moves the first one to a window rather than closing it. (An extension whose panel only makes sense beside the crosshair read-out can decline the button.)
Below about 1000 px the sidebars normally collapse into overlays that close on the next click in a pane. While an extension is in the panel the right sidebar stays in flow instead, because an extension asks you to click in the panes and an editor that closed itself on the first click would be unusable.
Keys. An extension may bind a s d f g n p t z Delete Backspace, on their own or with Shift, and only while it is active. They resolve after the ordinary key map, so no extension can shadow r, x, c, v, m, the camera presets or anything else in this guide, and Esc is never an extension key. The toolbar's ? sheet grows an Extensions tab listing the active extension's chords.
An extension's status — how many things it holds, what mode it is in — is one cell at the left of the status bar, before the dataset cells.
Unsaved edits. An extension's own edits are separate from the scene's. While one has unsaved work the window title carries the same • a dirty scene does, and New, opening a scene, dropping a scene on the window and closing a dataset all ask first, offering Save…, Discard and Cancel. ⌘S saves the scene; when an extension still has unsaved work it says so rather than letting you believe otherwise — an extension saves its own files from its own panel.
Scenes carry extensions. What an extension needs to reopen — never a copy of the data, just its own small record — is written into the *.tetravox.json under the extension's id, and read back when the scene is opened. A scene written by a build that has an extension you do not is not damaged by opening and re-saving it here: the block is carried through untouched.
Layers an extension owns are marked in the layer panel and show a read-only summary instead of the usual editor, so the extension's own controls stay the only way to change them; closing such a layer's dataset closes the extension's layers with it.
File ▸ Extensions… opens the list, and so does Manage extensions… at the bottom of the toolbar's switcher. Each card is one extension and one button that says its true state:
| The card says | What it means |
|---|---|
| Download & enable | It is in the catalogue and not on this machine. |
| Enable | Its files are here and it is not allowed to run. |
| Enabled ✓, with Disable | It is running. |
| Update to 1.1.0 | A newer version this build can run is available. |
| Greyed, needs Tetravox host API 2 | It was written for a newer Tetravox. Update the app. |
Downloading is not turning on. The files land in ~/.tetravox/modules/ and can do nothing at all until you say so. When you enable one for the first time, Tetravox shows a sheet naming the extension, its version, the repository it came from, and — read out of the extension's own manifest, not out of a description it wrote about itself — everything it will be able to do:
- read the file types it declares, in files you choose from a dialog;
- write the file types it declares, to files you name in a Save sheet, plus the sidecars it declares beside them (a timestamped
.bak, an edit log); - bind its keys while it is active;
- run the operations it declares from a job file;
- keep its own record inside a saved scene.
Enable it only if you trust where it came from. An enabled extension runs as part of Tetravox, with the same access to your files as the app itself. Tetravox verifies that the bytes it downloaded are exactly the bytes the catalogue promised — every file is checked by its SHA-256 at download and again every time it is enabled — so nobody can substitute different code for the version you agreed to. That is a guarantee about tampering, not about intent: it cannot tell you whether the author is trustworthy. Extensions in the Tetravox catalogue are reviewed before they are listed.
Disable withdraws consent immediately: the extension leaves the switcher, its code stops being reachable, and any permission a Save sheet had granted it is taken back. Its files stay on disk, so turning it on again is one click and one sheet. Remove disables it and deletes the files. Show folder opens ~/.tetravox/modules/ if you want to look.
Updates ask again. A new version is new code with a possibly different list of things it can do, so consent is recorded per version rather than once per extension.
The list refreshes itself. Tetravox re-reads the curated catalogue when it starts and whenever you open this dialog, so a new version of an extension shows up as Update to X without waiting for a new Tetravox. Switching off "Check for updates on launch" (Settings ▸ Startup) stops the launch refresh; opening the dialog still asks.
Offline is normal. The catalogue Tetravox ships with is used when the registry cannot be reached, so the dialog always opens and always lists what is already installed. An empty catalogue says so rather than looking like a failure.
Automation. A job file may name an enabled extension's operations. A job naming an installed-but-not-enabled extension stops before it does anything and tells you which one to turn on.