Explicit DI, no decorators
Every module receives `dependencies` in its constructor. Mock it in tests, trace it in production, read it in code review.
The runtime is open source and the quickstart is honest: install one package, write one file, run it. Everything else — workers, vault, apps — composes on top when you need it.
const { Loom } = require('@link-loom/sdk');
const loom = new Loom({ root: __dirname, name: 'my-service' });
const main = async () => {
const dependencies = await loom.ignite();
dependencies.console.success('Service is running!');
};
main(); Every module receives `dependencies` in its constructor. Mock it in tests, trace it in production, read it in code review.
ignite() runs the same sequence every boot: core modules, infrastructure, adapters, then traffic. SIGTERM tears down in reverse.
Extend BaseWorker, spawn it from the runtime, get isolation and total memory reclaim for free.
HTTP, events, functions, streams — your service logic stays transport-agnostic and every transport is a config away.
Local .env for your laptop, Cloud Vault runtime fetch for everything else. Same code both ways.
link-loom create --name my-service bootstraps the canonical project layout so every repo looks familiar.
The SDK lives in the open on GitHub. The runtime your platform depends on should be something you can audit, fork and contribute to — so it is.