Repository navigation
workspace sdk pinnable content builders
Andre Lafleur edited this page Oct 8, 2026
·
9 revisions
Pinnable content builders create visual content for pinnable popups in Security Desk. Pinnable popups are floating panels that appear in monitor windows. Operators can reposition these panels and pin them in place alongside the main monitoring view.
Use pinnable content builders when you need to display persistent, supplementary information that operators can keep visible while working. Examples include:
- A live status dashboard showing device health across the system
- A notification tray that displays recent events or alerts from a third-party integration
- A quick-access control panel for custom hardware such as lighting or HVAC systems
- The module registers a
PinnableContentBuilderwith the workspace duringLoad. - When Security Desk restores a saved workspace layout that includes the builder's
UniqueIdas pinned content, it callsCreateContent()and places the returnedFrameworkElementin a floating popup in the monitor window. - The operator can pin the popup to dock it as a side panel in the monitor window.
- Unpinning or closing the popup removes it from the display.
- When the operator logs off, the popup hides automatically.
Inherit from PinnableContentBuilder and implement the abstract members:
public class MyPinnableContentBuilder : PinnableContentBuilder
{
public override string Name => "My Pinnable Content";
public override Guid UniqueId => new Guid("A1B2C3D4-E5F6-7890-ABCD-EF1234567890");
public override FrameworkElement CreateContent()
{
return new MyPinnableControl();
}
}| Member | Type | Description |
|---|---|---|
Name |
Property (abstract) | Display name shown for the builder. |
UniqueId |
Property (abstract) | Unique identifier for this builder component. |
CreateContent() |
Method (abstract) | Create and return the visual content for the pinnable popup. |
Important
This component requires a valid SDK certificate.
Register the builder in your module's Load method. Pinnable content builders are only available in Security Desk.
public class SampleModule : Module
{
private MyPinnableContentBuilder m_pinnableBuilder;
public override void Load()
{
if (Workspace.ApplicationType == ApplicationType.SecurityDesk)
{
m_pinnableBuilder = new MyPinnableContentBuilder();
m_pinnableBuilder.Initialize(Workspace);
Workspace.Components.Register(m_pinnableBuilder);
}
}
public override void Unload()
{
if (m_pinnableBuilder != null)
{
Workspace.Components.Unregister(m_pinnableBuilder);
}
}
}- About the Workspace SDK: Workspace SDK architecture and module lifecycle.
- About content builders: Content class hierarchy and properties for Security Desk tile content.
- About components: The component registry and registration lifecycle.
- About Workspace SDK certificates: Certificate requirements for workspace components.
- Overview
- Connecting to Security Center
- SDK certificates
- Referencing SDK assemblies
- ASP.NET hosting
- SDK compatibility
- Migrating to modern .NET
- Entities
- Entity cache
- Entity loading, cache, and query options
- Detecting entity changes
- Entity change event reference
- Transactions
- Security Center events
- Actions
- Security Desk
- Custom events
- Event-to-actions
- Managing macros
- ReportManager
- ReportManager query reference
- Access control raw events
- DownloadAllRelatedData and StrictResults
- Privileges
- Partitions
- Entity write restrictions
- About custom fields
- About video
- About cameras
- Enrolling a video unit
- Ingesting third-party video
- Archiver and auxiliary archiver roles
- Archive transfer
- About access control
- About cardholders and credentials
- About doors, areas, elevators, and access points
- About access rules and schedules
- About access control units and interface modules
- Enrolling an access control unit
- Door templates
- Visitors
- Mobile credentials
- About threat levels
- About alarms
- About incidents
- Maps
- Logging
- Overview
- Localization
- Certificates
- Lifecycle
- Threading
- State management
- Configuration
- Restricted configuration
- Events
- Queries
- Request manager
- Database
- Entity ownership
- Engine extensions
- Entity mappings
- Server management
- Custom privileges
- Custom entity types
- Resolving non-SDK assemblies
- Deploying plugins
- Modern .NET support
- Overview
- Localization
- Certificates
- Creating modules
- Tasks
- Pages
- Components
- Tile extensions
- Services
- Contextual actions
- Custom actions
- Options extensions
- Configuration pages
- Monitors
- Shared components
- Commands
- Extending events
- Map extensions
- Timeline providers
- Image extractors
- Credential encoders
- Credential readers
- Cardholder fields extractors
- Badge printers
- Content builders
- Dashboard widgets
- Incidents
- Logon providers
- Pinnable content builders
- Custom report pages
- Overview
- Getting started
- Media file formats
- MediaPlayer
- VideoSourceFilter
- MediaExporter
- MediaFile
- G64 converters
- FileCryptingManager
- PlaybackSequenceQuerier
- PlaybackStreamReader
- OverlayFactory
- PtzCoordinatesManager
- AudioTransmitter
- AudioRecorder
- AnalogMonitorController
- Camera blocking
- Overview
- Getting started
- Referencing entities
- Entity operations
- About access control in the Web SDK
- About video in the Web SDK
- Users and user groups
- Partitions
- Custom fields
- Custom card formats
- Actions
- Events and alarms
- Incidents
- Reports
- Tasks
- Macros
- Custom entity types
- System endpoints
- Performance guide
- Reference
- Endpoints
- Constants
- Enumerations
- Under the hood
- Troubleshooting