speckle-impl-connectors-overview
Quick Reference
Connector Architecture
| Component |
Role |
Location |
| DUI3 (Desktop UI 3) |
Shared UI across all connectors |
Embedded in host application |
| Conversion Pipeline |
ToSpeckle / ToHost object transformation |
Connector SDK |
| Transport Layer |
Serialization and server communication |
Speckle SDK |
| Proxy System |
Shared resource references (materials, levels, groups) |
Root Collection |
| Speckle Desktop Service |
Authentication token management |
System service |
Supported Connectors Matrix
| Connector |
Versions |
OS |
Publish |
Load |
Native on Load |
Schema Type |
| Revit |
2022-2026 |
Win |
Yes |
Yes |
Direct Shapes |
RevitObject |
| Rhino |
7, 8 |
Win |
Yes |
Yes |
Geometry |
Geometry/Instance |
| Grasshopper |
(bundled with Rhino) |
Win |
Yes |
Yes |
Geometry |
Geometry/Block/Data |
| Blender |
4.2-5.0 |
Win/Mac |
Yes |
Yes |
Mesh/Curves |
Geometry |
| AutoCAD |
2022-2026 |
Win |
Yes |
Yes |
Geometry |
Geometry/Instance |
| Civil 3D |
2022-2026 |
Win |
Yes |
Yes |
Geometry |
Civil3dObject |
| Tekla |
2023-2025 |
Win |
Publish only |
No |
N/A |
TeklaObject |
| Archicad |
27-29 |
Win |
Yes |
Yes |
GDL Objects |
ArchicadObject |
| SketchUp |
2021-2026 |
Win/Mac |
Yes |
Yes |
Components |
Geometry |
| Power BI |
N/A |
Win |
No |
Read only |
Tabular + 3D |
N/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)
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)
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
| Category |
Description |
Primary Use |
| Geometry Objects |
Pure primitives (Point, Line, Mesh, Brep, Arc, Polyline) |
CAD workflows (Rhino, AutoCAD) |
| DataObject |
Semantic elements with properties + displayValue |
BIM workflows (Revit, Archicad, Tekla, Civil 3D) |
| Instance Objects |
References to Definition proxies via definitionId + 4x4 transform |
Blocks, components, repeated geometry |
DataObject Extensions by Connector
| Connector |
Type |
Extra Fields |
| Revit |
RevitObject |
type, family, category, level, location, referencePointTransform, views |
| Archicad |
ArchicadObject |
type, level, location |
| Civil 3D |
Civil3dObject |
type, baseCurves |
| Tekla |
TeklaObject |
type, 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
| Proxy |
Purpose |
Used By |
| RenderMaterial |
Color (RGB), opacity, metallic, roughness |
All connectors |
| Level |
Elevation data and level name |
BIM connectors (Revit, Archicad) |
| Group |
Functional grouping (objects can belong to multiple groups) |
Revit, Rhino, AutoCAD, Civil 3D |
| Definition |
Block/component geometry stored once, reused by Instances |
Rhino, AutoCAD, Civil 3D |
| Color |
Simple hex color (#RRGGBB) |
CAD connectors (AutoCAD, Civil 3D) |
Proxy Structure
Every proxy follows this structure:
{
"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
| Field |
Purpose |
Stability |
id |
Content-based hash (SHA256 of object data) |
Changes when ANY data changes |
applicationId |
Source application identifier (Revit ElementId, Rhino GUID, AutoCAD Handle) |
Stable across publish/load cycles |
speckle_type |
Type 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:
| Connector |
Hierarchy |
| Revit |
File > Level > Category > Type > RevitObject |
| Rhino |
File > Layer > Sublayer > Objects |
| AutoCAD |
File > Layer > Objects |
| Civil 3D |
File > Layer > Objects |
| Archicad |
File > Floor > Type > ArchicadObject |
| Tekla |
File > Type > TeklaObject |
| Blender |
File > Collection > Objects |
| SketchUp |
File > Layer > Components |
Connector-Specific Load Behavior
| Connector |
What Objects Become on Load |
| Revit |
Direct Shapes (generic models). NEVER native elements. |
| Rhino |
Geometry, text, or blocks. Materials and user strings preserved. |
| Grasshopper |
Geometry Objects, Block Objects, or Data Objects. NEVER native BIM elements. |
| Blender |
Mesh/Curves. Block loading: collection instances (default) or linked duplicates. |
| AutoCAD |
Geometry, text, or blocks. Flattened layer structure. Selection Sets created. |
| Civil 3D |
Same as AutoCAD (inherits AutoCAD behavior). |
| Archicad |
GDL Objects (generic models). Organized in embedded library folders. |
| SketchUp |
Components with matching layer structure. Properties as user attributes. |
| Tekla |
N/A -- publish-only, no load capability. |
| Power BI |
Tabular 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
- Revit to Grasshopper to Revit: Publish from Revit, load in Grasshopper for parametric analysis, publish back. On return to Revit, objects become Direct Shapes.
- Multi-discipline coordination: Multiple teams publish to the same project. Federated view shows all models together.
- 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.
Reference Links
- references/methods.md -- Connector API methods, conversion signatures, proxy structures
- references/examples.md -- Cross-tool workflow examples with data flow diagrams
- references/anti-patterns.md -- Common mistakes with connector workflows
Official Sources
1---2name: speckle-impl-connectors-overview3description: 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.4license: MIT5---67# speckle-impl-connectors-overview89## Quick Reference1011### Connector Architecture1213| Component | Role | Location |14|-----------|------|----------|15| DUI3 (Desktop UI 3) | Shared UI across all connectors | Embedded in host application |16| Conversion Pipeline | ToSpeckle / ToHost object transformation | Connector SDK |17| Transport Layer | Serialization and server communication | Speckle SDK |18| Proxy System | Shared resource references (materials, levels, groups) | Root Collection |19| Speckle Desktop Service | Authentication token management | System service |2021### Supported Connectors Matrix2223| Connector | Versions | OS | Publish | Load | Native on Load | Schema Type |24|-----------|----------|-----|---------|------|-----------------|-------------|25| Revit | 2022-2026 | Win | Yes | Yes | Direct Shapes | RevitObject |26| Rhino | 7, 8 | Win | Yes | Yes | Geometry | Geometry/Instance |27| Grasshopper | (bundled with Rhino) | Win | Yes | Yes | Geometry | Geometry/Block/Data |28| Blender | 4.2-5.0 | Win/Mac | Yes | Yes | Mesh/Curves | Geometry |29| AutoCAD | 2022-2026 | Win | Yes | Yes | Geometry | Geometry/Instance |30| Civil 3D | 2022-2026 | Win | Yes | Yes | Geometry | Civil3dObject |31| Tekla | 2023-2025 | Win | **Publish only** | No | N/A | TeklaObject |32| Archicad | 27-29 | Win | Yes | Yes | GDL Objects | ArchicadObject |33| SketchUp | 2021-2026 | Win/Mac | Yes | Yes | Components | Geometry |34| Power BI | N/A | Win | No | **Read only** | Tabular + 3D | N/A |3536### Critical Warnings3738**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.3940**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.4142**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.4344**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.4546**NEVER** expect texture support -- Speckle does NOT transfer textures across any connector. Only material properties (color, opacity, metallic, roughness) survive the pipeline.4748**NEVER** publish solids from AutoCAD/Civil 3D expecting solid geometry downstream -- solids are ALWAYS converted to Mesh geometry irreversibly.4950---5152## Conversion Pipeline5354### ToSpeckle Flow (Publish)5556```57Host Application Object58 |59 v60[1. Selection] --> Manual / View-based / Category-based / All Visible61 |62 v63[2. Conversion] --> Native Object --> Speckle Base Object64 | |65 | +--> displayValue: [Mesh, Line, Point] (interoperable geometry)66 | +--> properties: { key: value } (semantic metadata)67 | +--> applicationId: "native-id" (stable identifier)68 | +--> units: "mm" | "m" | "ft" | "in" (measurement system)69 |70 v71[3. Proxy Extraction] --> Materials, Levels, Groups, Definitions, Colors72 | (stored at Root Collection, reference by applicationId)73 |74 v75[4. Transport] --> Serialize + Send to Speckle Server76```7778### ToHost Flow (Load/Receive)7980```81Speckle Server82 |83 v84[1. Fetch] --> Download objects from server85 |86 v87[2. Conversion] --> Speckle Object --> Host Application Object88 | |89 | +--> Attempt native reconstruction (connector-specific)90 | +--> Fall back to generic representation if native fails91 |92 v93[3. Proxy Resolution] --> Apply materials, assign levels, restore groups94 |95 v96[4. Placement] --> Insert into host application scene/document97```9899### Asymmetric Fidelity Rule100101Publishing 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.102103---104105## Object Types106107### Three Object Categories108109| Category | Description | Primary Use |110|----------|-------------|-------------|111| Geometry Objects | Pure primitives (Point, Line, Mesh, Brep, Arc, Polyline) | CAD workflows (Rhino, AutoCAD) |112| DataObject | Semantic elements with `properties` + `displayValue` | BIM workflows (Revit, Archicad, Tekla, Civil 3D) |113| Instance Objects | References to Definition proxies via `definitionId` + 4x4 `transform` | Blocks, components, repeated geometry |114115### DataObject Extensions by Connector116117| Connector | Type | Extra Fields |118|-----------|------|-------------|119| Revit | RevitObject | `type`, `family`, `category`, `level`, `location`, `referencePointTransform`, `views` |120| Archicad | ArchicadObject | `type`, `level`, `location` |121| Civil 3D | Civil3dObject | `type`, `baseCurves` |122| Tekla | TeklaObject | `type`, `properties.Report` |123124### displayValue Convention125126EVERY 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.127128---129130## Proxy Architecture131132### Five Proxy Types133134| Proxy | Purpose | Used By |135|-------|---------|---------|136| RenderMaterial | Color (RGB), opacity, metallic, roughness | All connectors |137| Level | Elevation data and level name | BIM connectors (Revit, Archicad) |138| Group | Functional grouping (objects can belong to multiple groups) | Revit, Rhino, AutoCAD, Civil 3D |139| Definition | Block/component geometry stored once, reused by Instances | Rhino, AutoCAD, Civil 3D |140| Color | Simple hex color (#RRGGBB) | CAD connectors (AutoCAD, Civil 3D) |141142### Proxy Structure143144Every proxy follows this structure:145146```json147{148 "speckle_type": "Objects.Data.RenderMaterialProxy",149 "applicationId": "mat-001",150 "name": "Concrete Gray",151 "value": { "diffuse": 12632256, "opacity": 1.0, "metalness": 0.0, "roughness": 0.8 },152 "objects": ["elem-101", "elem-102", "elem-205"]153}154```155156### Proxy Invariants157158- Proxies ALWAYS reference objects by `applicationId`, NEVER by `id`159- Proxies NEVER reference other proxies -- no circular references permitted160- Proxies are ALWAYS stored at the Root Collection level161- A single proxy can reference hundreds of objects162163---164165## Identity System166167| Field | Purpose | Stability |168|-------|---------|-----------|169| `id` | Content-based hash (SHA256 of object data) | Changes when ANY data changes |170| `applicationId` | Source application identifier (Revit ElementId, Rhino GUID, AutoCAD Handle) | Stable across publish/load cycles |171| `speckle_type` | Type discriminator (e.g., `"Objects.Data.DataObject:Objects.Data.RevitObject"`) | Fixed per object type |172173### applicationId Stability Across Cycles174175When a Revit wall is modified and republished:176- `applicationId` remains the same (Revit ElementId persists)177- `id` changes (content hash reflects updated data)178- Proxies continue referencing via the stable `applicationId`179180This enables change tracking, version comparison, and proxy resolution across multiple publish cycles.181182---183184## Units Handling185186Every object carries a `units` field. Supported values: `"m"`, `"mm"`, `"cm"`, `"ft"`, `"in"`, `"yd"`.187188Unit 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.189190---191192## Collection Hierarchies by Connector193194Each connector preserves its native organizational structure:195196| Connector | Hierarchy |197|-----------|-----------|198| Revit | File > Level > Category > Type > RevitObject |199| Rhino | File > Layer > Sublayer > Objects |200| AutoCAD | File > Layer > Objects |201| Civil 3D | File > Layer > Objects |202| Archicad | File > Floor > Type > ArchicadObject |203| Tekla | File > Type > TeklaObject |204| Blender | File > Collection > Objects |205| SketchUp | File > Layer > Components |206207---208209## Connector-Specific Load Behavior210211| Connector | What Objects Become on Load |212|-----------|-----------------------------|213| Revit | Direct Shapes (generic models). NEVER native elements. |214| Rhino | Geometry, text, or blocks. Materials and user strings preserved. |215| Grasshopper | Geometry Objects, Block Objects, or Data Objects. NEVER native BIM elements. |216| Blender | Mesh/Curves. Block loading: collection instances (default) or linked duplicates. |217| AutoCAD | Geometry, text, or blocks. Flattened layer structure. Selection Sets created. |218| Civil 3D | Same as AutoCAD (inherits AutoCAD behavior). |219| Archicad | GDL Objects (generic models). Organized in embedded library folders. |220| SketchUp | Components with matching layer structure. Properties as user attributes. |221| Tekla | N/A -- publish-only, no load capability. |222| Power BI | Tabular data + 3D visualization. Read-only. |223224---225226## Data Federation227228### Federated Views229230Multiple 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.231232### Geometry Baking for Interoperability233234All 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.235236### Common Cross-Tool Workflows2372381. **Revit to Grasshopper to Revit**: Publish from Revit, load in Grasshopper for parametric analysis, publish back. On return to Revit, objects become Direct Shapes.2392. **Multi-discipline coordination**: Multiple teams publish to the same project. Federated view shows all models together.2403. **Design option comparison**: Publish versions from different tools, compare in viewer.241242---243244## DUI3 Shared UI245246DUI3 (Desktop User Interface 3) provides a consistent interface across all connectors:247248- Project and model selection249- Publish and load controls250- Version history navigation251- Account management252- Communicates with Speckle Desktop Service for authentication253254EVERY connector uses DUI3. The UI behavior is identical regardless of host application.255256---257258## Reference Links259260- [references/methods.md](references/methods.md) -- Connector API methods, conversion signatures, proxy structures261- [references/examples.md](references/examples.md) -- Cross-tool workflow examples with data flow diagrams262- [references/anti-patterns.md](references/anti-patterns.md) -- Common mistakes with connector workflows263264### Official Sources265266- https://docs.speckle.systems/developers/data-schema/overview.md267- https://docs.speckle.systems/developers/data-schema/concepts.md268- https://docs.speckle.systems/developers/data-schema/proxy-schema.md269- https://docs.speckle.systems/developers/data-schema/connector-index.md270- https://docs.speckle.systems/connectors/revit/revit.md271- https://docs.speckle.systems/connectors/rhino/rhino.md272- https://docs.speckle.systems/connectors/grasshopper/grasshopper.md273- https://docs.speckle.systems/connectors/blender.md274- https://docs.speckle.systems/connectors/autocad.md275- https://docs.speckle.systems/connectors/civil3d.md276- https://docs.speckle.systems/connectors/tekla.md277- https://docs.speckle.systems/connectors/archicad.md278- https://docs.speckle.systems/connectors/sketchup.md279- https://docs.speckle.systems/connectors/power-bi/power-bi.md