What Are Proxies?
Proxies are relationship containers stored at the Root Collection level. They encode connections between:- Objects and shared resources (materials, levels, groups)
- Objects and other objects (group memberships, instance definitions)
- On “Level 1” (spatial organization)
- In “Exterior Walls” group (functional grouping)
- Using “Concrete” material (visual property)
- Part of “Block A” definition (instance relationship)
Proxy Structure
All proxies follow this pattern:Key Fields
speckle_type- Identifies the proxy typeapplicationId- Unique identifier for this proxyname- Human-readable namevalue- The actual resource data (material, level, etc.)referencedIds- Array ofapplicationIds of objects that use this resource
Common Proxy Types
RenderMaterial
Encodes material assignments:Level
Encodes level/floor associations:Group
Encodes group memberships:Definition
Stores geometry for instances (blocks, components):Color
Encodes color assignments (CAD workflows):How Proxies Reference Objects
Proxies reference objects byapplicationId, not id:
- Get the RenderMaterial proxy
- Read its
referencedIdsarray - Find objects with matching
applicationId
- Get the object’s
applicationId - Search all RenderMaterial proxies for one containing that
applicationIdinreferencedIds
Why use applicationId instead of id for references?
Why use applicationId instead of id for references?
applicationId is stable within a model version and represents the source application’s identifier. id is content-based and changes if the object’s data changes. For relationships that should persist even when object data changes, applicationId is the right choice.Also, applicationId is what the source application uses, making it easier to map back to the original data.Proxy Location
All proxies are stored at the Root Collection level:- Find all proxies of a type
- Resolve references efficiently
- Avoid duplication
Multiple Relationships
A single object can be referenced by multiple proxies:Proxy Resolution Patterns
Pattern 1: Find objects using a resource
Pattern 2: Find resources used by an object
Pattern 3: Resolve instance definitions
Connector-Specific Proxies
Different connectors use different proxy types:- Revit: RenderMaterial, Level, Group
- Rhino: RenderMaterial, Color, Group, Definition
- AutoCAD: RenderMaterial, Color, Group, Definition
- Civil3D: RenderMaterial, Color, Group, Definition, PropertySetDefinition
- Etabs: Section, Material (specialized)
Proxy Invariants
- Proxies are at root level - Always stored in Root Collection, never nested
- References use applicationId - Always
applicationId, neverid - No circular references - Proxies don’t reference other proxies
- Value is the resource - The
valuefield contains the actual resource data - referencedIds is a list - Can reference zero or more objects
Can an object be in multiple groups?
Can an object be in multiple groups?
Yes! An object’s
applicationId can appear in multiple Group proxy referencedIds arrays. This allows objects to belong to multiple functional groups simultaneously. The same applies to materials, levels, and other proxy types.Next Steps
- Traversal Recipes - How to navigate proxies and resolve references
- Connector Index - Connector-specific proxy usage
- Object Model - Review object structure