JavaScript / TypeScript SDK

The Cells JavaScript SDK ships with full TypeScript types and works in Node.js 18 and later.

Install

npm
npm install mudbase-cells-sdk
# or: pnpm add mudbase-cells-sdk
npm install mudbase-cells-sdk
# or: pnpm add mudbase-cells-sdk

Initialize

TypeScript
import { Configuration, SessionsApi, ExecutionApi, FilesApi, ServicesApi } from "mudbase-cells-sdk";

const config = new Configuration({
  apiKey: process.env.CELLS_API_KEY!,
});

const sessions = new SessionsApi(config);
const exec    = new ExecutionApi(config);
const files   = new FilesApi(config);
const services = new ServicesApi(config);
import { Configuration, SessionsApi, ExecutionApi, FilesApi, ServicesApi } from "mudbase-cells-sdk";

const config = new Configuration({
  apiKey: process.env.CELLS_API_KEY!,
});

const sessions = new SessionsApi(config);
const exec    = new ExecutionApi(config);
const files   = new FilesApi(config);
const services = new ServicesApi(config);

Create a session

TypeScript
const session = await sessions.createSession({
  projectId: process.env.CELLS_PROJECT_ID!,
  createSessionRequest: {
    language: "node",
    languageVersion: "22",
    timeoutSeconds: 300,
  },
});

console.log(session.sessionId);
const session = await sessions.createSession({
  projectId: process.env.CELLS_PROJECT_ID!,
  createSessionRequest: {
    language: "node",
    languageVersion: "22",
    timeoutSeconds: 300,
  },
});

console.log(session.sessionId);

Run a command

TypeScript
const result = await exec.execSession({
  projectId: process.env.CELLS_PROJECT_ID!,
  sessionId: session.sessionId,
  execRequest: {
    cmd: ["node", "-e", "console.log(42)"],
    timeoutMs: 30000,
  },
});
// streams SSE; exit code in the final event
const result = await exec.execSession({
  projectId: process.env.CELLS_PROJECT_ID!,
  sessionId: session.sessionId,
  execRequest: {
    cmd: ["node", "-e", "console.log(42)"],
    timeoutMs: 30000,
  },
});
// streams SSE; exit code in the final event

Files

TypeScript
// Write files into the session
await files.writeFiles({
  projectId: process.env.CELLS_PROJECT_ID!,
  sessionId: session.sessionId,
  writeFilesRequest: {
    files: [{ path: "index.js", content: "console.log('hello')" }],
  },
});

// Read a file back
const file = await files.readFile({
  projectId: process.env.CELLS_PROJECT_ID!,
  sessionId: session.sessionId,
  path: "index.js",
});
console.log(file.content);
// Write files into the session
await files.writeFiles({
  projectId: process.env.CELLS_PROJECT_ID!,
  sessionId: session.sessionId,
  writeFilesRequest: {
    files: [{ path: "index.js", content: "console.log('hello')" }],
  },
});

// Read a file back
const file = await files.readFile({
  projectId: process.env.CELLS_PROJECT_ID!,
  sessionId: session.sessionId,
  path: "index.js",
});
console.log(file.content);

Services

TypeScript
// Start a named service on port 3000
await services.startService({
  projectId: process.env.CELLS_PROJECT_ID!,
  sessionId: session.sessionId,
  startServiceRequest: {
    name: "web",
    cmd: "node",
    args: ["server.js"],
    port: 3000,
  },
});
// Start a named service on port 3000
await services.startService({
  projectId: process.env.CELLS_PROJECT_ID!,
  sessionId: session.sessionId,
  startServiceRequest: {
    name: "web",
    cmd: "node",
    args: ["server.js"],
    port: 3000,
  },
});

Close a session

TypeScript
await sessions.closeSession({
  projectId: process.env.CELLS_PROJECT_ID!,
  sessionId: session.sessionId,
});
await sessions.closeSession({
  projectId: process.env.CELLS_PROJECT_ID!,
  sessionId: session.sessionId,
});