Studio
Studio is the editor inside Eustress Engine: the window where you build a Space, select and transform its objects, edit their properties, undo any step, and run the result. This page is the tour of every panel, tool and shortcut in it.
01The Window
Layout
Studio is one window. The ribbon runs across the top, the 3D viewport fills the middle, a panel sits on each side, and Output with the command bar runs along the bottom. Drag the inner edge of a side panel to resize it (180 to 600 px on the left, 200 to 700 px on the right), and drag the top edge of Output to make it taller or shorter.
Panels and Tabs
| Region | Tabs | Toggle |
|---|---|---|
| Left | Explorer, Assets, Universes, Toolbox, and Terrain under the chevron | Ctrl+1 (Explorer) |
| Right | Properties, History, Soul, Workshop, and Problems under the chevron | Ctrl+2 (Properties) |
| Bottom | Output, Timeline, Data Grid | Ctrl+3 (Output) |
The strip above the viewport works like a code editor's tab bar. The first tab is the Space itself and is pinned there. Scripts, documents, images, web pages and charts you open get tabs of their own beside it, which you can drag to reorder. The globe button at the far left opens this Learn site in a web tab. Near the right end sits the Perspective control, covered on the Perspective page.
Output collects every message from Studio and from scripts. Its toolbar filters by level (info, warnings, errors, debug) and by source (Rune, Luau), has a Filter... box, a Clear button and an auto-scroll switch. Soul lists the Space's scripts with their build status, Workshop is the AI assistant, and Problems lists script diagnostics.
Layout Presets
The selector at the top left of the viewport switches between five layouts in one click. Each sets which panels show, how wide they are, and which tab is in front:
| Preset | Shows |
|---|---|
| Default | Explorer, Toolbox, Properties and Output |
| Scripting | Explorer, Output and the Soul panel; no Properties |
| Building | Explorer, Toolbox, Assets and Properties; no Output |
| Minimal | Only the viewport |
| Wide Panels | Every panel except Soul, with a 350 px left panel |
02Explorer
The Tree
The Explorer is the tree of every instance in the Space. The top level is the
Space's services (Workspace, Lighting, SoulService and the rest); objects nest under
them the way their folders nest on disk. Click a row to select it, Ctrl-click to add or remove a row, and Shift-click
to select a range.
| Action | How |
|---|---|
| Move through rows | Up / Down |
| Collapse or expand the row | Left / Right, or click the arrow |
| Rename | F2, type, Enter |
| Expand a row, or open a script | Double-click |
| Insert an object inside a row | The plus button that appears at the right of the row on hover |
| Clear the selection | Click the empty space below the tree |
Reparenting
Drag a row onto another row to make it a child of that row. A blue pill with the row's name follows the cursor, and the target row lights up. You can drop onto a service too, to move an object into Workspace or ReplicatedStorage. With several rows selected, the whole selection moves.
Because the Explorer mirrors the folders on disk, reparenting moves the object's
folder into its new parent's folder. The move is one undo step: Ctrl+Z puts every moved object back where it came from.
Search
The box at the top of the Explorer filters the tree as you type. Press Ctrl+Shift+X to jump to it from anywhere. A search is a list of terms
separated by spaces, and a row must match every term; or splits the
query into alternatives. Matching ignores case. The parents of every match stay
visible, so a hit deep in the tree still shows where it lives.
| Term | Matches | Example |
|---|---|---|
| plain text | The row's name, or the text of any TextLabel under it. A second try ignores spaces, so the ledger finds TheLedger. | ledger |
| a quoted phrase | Keeps words together as one term | "big wall" |
is:Class | An exact class, or a family of classes | is:Model, is:BasePart |
tag:Name | A CollectionService tag | tag:Door |
Property = value | A property value; == works too, with or without spaces | Anchored = false |
-term | Rows where the term does not match | -tag:Door |
or | Either side may match | is:Model or tag:Door |
The property terms are Name (part of the name), ClassName (exact), and, on parts, Anchored, Locked, CanCollide, CastShadow (true,
false, yes, no, 1 or 0), Transparency and Reflectance (numbers, to within 0.001) and Material (Material = Neon). The families is: understands:
BasePart: Part, MeshPart, UnionOperation, WedgePart, CornerWedgePart, TrussPart, Seat, VehicleSeat, SpawnLocation, CadPart.PVInstanceadds Model.GuiObject: the GUI leaves, from Frame and TextLabel to WebFrame.Guimeans ScreenGui, BillboardGui and SurfaceGui.Script: SoulScript, Script, LocalScript and ModuleScript.Light: the four light classes.Constraint: the joint and constraint classes.
So is:Part Anchored = false or tag:Door reads as: unanchored Parts,
or anything tagged Door.
The filter runs over the rows of expanded branches. Objects inside a collapsed Model are not searched until you expand it; the text of a collapsed part's own labels is the exception. Expand the branch first when a search comes up empty.
03Properties and Insert
Editing Properties
Properties edits the selected object. For a part the rows come in sections:
Metadata (Name, ClassName, the file's authored Unit), Transform (Position, Rotation,
and Scale, which is the part's size), Appearance (Color, BrickColor, Transparency,
Reflectance, CastShadow, Material), Physics (Anchored, CanCollide, Locked,
Destructible), then Attributes and Parameters. Tags are edited at the top of the
panel. Type a value and press Enter; number fields take plain
numbers.
With several objects selected, Properties shows the values of one of them, the primary selection, and an edit spreads like this:
| You edit | What happens to the selection |
|---|---|
| Color, Transparency, Reflectance, Anchored, CanCollide, Locked | Every selected part takes the new value, recorded as one History entry |
| Position | The primary goes to the typed position and every other part moves by the same offset, so the group keeps its layout |
| Rotation | The primary takes the typed rotation and every other part turns by the same amount about its own origin |
| Anything else, including Name, Material and Scale | Only the primary changes |
- Color: the swatch opens an RGB Color popup with R, G and B sliders from 0 to 255, a box per channel, and a Hex field for
#RRGGBB. - BrickColor: opens Color Wheels. Choose one of seven named wheels (Aether, Halo, Verdure, Stone, Char, Hex, Umbra), then one of its 127 named cells. The color goes to every selected part and the field shows the cell's name.
- Display units: the Units badge at the right of the menu bar shows Position and Scale in another unit and converts what you type back. Its menu lists Meters, Centimeters, Millimeters, Feet and Inches, plus Roblox's own unit for builders coming from there. The Space is always stored in meters, and the display returns to meters at the next launch.
- Filter:
Ctrl+Shift+Ejumps to the Filter properties... box, which keeps the rows whose name contains what you type.Escclears it. - Attributes and tags: the plus on the Attributes header opens Add Attribute (a name, one of 17 types, a value). Type a tag in the box at the top and press
Enter.
Insert Object
The Insert Object dialog is a search box over every class you can create. Open it
with Ctrl+I, with the plus button on an Explorer row, from Insert > Insert Object..., or from a row's context menu. Its
header names the destination, into Workspace or into the
selected object.
Type any part of a class name, or of a category such as Lighting or GUI: the list narrows on every keystroke. Up and Down move the highlight, Enter inserts, Esc or a click outside closes. The new object is selected and can be
undone like any edit.
Where New Objects Go
The list is built from the running engine: a class appears when it has both a spawner and a template, so every row creates something. The Insert menu shows the same catalog grouped by category, under a pinned COMMON group: Part (Block), Sphere, Cylinder, Wedge, Model and Folder.
- Inside the selection: with an object selected, the new object goes inside it.
- The COMMON primitives (Part, Sphere, Cylinder, Wedge) otherwise go to Workspace, 10 m in front of the camera, sized from the part catalog: a Block is 4 by 1 by 2 m, a Sphere 2 m across.
- Every other class starts from its template and otherwise goes to the service its category belongs to: lights to Lighting, audio to SoundService, GUI to StarterGui, scripts to SoulService, and everything else to Workspace.
- Right-click in the viewport for Insert Part Here, which drops a part at the point you clicked.
04Selection and Tools
Selecting
Click a part in the viewport to select it; a selected part gets a blue outline.
With the Select tool, whatever a click would pick shows an amber outline as the
cursor passes over it. Clicking a part whose parent is a Model selects the Model;
hold Alt to pick the part itself. Locked parts cannot be picked.
| Input | Result |
|---|---|
| Click | Select just this |
Ctrl + click | Add it, or remove it if it was selected |
Shift + click | Add it |
Ctrl+Shift + click | Remove it |
| Click empty space | Clear the selection |
| Drag from empty space | Box select: every unlocked part whose center lands in the box. Hold Shift to keep what was selected. |
The hierarchy commands grow or move a selection through the tree: Select Children adds one level down, Select Descendants every level, Select Siblings the rest of each parent's children, Select Parent replaces the selection with the parents, and Invert Selection swaps selected and unselected. They are on the context menus and the keys below.
A right click in the viewport that does not move the mouse opens the viewport menu: Insert Part Here, Paste Here, Focus Selection, Select Children, Duplicate, Rename, Copy, Cut, Toggle Anchor, Toggle Lock, Group, Ungroup, Copy Path and Delete. A right drag looks around instead.
Move, Scale, Rotate
Pick a tool from the Tools group on the Home tab or with its key. In every tool you can also drag a selected part's body: it slides across whatever is under the cursor and lands flush on it, part or terrain.
| Tool | Handles | Drag |
|---|---|---|
Select (Alt+Z) | None | The body only |
Move (Alt+X) | Six arrows and three plane squares | An arrow moves along its axis, a square within its plane |
Scale (Alt+C) | A cube on each face and one in the center | A face cube moves that side and the opposite side stays put; hold Ctrl to keep the center fixed; the center cube scales evenly |
Rotate (Alt+V) | Three rings and a center sphere | A ring turns about its axis in 15 degree steps; Shift for 1 degree, Ctrl for none |
The handles follow world axes until you press Ctrl+L or choose Local in the ribbon's Space group; then they follow the selected
object's own axes. Esc cancels a handle drag and puts everything back.
Handles always draw on top of the scene, so a handle buried inside the part it
controls is still visible and grabbable. Move handles keep one size on screen at any
distance, and Rotate rings never shrink below a minimum on-screen size.
Snapping
The Snap group on the Home tab holds the Snap switch, the Move
increment (default 1 m) and the Rotate increment (default 15
degrees). The keys 1, 2 and 3 set the
Move increment to 1 m or 0.2 m, or turn move snapping off.
- Move handles move in whole increments from where the drag began. Scale rounds sizes to the increment, never below 0.1 m.
- Body drags land flush on the surface under the cursor, snap to the increment in that surface's own axes, and pull onto a corner within 0.5 m.
- Rotate always uses the Rotate increment; the Snap switch does not affect it.
- Collisions, the last button in the group and off by default, stops a dragged part at other parts instead of letting it pass through.
-lifts the selection one increment (1 m with snapping off) and=settles it one increment down, or flush onto a surface within that distance. Hold either key to repeat.Ctrl+Rturns the selection 90 degrees about the vertical axis andCtrl+Ttilts it 90 degrees about Z.
Smart Build Tools
The Drafting tab holds tools that work from picks or from the whole selection.
While one is armed, the Tool Options bar at the top left of the viewport shows the
step you are on and the tool's options; Esc or its × button cancels. When a tool commits, a toast offers Undo for 5 seconds.
| Tool | Key | What it does |
|---|---|---|
| Gap Fill | Ctrl+Alt+G | Pick two parts, then click once more: fills the gap between them with 2 or 4 anchored wedges (Thickness 0.2 m by default) |
| Resize | Ctrl+Alt+A | Pick a source, then a target: the source's facing side stretches to meet the target (Outer Touch, Inner Touch or Rounded Join) |
| Edge | Ctrl+Alt+E | Pick a source, then a target: moves the source's origin onto the target's origin |
| Swap | Ctrl+Alt+P | Pick two parts: they trade positions, and rotations too with the advanced option |
| Mirror | Ctrl+Alt+M | Choose the XY, XZ or YZ plane through the origin and press Apply: mirrored copies of the selection. Linked copies keep following their source. |
| Material Flip | Ctrl+Alt+F | Rotate or mirror the texture on every selected part, applied at once and not undoable |
| Align X, Y, Z | Ribbon | Line up the centers of two or more parts on one axis |
| Dist X, Y, Z | Ribbon | Space three or more parts evenly along an axis; the two ends stay put |
| Linear, Radial, Grid | Ctrl+Alt+L, Ctrl+Alt+R, Ctrl+Alt+K | Copy the selection in a row, around an axis, or in a 3D grid of up to 1,000 copies per part; press Apply. Each array is one undo step. |
| Path | Ctrl+Alt+H | Click two or more points, then apply: copies spaced evenly along the path, optionally turned to follow it |
Clicks in the viewport still change the selection while a tool is armed, and the array tools read the selection only when you press Apply. Select what you want copied, arm the tool, and set its options in the panel without clicking in the viewport.
05Undo and History
Undo and Redo
Every edit that changes the Space becomes one step on a single history: moves,
rotations and resizes, property edits, attributes and tags, inserts, deletes,
reparenting, grouping and CAD edits. Ctrl+Z undoes the newest step and Ctrl+Y (or Ctrl+Shift+Z) redoes it; the History group
on the Home tab has the same two buttons. Making a new edit after an undo discards
the steps you could have redone.
Delete moves the object's folder into the Space's .eustress/trash
folder, and undo moves it back. A few changes happen outside the history and cannot
be undone: objects a command-bar script creates, labels removed with the MindSpace Remove button, Material Flip, and clearing terrain.
The History Panel
The History tab in the right panel lists every step with an icon for its kind. A blue bar marks the current step, and steps you have undone are dimmed. Click a row to jump there: Studio undoes or redoes until that step is the newest one applied. Right-click a row for two more commands:
| Command | What it does |
|---|---|
| Undo This ... Change | Reverses that one step and removes it from the list; every other step stays applied. This cannot be redone. |
| Revert to Here | Undoes every step after that row and keeps the row itself. The undone steps stay in the list, so Redo brings them back until you make a new edit. |
The same steps are published as they happen on the engine's in-process stream, one topic per kind, so tools and agents can follow the edit history without reading the panel:
{"seq":42,"kind":"move","topic":"history.move","description":"Move Part","label":null}Timeline
The Timeline shares the bottom region with Output: click Timeline in the Output toolbar to switch to it, and Output to switch back. It lays events out along time, in rows by tag. Today it records one kind of event: each time a Smart Build or array tool commits, a yellow diamond keyframe labeled with the tool's name. The session's last 2,048 events are kept in memory.
06Shortcuts and Saving
Keyboard Shortcuts
Every shortcut can be rebound. Open File > Keyboard Shortcuts... or the Keys button in the Home tab's Utils group. The dialog lists the actions in groups (File, Edit, Tools, Smart Build Tools, Solid Modelling, Panels, Camera, Snapping and Placement, Simulation, Network) with the chord each one uses.
- Click a row. Its key cell changes to Press a key….
- Press the new chord, with any of
Ctrl,AltandShift.Esccancels. - If another action already owns that chord, the dialog refuses and names the owner, so two actions never share one key.
The Preset row replaces the whole map in one click. Eustress is the default map and the way back to it after hand
edits. Roblox Studio keeps it but moves the chords that differ:
the tools go to Shift+1 through Shift+4, F8 runs, Shift+F5 stops, and Ctrl+Shift+P filters Properties while Publish Space moves to Ctrl+Alt+Shift+P. Once
you rebind a key by hand, the dialog shows custom (edited by hand).
A few actions also answer to a second chord that the dialog does not show: Redo to Ctrl+Shift+Z and Select Descendants to Ctrl+Shift+D.
Your map is saved to ~/.eustress_engine/keybindings.ron; actions added
in later versions get their default keys without touching your changes.
Default Keys
The Eustress keymap. Shortcuts never fire while you type in a text field.
| Keys | Action |
|---|---|
Alt+Z, Alt+X, Alt+C, Alt+V | Select, Move, Scale, Rotate tool |
Ctrl+L | Switch the tools between world and local axes |
Ctrl+Z, Ctrl+Y or Ctrl+Shift+Z | Undo, redo |
Ctrl+C, Ctrl+X, Ctrl+V | Copy, cut, paste |
Ctrl+Shift+V | Paste into the selected object |
Ctrl+D, Delete | Duplicate, delete |
Ctrl+I | Insert Object |
Ctrl+G, Ctrl+U | Group into a Model, ungroup |
Ctrl+A, Ctrl+Shift+I | Select all, invert the selection |
Ctrl+Alt+V, Ctrl+Alt+D | Select children, select descendants |
Ctrl+Shift+U, Ctrl+Shift+A | Select parent, select siblings |
Alt+A, Alt+L, Alt+Shift+L | Anchor, lock, unlock the selection |
1, 2, 3 | Snap 1 m, snap 0.2 m, snap off |
-, = | Lift one grid step, settle onto the surface below |
Ctrl+R, Ctrl+T | Rotate 90 degrees about Y, tilt 90 degrees about Z |
F | Frame the selection |
Ctrl+1, Ctrl+2, Ctrl+3 | Show or hide Explorer, Properties, Output |
Ctrl+Shift+X, Ctrl+Shift+E | Search the Explorer, filter Properties |
Ctrl+N, Ctrl+O | New Space, open a Space |
Ctrl+S, Ctrl+Shift+S | Save, Save As |
F7, F5, F6, F8 | Run, Play, Pause, Stop (Esc also stops) |
The Smart Build keys are in the next section's table, and the view keys are on the Perspective page.
Saving
Studio records edits as you make them in the Space's database, world.fjalldb: a simple part (a built-in shape with no children) keeps
its edits there, and a part with children or a custom mesh also has its _instance.toml rewritten. Saving means taking a snapshot. Ctrl+S saves the scene the same database-first way, writes any terrain
to disk, and commits the Space folder's files to git as manual save plus
the time. An autosave commits every 5 minutes on its own. The database stays out of
git, so edits that live only there are not in that history; the Universes page has the full table.
- Unsaved: the badge in the menu bar appears once a step has been recorded since the last snapshot, manual or automatic. Undoing that step does not clear it; the next snapshot does.
- File menu: shows No snapshot yet, Snapshot 14:32 or Autosaved 14:37.
- Exit: closing the window or pressing
Alt+F4with unsaved edits opens Edits since the last snapshot. Snapshot & Exit saves before closing, and Skip closes without a snapshot. Your edits are kept in the Space either way; the snapshot only adds a git restore point.
07Modes
What a Mode Is
A Mode sets Studio up for a kind of work. It chooses which of the nine ribbon tabs show, the default layout preset, and optionally an accent color, and it can add tabs of its own and a menu of submodes. Pick one from the dropdown at the very left of the menu bar, before File. A mode with submodes, such as Engineering with its Mechanical, Electrical and other disciplines, expands into its submenu when you click it.
| Ribbon tab | What is on it |
|---|---|
| Home | File, History, Clipboard, the four transform tools, Snap, World or Local space, Group, Lock and Anchor, Keys |
| Model | Parts, structure, constraints, effects and lights to insert; see Building |
| Drafting | Smart Build Tools, Align, Pattern and Boolean |
| Data | Data Platform tools, starting with importing a CSV, JSON or Parquet file as a Dataset and charting it |
| UI | GUI containers, labels, buttons and layouts; see UI Systems |
| Terrain | Generate, sculpt and paint terrain |
| Test | Play and Pause |
| MindSpace | Labels on parts; see below |
| Plugins | Buttons added by Studio plugins; see Scripting |
Twelve modes are built in: Gaming, Student, Business, Legal, AI, Civil, Engineering, Justice, Health, Military, Government and Public Sector. Engineering is the default and shows all nine tabs. The tabs a mode adds for its own discipline are a map of where Studio is going: the twelve manifests name 2,401 distinct tools, and about thirty of them (the insert, CAD, CSG, Data and procurement actions) run code today. The rest are labeled buttons that do nothing yet.
Your Own Mode
A mode is a TOML file and nothing else. Studio reads the built-in ones plus every .toml file in the Eustress/Modes folder of your local
app data (%LOCALAPPDATA%\Eustress\Modes on Windows), creating the
folder if it is missing. A file that does not parse is skipped with a warning; an
unknown tab id is dropped.
[mode]
id = "survey"
name = "Survey"
icon = "bridge" # a named icon from the built-in list
[ribbon]
# Any of: home, model, cad, data, ui, terrain, test, mindspace, plugins
tabs = ["home", "model", "terrain", "data"]
[layout]
preset = "Building" # Default | Scripting | Building | Minimal | Wide PanelsA mode can also add [[tabs]] with sections of tool buttons and [[submodes]], as the built-in manifests do. A tool button's id is sent
through the same dispatch as the ribbon's own buttons, so an id Studio does not know
makes a button that does nothing. A required-role hides a mode from
anyone who does not hold that role.
MindSpace
MindSpace uses parts as the nodes of a spatial mind map: each node carries a text label, and a Beam can join two nodes. The MindSpace ribbon tab works on the selected part:
- Add attaches a BillboardGui with a TextLabel to the first selected part, sized to the part, and writes it into the part's folder.
- Remove deletes every label on the selected part. The label folders are deleted outright, not moved to the trash.
F2with the cursor over the viewport opens the Edit Text dialog for the selected part's first label.
Dragging a labeled part behaves differently from dragging a plain part. Instead of
sliding across surfaces, the node stays at a fixed distance from the camera and
follows it, so you can fly with W A S D while carrying it; the mouse
wheel changes that distance while you drag. Nodes joined to it by a Beam drift along
to keep their distance, like a force-directed graph.
08What's Next
Panels and Tabs
- Floating panels: the small button at the right of each side panel's tab bar will move that panel into a window of its own. Today it opens an empty placeholder window.
- Timeline: markers will become clickable, and the watchpoint (orange dot) and breakpoint (red asterisk) markers the panel already draws will fill in as the simulation reports them.
- Multi-selection: Properties will show how many objects are selected and mark values that differ between them.
- MindSpace: Connect, Larger and Smaller, Import and Export, and the AI Tools group on the MindSpace tab will get working actions.
Tools
Several tools are written and waiting for a button or a key. The Measure tool will report distance, angle, area, volume and mass. Selection sets will save and restore named selections per Space. Lasso and paint selection, pivot modes for rotating a group, and smart alignment guides during a Move drag will follow, along with the discipline tools on each mode's own tabs.
A history you can rewind, a Space you can read, and keys you choose.