For integrators
Embed the kernel. Keep your runtime.
The TypeScript kernel is framework-neutral. Integrators supply storage, workspace, identity and an explicit Clock, then own the surrounding execution and policy.
Required composition inputs
Core reads no global CLI config, provider credential or ambient device clock. The host supplies every authority dependency at composition time.
embedded core
import { createLocalTasq, systemClock } from "@tasq-run/core";
const url = process.env.TASQ_DB_URL;
if (!url) throw new Error("Set TASQ_DB_URL=file:/absolute/path/to/db.sqlite");
const tasq = await createLocalTasq({
url,
workspaceId: "example/team",
actor: "app:example",
clock: systemClock,
});
try {
let [commitment] = await tasq.commitments.list({ limit: 1 });
if (!commitment) {
commitment = await tasq.commitments.create(
{ title: "Ship the embedded Tasq loop" },
{ idempotencyKey: "example:create" },
);
commitment = await tasq.commitments.start(commitment.id, {
expectedRevision: commitment.revision,
idempotencyKey: "example:start",
});
commitment = await tasq.commitments.complete(commitment.id, {
expectedRevision: commitment.revision,
idempotencyKey: "example:complete",
});
}
console.log(JSON.stringify({ id: commitment.id, status: commitment.status }));
} finally {
await tasq.close();
}Install @tasq-run/core@0.6.2 for the protected public alpha. Pre-1.0 compatibility follows the published SemVer and migration policy; deep imports remain unsupported.
Extensions and connectors stay outside Core
Extensions contribute immutable schemas and pure deterministic evaluators. Connectors resolve credentials late, perform provider I/O and return authentic receipts. Neither may smuggle provider policy into the kernel.