> ## Documentation Index
> Fetch the complete documentation index at: https://docs.speckle.systems/llms.txt
> Use this file to discover all available pages before exploring further.

# 3D viewer in 2026.9

> What changed when you open a model in the 2026.9 web app — Selection, Filters, Views, section planes, and the new panel chrome.

<Note>
  This is 2026.9 preview documentation. Coverage here is incremental: a page exists only where
  2026.9 differs or is newly documented.
</Note>

Opening a model in the 2026.9 web app uses a new 3D viewer. Geometry starts appearing while the
full file is still downloading. **Selection**, **Filters**, and **Views** sit in dockable panels,
and sectioning uses cutting **planes** instead of a box.

This page covers only what changed. For interface basics that still apply — sharing, federation
from the project, and issue fields — see [Interface and navigation](/3d-viewer/interface-nav),
[Exploration](/3d-viewer/exploration), [Saved views](/3d-viewer/saved-views),
[Issues](/3d-viewer/issues), and [Share your models](/3d-viewer/sharing).

To ask questions about the models loaded in this viewer, use the sparkle. That flow is on
[Ask questions about your models with Speckle Intelligence](/next/analytics/intelligence).

## Open a model

Large models use a hybrid load. A first overlay can show **Preparing 3D stream** or
**Downloading model**. Once geometry starts painting, the overlay goes away and a progress stack
in the top-right corner continues in the background. The downloaded copy is stored locally, so
opening the same version again prefers that cache.

You should see objects in the scene before the background download finishes.

## Find your way around

Panels are dockable. Drag a panel icon onto another panel to make a labelled tab group, split it
into the bottom dock, collapse it, or resize it.

On a first visit, **Selection** is open so the canvas is not empty.

* **Models**, **Filters**, **Views**, and **Issues** sit in the left sidebar tab strip.
* **Selection** sits under those tabs by default and shows properties for the current pick.
* **Elements** sits in the bottom dock and lists every object in the loaded models.
* The status bar at the bottom holds panel icons, undo, redo, screenshot, shortcuts, and
  **Settings**.
* The navigation cube sits at the bottom-right of the canvas for canonical camera directions.

The status bar **Settings** menu holds **Orthographic**, **Grid**, and **Reference points**.
**Layout** in that menu lists every panel as a checkbox. **Models** stays on. **Lock layout**
stops accidental drags. **Reset layout** restores the default arrangement after you unlock.

Right-click a panel icon in the tab strip or status bar to move it. The menu lists only slots
that panel can occupy: **Move to sidebar**, **Move to sidebar bottom**, **Move to bottom
panel**, or **Move to bottom right**. **Remove panel** hides it; turn it back on from
**Layout**. **Models** has no **Remove panel**. With **Lock layout** on, the move verbs are
omitted.

These panels start hidden. Turn them on from **Settings** → **Layout**:

* **Materials** lists materials and colours in the loaded models. Select the usage count to pick
  the objects that use that material.
* **Browse** pages through tables in the published data.
* **SQL** runs a query against the attached models. **\$selected** inserts the current pick's
  application IDs.
* **Inspector** shows envelope relations as a diagram or rows, plus a raw property table. When
  nothing is selected it reads **Select an object in the viewer to inspect its rows**.

On narrower widths the left sidebar becomes a slide-over.

Right-click the canvas for **Hide** or **Show**, **Isolate** or **Un-isolate**, **Fit to
view**, **Copy application ID**, **Add to chat**, and **Clear selection**. With more than one
object selected, **Hide** and **Isolate** (and their opposites) become **Hide selection** and
**Isolate selection** (or **Show selection** and **Un-isolate selection**), and the chat verb
reads **Add selection to chat**. Right-click a row in **Models** for the same
verbs except **Copy application ID**. Right-click a scene-tree group to pin that group; the
verb then reads **Add "{label}" to chat**, using the group's name. Right-click a selected
object keeps the whole selection. Right-click an unselected object replaces the selection with
that pick. **Add to chat** pins the pick for Speckle Intelligence. If too many objects are
selected to pin individually, a toast reads **Too many objects selected to add individually**
and tells you to right-click a scene-tree group instead.

### Use the Models card

Right-click the **Models** card header, or use **⋯**, for **Expand one level**, **Collapse one
level**, **Group by…**, **Search this model**, and **Model placement**. When the grouping strip
is already open, **Group by…** becomes **Hide grouping options**. These verbs apply to the
whole card, not to a tree row.

When several models are federated, the same menu also offers **Isolate model** (or **Un-isolate
model**, or **Isolate model (partially isolated)**), **Hide model** or **Show model**, and
**Remove from scene**. Header glyphs show isolate and hide at a glance; they toggle the same
state.

**Search this model** opens a field on the card with the placeholder **Search this model...**.
**Model placement** opens the inspect dialog described in [Inspect model
placement](#inspect-model-placement).

### Group objects in the tree

**Group by…** opens the grouping strip and its editor in one click. A collapsed strip shows
**Grouped by** plus the current levels joined with ›. Select that summary to reopen the
editor.

The editor lists one row per tree level. Helper text reads **Each row is a level of the tree —
drag to renest.** Drag the grip to reorder. Each row is a searchable picker; search with
**Search property or relationship…**. Options show a label, a coverage count, and the full
property path. Relationships such as **Level**, **Collection**, **Model**, and **Network**
appear first when those relations exist. Properties follow; labels come from the path, so
**Family** or **Category** appear when those paths are in the catalog. The default grouping is
a spatial relationship (**Collection** or **Level**) over the highest-coverage property.

**Add grouping** appends a row. **Done** collapses the editor. While the catalog loads, the
strip can show **Loading options…**. If grouping is too fine to precompute, it reads
**Grouping too fine to precompute — the deepest level loads on expand.**

<Tip>
  **Keyboard shortcuts** opens from the status bar, or from `?`. That cheat sheet is the
  authoritative list, including fly keys (W A S D, E and Q) and Alt+1–5 for standard views.
</Tip>

## Select and inspect

Click geometry, or click rows in **Models**. Selection highlights both ways: the 3D pick reveals
the tree row, and the tree row highlights in 3D. Open **Selection** with Shift+O.

**Selection** shows properties for the pick. The title uses the first non-blank of **name**,
**type**, or **category**. Property groups auto-expand. A **Pinned** group stays at the top when
you pin a path. Revit material quantity blocks are condensed into readable rows named like
**{Material} Area** or **{Material} Volume**. A **Relations** group at the bottom lists related
objects by relation kind. Search the list with **Filter properties**.

When nothing is selected, **Selection** shows **No properties**.

From a property you can:

* **Add to filters** — open an empty **Filters** card for that property. The scene does not
  narrow until you set the condition.
* **Filter to this value** — add a card already set to this value. The scene narrows
  immediately. Relation rows skip this action.
* **Add as table column** — add the path to **Elements**. If it is already a column, the menu
  reads **Shown as a table column** and opens **Elements**.
* **Pin property** or **Unpin property**.
* **Copy value** — copies the raw value, not the rounded display string.
* **Copy path**.
* **Copy all properties** — one `path: value` line per row.
* **Copy group path** — from a group header that has a real path. **Pinned** and **Relations**
  have no path to copy.
* **Expand all groups** or **Collapse all groups** — on a single-object list. Multi-select
  cards fold from the toolbar instead.

When you select several objects, **Selection** shows one card per object. Each card can zoom,
isolate, or hide that element. In a wide dock the cards sit in columns. Fold or expand all
cards from the toolbar. The count reads **N selected**. Selections larger than 1,000 objects
start folded; you can still open one card at a time.

Use **Show all** on the toolbar when objects are hidden or isolated.

### Browse objects in Elements

**Elements** is a table of the objects in the loaded models. It follows the active **Filters**
stack. Double-click a row to zoom to that object. When several models are loaded, a scope
control can limit the table to one model or to the current selection.

<Steps>
  <Step title="Open Elements">
    Select **Elements** in the bottom dock, or use Shift+T. You should see a table of objects and a
    count.
  </Step>

  <Step title="Inspect a row">
    Select a row. **Selection** shows that object's properties. Double-click the row to frame it in
    the scene.
  </Step>
</Steps>

**Export view to Excel** downloads the current columns, filter scope, and sort. If grouping or
search is too large, a warning reads **Showing the first … elements — narrow the scope (filters
or selection) for a complete view**.

**Update parameters** turns columns whose path starts with **properties.** into editors. Other
columns stay read-only and show a lock icon in the header. Staged edits do not change the
published version. **Submit change requests** creates an issue that carries those deltas, so
teammates can review the proposed values. Creating that issue needs permission to create issues
on the project.

When **Update parameters** is on and the table has 15 or more elements, **Search rows…** appears
and narrows the table. It is not on the browse toolbar.

<Note>
  Only **properties.** columns become editors. Name, category, and similar columns stay read-only.
</Note>

## Filter and color

**Filters** is a stack of property cards, not a single search box. Each card has operators that
match the property type. Applied filters stay in place when you change selection or close and
reopen panels. Open **Filters** with Shift+F.

When the stack is empty, **Filters** shows **No filters yet** and an **Add filter** control. If
the catalog fails, it shows **Failed to load properties**. If a resolve fails, it shows
**Failed to resolve filter matches**. While a model is still attaching, it shows **Attaching
model…**.

Operators by property type:

* String: **is one of**, **is not one of**, **contains**, **does not contain**, **has value**,
  **is set**, **is not set**.
* Number: **equals**, **is not equal**, **in range**, **has value**, **is set**, **is not set**.
  Numeric **equals** and **is not equal** accept more than one value. Equals tolerates small
  floating-point differences.
* Boolean: **is** (**True** / **False**), **has value**, **is set**, **is not set**.
* Relation (for example a level or network hop): **is one of**, **is set**, **is not set**.

**Has value** matches objects where the property has a non-empty value. **Is set** matches
objects where the property exists. **Is not set** matches objects where it is missing.

<Steps>
  <Step title="Add a filter">
    Open **Filters** and select **Add filter**. Choose a property. An empty card appears in the
    stack. The scene does not change yet.
  </Step>

  <Step title="Set the condition">
    Choose an operator and the values to include or exclude. The scene then narrows to matches. If
    nothing matches, **Filters** shows **No objects match — everything is hidden**.
  </Step>

  <Step title="Color by values">
    On a string or relation card, select **Color by values**. Matching objects take colors for those
    values. Only one card colors the scene at a time. Numeric and boolean cards do not color the
    scene.
  </Step>
</Steps>

With two or more cards, **All** keeps objects that match every card. **Any** keeps objects that
match at least one. With **All**, each card's value list is scoped to the enabled cards above it.
With **Any**, the cards are independent. Drag the grip, or use Alt+↑ / Alt+↓, to reorder.

Right-click a card for **Change property…**, **Collapse** or **Expand**, **Color by values** or
**Stop coloring**, **Disable filter** or **Enable filter**, **Move up**, **Move down**,
**Duplicate**, and **Remove filter**. A disabled card stays in the stack but does not hide
objects.

**Clear all filters** is in the panel header. **Reset filters** on the toolbar clears the same
stack without undoing hide and isolate.

<Note>
  Intelligence in this viewer can also color and isolate from Chat. That is documented on [Ask
  questions about your models with Speckle Intelligence](/next/analytics/intelligence), not here.
</Note>

## Save and apply views

**Views** lists two kinds of viewpoint in one panel. Open it with Shift+V.

* **Model views** come from the source application when the connector published them. Select a
  row to fly the camera. These rows stay in **Model views**; converting one does not remove it.
  An orthographic published view can show a **Parallel / orthographic (isometric)** cue.
* Saved views are viewpoints you (or a teammate) stored in Speckle. The panel only lists views
  whose models are currently loaded. A view saved on an older version of a loaded model still
  applies.

When nothing is saved and there are no groups, **Views** shows **No views yet**. A search with no
hits shows **No matching views**. An empty named group reads **Drop views here**.

Saving a view needs permission to create saved views on the project. Creating saved views needs
the Contributor project role or higher. Without that permission, **Save view** and **New group**
are disabled. **Sketch** is also disabled; its tooltip reads **You don't have write access**. See
[Saved views](/3d-viewer/saved-views) for grouping and sharing rules that have not changed.

<Note>
  On a self-hosted server, saved views are available only on Speckle Enterprise Server. For
  deployment setup, see [Enterprise license — Saved
  Views](/developers/server/deployment/enterprise-license#optional-saved-views).
</Note>

<Steps>
  <Step title="Set the look">
    Frame the camera, set filters and visibility, and add section planes or sketches you want
    stored.
  </Step>

  <Step title="Save the view">
    In **Views**, select **Save view**, or use the bookmark control on the toolbar. Name it. The new
    view appears in the panel.
  </Step>
</Steps>

To keep a connector-published viewpoint as a saved view, select **Save as view** on that **Model
views** row, or drag the row into a saved-view group. Dragging into a group needs at least one
named group and permission to create views. You cannot drop a model view into **Ungrouped**.

**New group** creates an empty group as a drop target. Search with **Search views**. Cards show
the author and a relative date. Private views show a lock with the tooltip **Only visible to
you**.

On a saved view the ⋯ menu is **Rename**, **Make private** or **Make public**, and **Delete…**.
There is no **Set as home view**, **Replace view**, or **Copy link** on this menu. Use the eye
control to show or hide that view's sketches and measurements.

On a group the ⋯ menu is **Rename**, **Make all private** or **Make all public**, and **Delete
group…**. **Ungrouped** is a tail for views that were saved before grouping. You can drag views
out of it. You cannot drop views into it. Its menu is **Delete all views…**.

Deleting a view also deletes its sketches and measurements. The confirm dialog says so.

A view created in the previous viewer can show **Legacy view — not openable here yet**. Re-save
the look in this viewer if you need a viewpoint you can apply.

## Cut, measure, and sketch

The bottom toolbar holds **Section**, **Sketch**, and **Measure**. Shortcuts: Shift+B, Shift+K,
and Shift+R. Press Esc to leave a tool. Cmd/Ctrl+Z undoes while sketching or measuring.

### Section planes

Sectioning is no longer a six-sided box around the model. You add individual **section planes**
and move each one.

<Steps>
  <Step title="Turn Section on">
    Select **Section** on the toolbar. The tool options appear above the toolbar.
  </Step>

  <Step title="Add a plane">
    Select **Plane**, then click a surface, or select **XY**, **XZ**, or **YZ** to cut at the scene
    centre. The model is clipped on one side of the plane.
  </Step>

  <Step title="Adjust the cut">
    Select a plane in the list to show its handle. Drag the handle, **Flip which side is cut away**,
    or **Stop cutting** without removing the plane. **Resume cutting** turns that plane back on.
  </Step>
</Steps>

**Hide plane handles** keeps the cut for a cleaner screenshot. **Remove all planes** clears the
list. If **Plane** is disabled, the tooltip reads that all plane slots are in use.

### Measure

Types: **Point to point**, **Perpendicular**, **Angle**, and **Area**.

Measurements stay on the canvas for the session. If you can save views, they are stored on the
saved view with sketches. Without that permission they disappear when you leave the model.

### Sketch in 3D

**Sketch** draws on the model in 3D. Ink stays with the geometry as you orbit, pan, and zoom. It
is stored on a saved view: saving the view keeps the markup, and opening that view restores it
in place.

Tools: **Pen**, **Arrow**, **Revision cloud**, **Text**, and **Eraser**. Preset ink colours are
**Red**, **Amber**, **Blue**, **Green**, and **White**. **Custom color** adds any colour and
opacity. Brush sizes sit next to the colours. Sketch is disabled without permission to save
views.

### Navigation cube

The cube in the bottom-right of the canvas sets canonical directions. Alt+1–5 also move the
camera to Top, Front, Left, Back, and Right. Fit and zoom still sit on the toolbar: **Fit view
to everything**, or **Zoom to selection** when something is selected. Shift+Space does the same
fit. Shift+P toggles orthographic projection.

Explode, the older view-mode styles (Pen, Arctic, Shaded), and lighting controls are not on this
toolbar. Projection and the grid are in **Settings**.

## Restore an issue's view

**Issues** lists issues for the models in the scene. Open it with Shift+I. Opening an issue that
was created in this viewer restores the camera, filters, and visibility stored with it. Select
a card to apply that stored look. Right-click the card, or use **⋯**, for **Open issue page**
and **Delete…** when you can delete. **Open issue page** opens the full issue in a new tab.
Create, assign, and field editing stay on [Issues](/3d-viewer/issues).

The **Issues** tab is always in the strip. If the feature is not available on the project, the
panel body shows that denial instead of a list. Empty states: **No issues for this scene** with
**New issue**, **No matching issues** after search or chip filters, and **Select an issue** in
the wide-dock detail pane.

<Note>
  Issues are available when your workspace plan includes them. On a self-hosted server, they are
  available only on Speckle Enterprise Server. For deployment setup, see [Enterprise license —
  Issues](/developers/server/deployment/enterprise-license#optional-issues). Issue fields,
  assignment, and permissions stay on [Issues](/3d-viewer/issues).
</Note>

<Note>
  An issue created in the previous viewer may show **Legacy issue — its view can't be applied here
  yet**. If the issue points at models that are not loaded, the tooltip reads **References models
  not loaded in this scene — opens details only**.
</Note>

## Inspect model placement

When several models are federated, **Models** can open **Model placement** for a model. That
dialog shows the published placement, geometry storage, Project True North, and translation.
**Inspect placement option** previews Internal Origin, Project Base Point, Survey Point origin,
or Shared Coordinates.

<Note>
  **Model placement** in this viewer is inspect-only. Switching placement is not enabled yet.
</Note>

How Revit stores placement on publish is on [Revit in 2026.9](/next/connectors/revit/introduction).
Adding models to a scene from the project still follows [Model federation](/3d-viewer/federation).

## Keyboard shortcuts

Open the cheat sheet from the status bar or `?`. Bindings use Cmd on macOS and Ctrl elsewhere.

* Panels: Shift+M **Models**, Shift+F **Filters**, Shift+V **Views**, Shift+I **Issues**,
  Shift+T **Elements**, Shift+O **Selection**.
* Tools: Shift+R **Measure**, Shift+B **Section**, Shift+K **Sketch**.
* Camera: Shift+Space **Fit view / zoom to selection**, Shift+P **Orthographic projection**,
  Alt+1–5 standard views.
* Display: Shift+G **Grid**, Shift+X **Reference points**.
* History: Cmd/Ctrl+Z **Undo**, Cmd/Ctrl+Shift+Z **Redo**.
* Fly around: W A S D or arrow keys to move. E or Page Up moves up. Q or Page Down moves down.
  Hold Shift for faster, Alt for slower.

## FAQ

<AccordionGroup>
  <Accordion title="Where did the section box go?">
    The 2026.9 viewer cuts with section planes, not a box. Add **XY**, **XZ**, or **YZ**, or place a
    plane on a surface, then flip or hide individual planes. Explode and the older view mode styles
    are not on this toolbar. Projection and the grid are in **Settings**.
  </Accordion>

  <Accordion title="Why is Sketch disabled?">
    Sketch is stored on saved views, so it uses the same permission as **Save view**. Reviewers
    without that permission cannot sketch. Save a view after you draw if you need the ink later.
  </Accordion>

  <Accordion title="Do measurements come back when I open a saved view?">
    Yes, if they were stored on that view. Sketches and measurements share the view's ink. Use the
    eye control on the view card to hide or show them. Without permission to save views,
    measurements last only for the session.
  </Accordion>

  <Accordion title="What happens if I open a saved view from the previous viewer?">
    Some older views show **Legacy view — not openable here yet**. Re-save the look in this viewer
    if you need a viewpoint you can apply.
  </Accordion>

  <Accordion title="Why does a filter hide the whole model?">
    When no objects match, **Filters** shows **No objects match — everything is hidden**. Change the
    values, switch **All** to **Any**, enable a disabled card, or use **Reset filters**.
  </Accordion>

  <Accordion title="Can I color the model from a numeric filter?">
    No. **Color by values** is on string and relation cards only. Use Chat if you want Intelligence
    to color by a property; that flow is on [Ask questions about your models with Speckle
    Intelligence](/next/analytics/intelligence).
  </Accordion>

  <Accordion title="Where did Set as home view and Replace view go?">
    They are not on the 2026.9 view-card menu. You can **Rename**, change public or private, show or
    hide ink, and **Delete**. Grouping and dragging still work. Home view and replace remain
    documented for the Current viewer on [Saved views](/3d-viewer/saved-views).
  </Accordion>

  <Accordion title="Can I reposition federated models in the viewer?">
    Not yet. **Model placement** lets you inspect the published datum. Changing placement on publish
    is documented for Revit on [Revit in 2026.9](/next/connectors/revit/introduction).
  </Accordion>

  <Accordion title="Do Update parameters change the published model?">
    No. Edits stay staged in **Elements** until you **Submit change requests**. That creates an
    issue with the proposed values. The published version is unchanged.
  </Accordion>
</AccordionGroup>
