API Reference
This reference documents the public APIs for integrating Azure Logic Apps UX components into your applications.
Designer Package
Installation
npm install @microsoft/logic-apps-designer
Basic Usage
import { DesignerProvider, Designer } from '@microsoft/logic-apps-designer';
function App() {
return (
<DesignerProvider options={designerOptions}>
<Designer />
</DesignerProvider>
);
}
Core Components
<DesignerProvider>
The main provider component that supplies context and services to the designer.
interface DesignerProviderProps {
options: {
services: ServiceOptions;
workflowSpec?: WorkflowSpec;
initialState?: InitialState;
isDarkMode?: boolean;
language?: string;
features?: FeatureOptions;
};
children: React.ReactNode;
}
<Designer>
The workflow designer canvas component.
interface DesignerProps {
backgroundProps?: BackgroundProps;
panelLocation?: PanelLocation;
customPanelLocations?: CustomPanelLocations;
displayRuntimeInfo?: boolean;
}
Runtime Connection Selection (Designer V2, Standard)
Designer V2 supports expressions in a Standard ServiceProvider action's
inputs.serviceProviderConfiguration.connectionName. The
Change connection > Use expression editor is enabled by default for supported
actions; no host option is required. Managed API connections, Consumption
workflows, and triggers do not expose expression authoring. Imported expressions
are preserved when their context does not support authoring. Designer V1 is
unchanged and does not offer this editor.
Expression editing is per action, not bulk connection reassignment. The token
picker does not insert implicit loops. For per-item selection within an existing
loop, enter an explicit expression such as @items('For_each')?['connectionName'].
An expression such as @parameters('connectionName') must resolve at runtime to
an existing, case-sensitive key in connections.json, for the action's service
provider. Display names are not connection keys. The Designer does not create
connections at runtime or change their credentials.
The optional Design-time connection supplies resource browsing and schema discovery while editing. This selection is session-only and is not serialized as a runtime fallback. Without a design-time connection, enter parameter values manually; connection-dependent browsing is unavailable. Existing values are preserved. A schema discovered using one connection does not guarantee the same schema for every runtime target.
Hosts must keep connection keys stable and preserve connections that may be selected dynamically, even if no action references them statically. For multi-tenant workflows, map authorized tenant context to permitted connection keys rather than accepting an arbitrary caller-supplied key as authorization.
Service Configuration
The designer requires several services to be configured:
interface ServiceOptions {
// Required Services
connectionService: IConnectionService;
operationManifestService: IOperationManifestService;
searchService: ISearchService;
oAuthService: IOAuthService;
workflowService: IWorkflowService;
// Optional Services
connectorService?: IConnectorService;
gatewayService?: IGatewayService;
loggerService?: ILoggerService;
runService?: IRunService;
apimService?: IApimService;
functionService?: IFunctionService;
appService?: IAppService;
tenantService?: ITenantService;
customCodeService?: ICustomCodeService;
hostService?: IHostService;
workspaceService?: IWorkspaceService;
userService?: IUserService;
templateService?: ITemplateService;
}
Hooks
Workflow State Hooks
// Check if workflow has unsaved changes
const isDirty = useIsWorkflowDirty();
// Get node display name
const displayName = useNodeDisplayName(nodeId);
// Get node metadata
const metadata = useNodeMetadata(nodeId);
// Check initialization status
const nodesInitialized = useNodesInitialized();
Connection Hooks
// Get connection mapping
const connectionMapping = useConnectionMapping();
// Get connection references
const connectionRefs = useConnectionRefs();
// Check if operation is missing connection
const isMissingConnection = useIsOperationMissingConnection(nodeId);
Validation Hooks
// Get all settings validation errors
const settingsErrors = useAllSettingsValidationErrors();
// Get all connection errors
const connectionErrors = useAllConnectionErrors();
History Hooks
// Check undo/redo availability
const canUndo = useCanUndo();
const canRedo = useCanRedo();
Actions
Workflow Actions
// Serialize current workflow
const serializedWorkflow = await serializeWorkflow(store.getState());
// Discard all changes
dispatch(discardAllChanges());
// Set workflow dirty state
dispatch(setIsWorkflowDirty(true));
// Focus on a node
dispatch(setFocusNode(nodeId));
Panel Actions
// Open a panel for a node
dispatch(openPanel(nodeId, panelType));
// Clear panel
dispatch(clearPanel());
// Collapse panel
dispatch(collapsePanel());
// Change panel node
dispatch(changePanelNode(nodeId));
State Management
// Reset workflow state
dispatch(resetWorkflowState());
// Reset nodes load status
dispatch(resetNodesLoadStatus());
// Reset designer dirty state
dispatch(resetDesignerDirtyState());
Utility Functions
Parameter Utilities
// Validate parameter
const validation = validateParameter(parameter, value);
// Convert parameter value to string
const stringValue = parameterValueToString(parameter, value);
// Load parameter value from string
const value = loadParameterValueFromString(parameter, stringValue);
Token Utilities
// Get output token sections
const sections = getOutputTokenSections(operation);
// Get expression token sections
const expressions = getExpressionTokenSections();
Segment Utilities
// Create literal value segment
const literal = createLiteralValueSegment(value);
// Create token value segment
const token = createTokenValueSegment(tokenData);
// Convert value segments
const converted = ValueSegmentConvertor(segments);
Types
Workflow Types
interface Workflow {
definition: LogicAppsV2.WorkflowDefinition;
connectionReferences?: ConnectionReferences;
parameters?: Record<string, WorkflowParameter>;
}
interface ConnectionReference {
connection: {
id: string;
};
api: {
id: string;
};
connectionName?: string;
authentication?: Authentication;
}
interface WorkflowParameter {
name: string;
type: string;
value?: any;
defaultValue?: any;
metadata?: ParameterMetadata;
}
Custom Code Types
interface CustomCode {
id: string;
name: string;
type: 'javascript' | 'csharp' | 'typescript';
content?: string;
}
interface CustomCodeWithData extends CustomCode {
fileData?: string;
fileExtension: string;
fileName: string;
isModified: boolean;
isDeleted: boolean;
}
Data Mapper Package
Installation
npm install @microsoft/logic-apps-data-mapper-v2
Basic Usage
import { DataMapperDesigner } from '@microsoft/logic-apps-data-mapper-v2';
function DataMapper() {
return (
<DataMapperDesigner
mapDefinition={mapDefinition}
sourceSchema={sourceSchema}
targetSchema={targetSchema}
dataMapperApiService={apiService}
options={options}
/>
);
}
Data Mapper Components
<DataMapperDesigner>
The main data mapper designer component.
interface DataMapperDesignerProps {
mapDefinition?: MapDefinitionEntry;
sourceSchema: SchemaExtended;
targetSchema: SchemaExtended;
dataMapperApiService: IDataMapperApiService;
options?: DataMapperDesignerOptions;
}
Data Mapper Services
interface IDataMapperApiService {
compile(mapDefinition: string, targetSchemaId: string): Promise<string>;
getAvailableCustomFunctions(): Promise<FunctionData[]>;
getSchemaTree(schemaId: string): Promise<SchemaExtended>;
saveDraftStateCall?(mapDefinition: string): Promise<void>;
saveXsltCall?(xslt: string): Promise<void>;
testMap?(mapDefinition: string, context: TestMapContext): Promise<TestMapResponse>;
}
Designer UI Package
Installation
npm install @microsoft/designer-ui
Common Components
This package provides stateless UI components used across the designer:
- Form controls
- Icons and assets
- Theme definitions
- Accessibility utilities
Note: This package must remain stateless - no Redux, no hooks with state.
Shared Package
Installation
npm install @microsoft/logic-apps-shared
Utilities
API Clients
import { ArmParser } from '@microsoft/logic-apps-shared';
const parser = new ArmParser(armUrl);
const resourceId = parser.getResourceId();
Data Parsers
import { parseWorkflowDefinition } from '@microsoft/logic-apps-shared';
const parsed = parseWorkflowDefinition(definition);
Localization
import { getIntl } from '@microsoft/logic-apps-shared';
const intl = getIntl();
const message = intl.formatMessage({ defaultMessage: 'Hello' });
VS Code Extension
Installation
The VS Code extension is available in the VS Code Marketplace as "Azure Logic Apps (Standard)".
Extension API
For extension development:
import { ExtensionApi } from '@microsoft/vscode-extension-logic-apps';
// Activate extension
export async function activate(context: vscode.ExtensionContext): Promise<ExtensionApi> {
// Extension activation logic
return api;
}
Migration Guide
From v1 to v2
Designer Changes
// v1
import { Designer } from '@microsoft/designer';
// v2
import { DesignerProvider, Designer } from '@microsoft/logic-apps-designer';
// v2 requires DesignerProvider wrapper
Service Configuration
// v1
const designer = new Designer({
services: { /* ... */ }
});
// v2
<DesignerProvider options={{ services: { /* ... */ } }}>
<Designer />
</DesignerProvider>
Troubleshooting
Common Issues
Service Not Configured
Error: Required service 'connectionService' not provided
Solution: Ensure all required services are configured in ServiceOptions.
State Not Initialized
Error: Cannot read workflow state before initialization
Solution: Wait for useNodesInitialized() to return true before accessing state.
Token Picker Not Working
Error: Expression builder context not found
Solution: Ensure component is wrapped in DesignerProvider.
Support
- GitHub Issues: Report bugs
- Documentation: Full documentation
- Examples: Standalone designer