ObjectStack microkernel — dependency injection, plugin lifecycle, event bus, and service registry for metadata-driven runtimes.
@objectstack/core is the foundation every ObjectStack runtime is built on. It hosts two kernels, a plugin lifecycle, a typed service registry, a structured logger, and a plugin-to-plugin event bus:
ObjectKernel— full-featured production kernel with hot reload, health monitoring, dependency resolution, and namespace isolation.LiteKernel— minimal kernel for serverless, edge, and test environments.
All other ObjectStack runtime packages (runtime, rest, plugin-*, driver-*, service-*) plug into a kernel instance.
pnpm add @objectstack/coreimport { ObjectKernel } from '@objectstack/core';
const kernel = new ObjectKernel();
kernel.use({
name: 'my-plugin',
version: '1.0.0',
async init(ctx) {
ctx.logger.info('plugin initializing…');
ctx.registerService('greeter', { hello: (n: string) => `hi ${n}` });
},
async start(ctx) {
const svc = ctx.getService<{ hello: (s: string) => string }>('greeter')!;
ctx.logger.info(svc.hello('world'));
},
});
await kernel.bootstrap();
// …
await kernel.shutdown();import { LiteKernel } from '@objectstack/core';
const kernel = new LiteKernel();
await kernel.bootstrap();| Export | Kind | Description |
|---|---|---|
ObjectKernel |
class | Production kernel with DI, lifecycle, event bus, hot reload, health monitor. |
LiteKernel |
class | Minimal kernel for constrained runtimes. |
Plugin |
interface | Plugin contract (init, start, stop, lifecycle hooks). |
PluginContext |
interface | { logger, registerService, getService, eventBus, kernel }. |
ObjectLogger |
class | Structured logger over pino; swappable backends. |
ApiRegistry |
class | Runtime route registry (consumed by @objectstack/rest). |
QA |
namespace | Built-in kernel self-tests. |
PackageManager |
class | Per-package DI namespace resolver. |
use() → init() → start() → [running] → stop() → unload()
init(ctx)— register services, wire dependencies. Do not make network calls.start(ctx)— resolve other services, begin work. Called after every plugin'sinit().stop(ctx)— graceful shutdown, flush, close connections.kernel.unload(name)— runtime removal; pairs withAppPlugin.onDisable().
| Kernel | Use when |
|---|---|
ObjectKernel |
Default. Production servers, Studio, tests that need plugin composition. |
LiteKernel |
Cloudflare Workers, Vercel Edge, Vitest unit tests, footprint-sensitive sandboxes. |
EnhancedObjectKernel has been removed. Migrate to ObjectKernel.
ObjectLoggeris backed by pino; control verbosity withLOG_LEVEL=info|debug|trace.kernel.getHealth()returns per-plugin health snapshots.- EventBus:
ctx.eventBus.on('plugin.started', …),.emit(…).
- ✅ Building an ObjectStack application (always).
- ✅ Authoring a plugin, driver, or service.
- ❌ You only need the schemas — import
@objectstack/specalone. - ❌ You only need a REST client — import
@objectstack/client.
@objectstack/spec— protocol definitions.@objectstack/runtime—DriverPlugin/AppPluginscaffolds.@objectstack/rest— auto-generated REST layer.
- 📖 Docs: https://objectstack.ai/docs
- 📚 API Reference: https://objectstack.ai/docs/references/kernel
- 🤖 Skill:
skills/objectstack-plugin/SKILL.md
Apache-2.0 © ObjectStack