ObjectStackObjectStack

Plugin Loading

Plugin Loading protocol schemas

Plugin Loading Protocol

Defines the enhanced plugin loading mechanism for the microkernel architecture.

Inspired by industry best practices from:

  • Kubernetes CRDs and Operators

  • OSGi Dynamic Module System

  • Eclipse Plugin Framework

  • Webpack Module Federation

This protocol enables:

  • Lazy loading and code splitting

  • Dynamic imports and parallel initialization

  • Capability-based discovery

  • Hot reload in development

  • Advanced caching strategies

Source: packages/spec/src/kernel/plugin-loading.zod.ts

TypeScript Usage

import { PluginCaching, PluginCodeSplitting, PluginDependencyResolution, PluginDynamicImport, PluginHotReload, PluginInitialization, PluginLoadingConfig, PluginLoadingEvent, PluginLoadingState, PluginLoadingStrategy, PluginPerformanceMonitoring, PluginPreloadConfig, PluginSandboxing } from '@objectstack/spec/kernel';
import type { PluginCaching, PluginCodeSplitting, PluginDependencyResolution, PluginDynamicImport, PluginHotReload, PluginInitialization, PluginLoadingConfig, PluginLoadingEvent, PluginLoadingState, PluginLoadingStrategy, PluginPerformanceMonitoring, PluginPreloadConfig, PluginSandboxing } from '@objectstack/spec/kernel';

// Validate data
const result = PluginCaching.parse(data);

PluginCaching

Plugin caching configuration

Properties

PropertyTypeRequiredDescription
enabledboolean
storageEnum<'memory' | 'disk' | 'indexeddb' | 'hybrid'>
keyStrategyEnum<'version' | 'hash' | 'timestamp'>
ttlintegeroptionalTime to live in seconds (0 = infinite)
maxSizeintegeroptionalMax cache size in MB
invalidateOnEnum<'version-change' | 'dependency-change' | 'manual' | 'error'>[]optional
compressionObjectoptional

PluginCodeSplitting

Plugin code splitting configuration

Properties

PropertyTypeRequiredDescription
enabledboolean
strategyEnum<'route' | 'feature' | 'size' | 'custom'>
chunkNamingEnum<'hashed' | 'named' | 'sequential'>
maxChunkSizeintegeroptionalMax chunk size in KB
sharedDependenciesObjectoptional

PluginDependencyResolution

Plugin dependency resolution configuration

Properties

PropertyTypeRequiredDescription
strategyEnum<'strict' | 'compatible' | 'latest' | 'pinned'>
peerDependenciesObjectoptional
optionalDependenciesObjectoptional
conflictResolutionEnum<'fail' | 'latest' | 'oldest' | 'manual'>
circularDependenciesEnum<'error' | 'warn' | 'allow'>

PluginDynamicImport

Plugin dynamic import configuration

Properties

PropertyTypeRequiredDescription
enabledboolean
modeEnum<'async' | 'sync' | 'eager' | 'lazy'>
prefetchbooleanPrefetch module in idle time
preloadbooleanPreload module in parallel with parent
webpackChunkNamestringoptionalCustom chunk name for webpack
timeoutintegerDynamic import timeout (ms)
retryObjectoptional

PluginHotReload

Plugin hot reload configuration

Properties

PropertyTypeRequiredDescription
enabledboolean
environmentEnum<'development' | 'staging' | 'production'>Target environment controlling safety level
strategyEnum<'full' | 'partial' | 'state-preserve'>
watchPatternsstring[]optionalGlob patterns for files to watch
ignorePatternsstring[]optionalGlob patterns for files to ignore
debounceMsinteger
preserveStateboolean
stateSerializationObjectoptional
hooksObjectoptional
productionSafetyObjectoptional

PluginInitialization

Plugin initialization configuration

Properties

PropertyTypeRequiredDescription
modeEnum<'sync' | 'async' | 'parallel' | 'sequential'>
timeoutinteger
priorityinteger
criticalbooleanIf true, kernel bootstrap fails if plugin fails
retryObjectoptional
healthCheckIntervalintegeroptionalHealth check interval in ms (0 = disabled)

PluginLoadingConfig

Complete plugin loading configuration

Properties

PropertyTypeRequiredDescription
strategyEnum<'eager' | 'lazy' | 'parallel' | 'deferred' | 'on-demand'>Plugin loading strategy
preloadObjectoptionalPlugin preloading configuration
codeSplittingObjectoptionalPlugin code splitting configuration
dynamicImportObjectoptionalPlugin dynamic import configuration
initializationObjectoptionalPlugin initialization configuration
dependencyResolutionObjectoptionalPlugin dependency resolution configuration
hotReloadObjectoptionalPlugin hot reload configuration
cachingObjectoptionalPlugin caching configuration
sandboxingObjectoptionalPlugin sandboxing configuration
monitoringObjectoptionalPlugin performance monitoring configuration

PluginLoadingEvent

Plugin loading lifecycle event

Properties

PropertyTypeRequiredDescription
typeEnum<'load-started' | 'load-completed' | 'load-failed' | 'init-started' | 'init-completed' | 'init-failed' | 'preload-started' | 'preload-completed' | 'cache-hit' | 'cache-miss' | 'hot-reload' | 'dynamic-load' | 'dynamic-unload' | 'dynamic-discover'>
pluginIdstring
timestampinteger
durationMsintegeroptional
metadataRecord<string, any>optional
errorObjectoptional

PluginLoadingState

Plugin loading state

Properties

PropertyTypeRequiredDescription
pluginIdstring
stateEnum<'pending' | 'loading' | 'loaded' | 'initializing' | 'ready' | 'failed' | 'reloading' | 'unloading' | 'unloaded'>
progressnumber
startedAtintegeroptional
completedAtintegeroptional
lastErrorstringoptional
retryCountinteger

PluginLoadingStrategy

Plugin loading strategy

Allowed Values

  • eager
  • lazy
  • parallel
  • deferred
  • on-demand

PluginPerformanceMonitoring

Plugin performance monitoring configuration

Properties

PropertyTypeRequiredDescription
enabledboolean
metricsEnum<'load-time' | 'init-time' | 'memory-usage' | 'cpu-usage' | 'api-calls' | 'error-rate' | 'cache-hit-rate'>[]optional
samplingRatenumber
reportingIntervalinteger
budgetsObjectoptional
onBudgetViolationEnum<'warn' | 'error' | 'ignore'>

PluginPreloadConfig

Plugin preloading configuration

Properties

PropertyTypeRequiredDescription
enabledboolean
priorityinteger
resourcesEnum<'metadata' | 'dependencies' | 'assets' | 'code' | 'services'>[]optional
conditionsObjectoptional

PluginSandboxing

Plugin sandboxing configuration

Properties

PropertyTypeRequiredDescription
enabledboolean
scopeEnum<'automation-only' | 'untrusted-only' | 'all-plugins'>Which plugins are subject to isolation
isolationLevelEnum<'none' | 'process' | 'vm' | 'iframe' | 'web-worker'>
allowedCapabilitiesstring[]optionalList of allowed capability IDs
resourceQuotasObjectoptional
permissionsObjectoptional
ipcObjectoptional

On this page