Skip to content

Quick Start

A minimal end-to-end example: spawn a local PTY, wire it into the session manager, render it with the React component.

Server / Electron main

ts
import {
  createPTYSessionManager,
  createTerminalService,
} from '@vibecook/avocado-sdk';
import { LocalPTYSession } from '@vibecook/avocado-sdk/node-pty';
import { spawn as ptySpawn } from 'node-pty';

const sessionManager = createPTYSessionManager();
const terminalService = createTerminalService(sessionManager);

// Spawn a local PTY and register it as a session.
const session = LocalPTYSession.spawn(
  (opts) => ptySpawn(opts.command, opts.args, opts),
  { command: process.env.SHELL ?? '/bin/bash', args: [], cwd: process.cwd(), cols: 120, rows: 32 },
  { command: 'bash', cwd: process.cwd() }
);
sessionManager.registerSession(session);

Renderer (React)

tsx
import { AvocadoProvider, TerminalGrid } from '@vibecook/avocado-sdk/react';

export function App() {
  return (
    <AvocadoProvider backend={electronBackend}>
      <TerminalGrid />
    </AvocadoProvider>
  );
}

Cross-device sync via the mesh

Add the truffle transport and the session appears on every peer device:

ts
import { createMeshNode } from '@vibecook/truffle';
import {
  PTYMeshBridge,
  PTYSyncStore,
  RemoteSessionService,
} from '@vibecook/avocado-sdk/transport-truffle';

const node = await createMeshNode({ appId: 'my-app', deviceName: 'laptop' });
const bridge = new PTYMeshBridge({ node, sessionManager });
const syncStore = new PTYSyncStore({ node });
const service = new RemoteSessionService({ node, sessionManager, bridge, syncStore });

await bridge.initialize();
await service.enable();

See the transport-truffle guide for the full cross-device flow.

Released under the MIT License.