Skip to content

speckle-impl-connectors-overview

Understanding Speckle connector architecture, planning cross-tool data exchange, or debugging conversion pipelines. Prevents misunderstanding of the ToSpeckle/ToHost conversion flow, incorrect applicationId assumptions, and missing proxy architecture patterns. Covers DUI3 shared UI, conversion pipeline (ToSpeckle/ToHost), supported connectors matrix, connector SDK, proxy architecture, data schema for connectors, applicationId, and units handling. Keywords: speckle connector, conversion, ToSpeckle, ToHost, DUI3, applicationId, proxy, data schema, connector matrix, Archicad, Navisworks, Dynamo, which connector, supported software.

speckleconnectors
Compatible agents:
  • Claude Code

View on GitHubmaster @ 2b2e72f14 GitHub stars1 forksupdated Mar 31, 2026

Original description (for the agent)

Use when understanding Speckle connector architecture, planning cross-tool data exchange, or debugging conversion pipelines. Prevents misunderstanding of the ToSpeckle/ToHost conversion flow, incorrect applicationId assumptions, and missing proxy architecture patterns. Covers DUI3 shared UI, conversion pipeline (ToSpeckle/ToHost), supported connectors matrix, connector SDK, proxy architecture, data schema for connectors, applicationId, and units handling. Keywords: speckle connector, conversion, ToSpeckle, ToHost, DUI3, applicationId, proxy, data schema, connector matrix, Archicad, Navisworks, Dynamo, which connector, supported software.

speckle-impl-connectors-overview

Quick Reference

Connector Architecture

ComponentRoleLocation
DUI3 (Desktop UI 3)Shared UI across all connectorsEmbedded in host application
Conversion PipelineToSpeckle / ToHost object transformationConnector SDK
Transport LayerSerialization and server communicationSpeckle SDK
Proxy SystemShared resource references (materials, levels, groups)Root Collection
Speckle Desktop ServiceAuthentication token managementSystem service

Supported Connectors Matrix

ConnectorVersionsOSPublishLoadNative on LoadSchema Type
Revit2022-2026WinYesYesDirect ShapesRevitObject
Rhino7, 8WinYesYesGeometryGeometry/Instance
Grasshopper(bundled with Rhino)WinYesYesGeometryGeometry/Block/Data
Blender4.2-5.0Win/MacYesYesMesh/CurvesGeometry
AutoCAD2022-2026WinYesYesGeometryGeometry/Instance
Civil 3D2022-2026WinYesYesGeometryCivil3dObject
Tekla2023-2025WinPublish onlyNoN/ATeklaObject
Archicad27-29WinYesYesGDL ObjectsArchicadObject
SketchUp2021-2026Win/MacYesYesComponentsGeometry
Power BIN/AWinNoRead onlyTabular + 3DN/A

Critical Warnings

NEVER assume native element recreation on load -- Revit ALWAYS creates Direct Shapes, Archicad ALWAYS creates GDL Objects. There is NO native wall/door/floor reconstruction from Speckle data.

NEVER assume all connectors support bidirectional data flow -- Tekla is publish-only and Power BI is read-only. ALWAYS verify publish/load capability before designing a workflow.

NEVER reference objects by id in proxy relationships -- id is a content-based hash that changes when data updates. ALWAYS use applicationId for cross-version tracking and proxy references.

NEVER expect custom properties to round-trip through all connectors -- Revit, Blender, and Archicad do NOT load custom properties back onto received objects. ALWAYS verify property behavior for your specific connector pair.

NEVER expect texture support -- Speckle does NOT transfer textures across any connector. Only material properties (color, opacity, metallic, roughness) survive the pipeline.

NEVER publish solids from AutoCAD/Civil 3D expecting solid geometry downstream -- solids are ALWAYS converted to Mesh geometry irreversibly.


Conversion Pipeline

ToSpeckle Flow (Publish)

code
Host Application Object
        |
        v
[1. Selection] --> Manual / View-based / Category-based / All Visible
        |
        v
[2. Conversion] --> Native Object --> Speckle Base Object
        |               |
        |               +--> displayValue: [Mesh, Line, Point]  (interoperable geometry)
        |               +--> properties: { key: value }          (semantic metadata)
        |               +--> applicationId: "native-id"          (stable identifier)
        |               +--> units: "mm" | "m" | "ft" | "in"    (measurement system)
        |
        v
[3. Proxy Extraction] --> Materials, Levels, Groups, Definitions, Colors
        |                   (stored at Root Collection, reference by applicationId)
        |
        v
[4. Transport] --> Serialize + Send to Speckle Server

ToHost Flow (Load/Receive)

code
Speckle Server
        |
        v
[1. Fetch] --> Download objects from server
        |
        v
[2. Conversion] --> Speckle Object --> Host Application Object
        |               |
        |               +--> Attempt native reconstruction (connector-specific)
        |               +--> Fall back to generic representation if native fails
        |
        v
[3. Proxy Resolution] --> Apply materials, assign levels, restore groups
        |
        v
[4. Placement] --> Insert into host application scene/document

Asymmetric Fidelity Rule

Publishing ALWAYS preserves MORE information than loading. A Revit wall published to Speckle retains all parameters, material quantities, and type information. When loaded into Rhino, it becomes geometry with properties as user strings. When loaded back into Revit, it becomes a Direct Shape, NOT a native wall. This asymmetry is fundamental and by design.


Object Types

Three Object Categories

CategoryDescriptionPrimary Use
Geometry ObjectsPure primitives (Point, Line, Mesh, Brep, Arc, Polyline)CAD workflows (Rhino, AutoCAD)
DataObjectSemantic elements with properties + displayValueBIM workflows (Revit, Archicad, Tekla, Civil 3D)
Instance ObjectsReferences to Definition proxies via definitionId + 4x4 transformBlocks, components, repeated geometry

DataObject Extensions by Connector

ConnectorTypeExtra Fields
RevitRevitObjecttype, family, category, level, location, referencePointTransform, views
ArchicadArchicadObjecttype, level, location
Civil 3DCivil3dObjecttype, baseCurves
TeklaTeklaObjecttype, properties.Report

displayValue Convention

EVERY connector places interoperable geometry in the displayValue array using minimum viable primitives: Mesh, Line, Point. This ensures ANY receiver can render the geometry even without native reconstruction. Brep data MAY be preserved for connectors that support it (Rhino), but Mesh is the universal fallback.


Proxy Architecture

Five Proxy Types

ProxyPurposeUsed By
RenderMaterialColor (RGB), opacity, metallic, roughnessAll connectors
LevelElevation data and level nameBIM connectors (Revit, Archicad)
GroupFunctional grouping (objects can belong to multiple groups)Revit, Rhino, AutoCAD, Civil 3D
DefinitionBlock/component geometry stored once, reused by InstancesRhino, AutoCAD, Civil 3D
ColorSimple hex color (#RRGGBB)CAD connectors (AutoCAD, Civil 3D)

Proxy Structure

Every proxy follows this structure:

json
{
  "speckle_type": "Objects.Data.RenderMaterialProxy",
  "applicationId": "mat-001",
  "name": "Concrete Gray",
  "value": { "diffuse": 12632256, "opacity": 1.0, "metalness": 0.0, "roughness": 0.8 },
  "objects": ["elem-101", "elem-102", "elem-205"]
}

Proxy Invariants

  • Proxies ALWAYS reference objects by applicationId, NEVER by id
  • Proxies NEVER reference other proxies -- no circular references permitted
  • Proxies are ALWAYS stored at the Root Collection level
  • A single proxy can reference hundreds of objects

Identity System

FieldPurposeStability
idContent-based hash (SHA256 of object data)Changes when ANY data changes
applicationIdSource application identifier (Revit ElementId, Rhino GUID, AutoCAD Handle)Stable across publish/load cycles
speckle_typeType discriminator (e.g., "Objects.Data.DataObject:Objects.Data.RevitObject")Fixed per object type

applicationId Stability Across Cycles

When a Revit wall is modified and republished:

  • applicationId remains the same (Revit ElementId persists)
  • id changes (content hash reflects updated data)
  • Proxies continue referencing via the stable applicationId

This enables change tracking, version comparison, and proxy resolution across multiple publish cycles.


Units Handling

Every object carries a units field. Supported values: "m", "mm", "cm", "ft", "in", "yd".

Unit conversion happens automatically during the conversion pipeline. The connector reads the host application's document units and writes them into each object. On the receiving side, the connector converts incoming units to match the target document.


Collection Hierarchies by Connector

Each connector preserves its native organizational structure:

ConnectorHierarchy
RevitFile > Level > Category > Type > RevitObject
RhinoFile > Layer > Sublayer > Objects
AutoCADFile > Layer > Objects
Civil 3DFile > Layer > Objects
ArchicadFile > Floor > Type > ArchicadObject
TeklaFile > Type > TeklaObject
BlenderFile > Collection > Objects
SketchUpFile > Layer > Components

Connector-Specific Load Behavior

ConnectorWhat Objects Become on Load
RevitDirect Shapes (generic models). NEVER native elements.
RhinoGeometry, text, or blocks. Materials and user strings preserved.
GrasshopperGeometry Objects, Block Objects, or Data Objects. NEVER native BIM elements.
BlenderMesh/Curves. Block loading: collection instances (default) or linked duplicates.
AutoCADGeometry, text, or blocks. Flattened layer structure. Selection Sets created.
Civil 3DSame as AutoCAD (inherits AutoCAD behavior).
ArchicadGDL Objects (generic models). Organized in embedded library folders.
SketchUpComponents with matching layer structure. Properties as user attributes.
TeklaN/A -- publish-only, no load capability.
Power BITabular data + 3D visualization. Read-only.

Data Federation

Federated Views

Multiple models from different tools assemble into a single federated view. An architect's Revit model, a structural engineer's Tekla model, and a landscape designer's Rhino model can all coexist in one Speckle project.

Geometry Baking for Interoperability

All connectors bake geometry into minimum viable interoperable primitives in displayValue. This guarantees that ANY receiver can display ANY source geometry regardless of native format support.

Common Cross-Tool Workflows

  1. Revit to Grasshopper to Revit: Publish from Revit, load in Grasshopper for parametric analysis, publish back. On return to Revit, objects become Direct Shapes.
  2. Multi-discipline coordination: Multiple teams publish to the same project. Federated view shows all models together.
  3. Design option comparison: Publish versions from different tools, compare in viewer.

DUI3 Shared UI

DUI3 (Desktop User Interface 3) provides a consistent interface across all connectors:

  • Project and model selection
  • Publish and load controls
  • Version history navigation
  • Account management
  • Communicates with Speckle Desktop Service for authentication

EVERY connector uses DUI3. The UI behavior is identical regardless of host application.


Official Sources