π¦ Nika 0.62.0 β Workflow API
π¦ Nika 0.62.0 β Workflow API
Inference as Code Β· April 2, 2026 Β· 3 commits
| π§ͺ Tests | π§ Builtins | π¦ Transforms | π Providers |
|---|---|---|---|
| 9,410+ | 38 | 39 | 9 |
β§ infer Β· β exec Β· β fetch Β· β invoke Β· β agent
π Discovery: Workflows as an API
Until now, you had to know which workflows existed on a Nika server. You'd deploy 40 .nika.yaml files, and your frontend had to hardcode every name. If someone added a new workflow, the client had no way to discover it.
GET /v1/workflows changes that. One HTTP call returns every available workflow β name, description, input schema β so your application can dynamically build UIs, autocomplete fields, and validate inputs before submitting a job.
curl http://localhost:3000/v1/workflows \
-H "Authorization: Bearer $TOKEN"[
{
"name": "translate-article",
"description": "Translate an article to multiple languages",
"inputs": {
"url": { "type": "string", "description": "Source article URL" },
"locales": { "type": "array", "description": "Target BCP-47 locales" }
}
},
{
"name": "research-topic",
"description": "Multi-provider research synthesis",
"inputs": {
"topic": { "type": "string" }
}
}
]This is the foundation for IDE integrations, admin dashboards, and self-documenting API gateways.
π¦ TypeScript SDK β Zero Dependencies
Alongside the discovery endpoint, we shipped @supernovae-st/nika-client β a pure TypeScript HTTP client for nika serve. No axios, no node-fetch, no bundler plugins. Just the Fetch API and 56 tests.
import { NikaClient } from '@supernovae-st/nika-client';
const nika = new NikaClient({
baseUrl: 'http://localhost:3000',
token: process.env.NIKA_TOKEN,
});
// Discover available workflows
const workflows = await nika.listWorkflows();
// Submit a job with SSE streaming
const stream = nika.stream('translate-article', {
inputs: { url: 'https://blog.com/post', locales: ['fr', 'de', 'ja'] },
});
for await (const event of stream) {
switch (event.type) {
case 'TaskStarted':
console.log(`β³ ${event.taskId}`);
break;
case 'InferChunk':
process.stdout.write(event.text);
break;
case 'TaskCompleted':
console.log(`β
${event.taskId}`);
break;
case 'JobCompleted':
console.log('π Done:', event.output);
break;
}
}What you get:
| Feature | Details |
|---|---|
| π― Full lifecycle | run(), stream(), status(), cancel(), listWorkflows() |
| β‘ SSE streaming | Real-time task events via Server-Sent Events |
| π Automatic retry | Exponential backoff on transient failures |
| π¦ Typed events | Discriminated TypeScript unions β event.type narrows the type |
| π§ͺ 56 tests | Comprehensive test suite, no mocks needed |
| πͺΆ Zero deps | Pure Fetch API β works in Node, Deno, Bun, and browsers |
Published as a separate repo: supernovae-studio/nika-client
π¦ Install
| Method | Command | |
|---|---|---|
| π | Quick | curl -fsSL https://raw.githubusercontent.com/supernovae-st/nika/main/install.sh | sh |
| πΊ | Homebrew | brew install supernovae-st/tap/nika |
| π¦ | npm | npx @supernovae-st/nika |
| π¦ | Cargo | cargo install nika |
| π³ | Docker | docker run --rm ghcr.io/supernovae-st/nika:0.62.0 |
| π» | VS Code | Search "Nika" or ext install supernovae.nika-lang |
| πͺ | Scoop | scoop bucket add nika https://github.com/supernovae-st/scoop-nika && scoop install nika |
| π§ | AUR | yay -S nika-bin |
π¦ Nika Evolution
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
v0.42 ββββββββββββββββββββββ 8,188 tests
v0.48 ββββββββββββββββββββββ 8,200 tests
v0.52 ββββββββββββββββββββββ 8,938 tests
v0.56 ββββββββββββββββββββββ 9,093 tests
v0.58 ββββββββββββββββββββββ 9,109 tests
v0.61 ββββββββββββββββββββββ 9,407 tests
v0.62 ββββββββββββββββββββββ 9,410 tests β you are here
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π§ 38 builtins Β· π¦ 39 transforms Β· π 7+1+1 providers Β· π¦ 16 crates
Made with π by SuperNovae Studio β Open Source, AGPL-3.0
Full Changelog: v0.61.0...v0.62.0