Integrations · Pull in, push out

Connectors

A connector is a small ESM module stored in the app: a configSchema, plus run() to pull data in or push() to send the library out. The direction is read from what you export. In between it's plain JavaScript, so it does whatever your workflow needs.

Sideband
sideband.local / connectors / csv-parameters
ConfigCodeOutputLogs csv-parameters · inbound
export const configSchema = [
  { key: "file", label: "CSV file", type: "file", required: true },
];

// Exporting run() makes a connector inbound.
export async function run(config, helpers) {
  const rows = helpers.parseCSV(config.file);
  helpers.log(`${rows.length} rows`);

  const components = rows.map((r) => ({
    name: r["Part Name"],
    parameters: [
      { type: "Tolerance", value: r.Tolerance },
      { type: "Package", value: r.Package },
    ],
    mpns: [{ manufacturer: r.Manufacturer, partNumber: r.MPN }],
  }));

  return { components };
}

Illustrative: an inbound connector turning a supplier CSV into parameters and MPNs.

Inbound

run() returns components; the app does the careful part

An inbound connector exports run(config, helpers) and returns components: parameters, manufacturer part numbers, attachments. Nothing is written yet. The result appears as a preview, so you read the change before the library does.

Apply it and the writes go through a queue, two at a time, until the run is in.

Inbound run · csv-parameters

  • run()
  • Preview
  • Apply
Applying 2 in flight

Outbound

push() walks the whole library for you

An outbound connector exports push(entities, config, helpers). The engine hands it the library in batches of up to 250 entities and holds the pace you set (requests per second and concurrency, enforced for the whole run), so a full catalogue push doesn't flatten the system on the other end.

Point it at an ERP, a PLM, an internal API: the loop is yours to write.

ConfigCodeOutputLogs erp-push · outbound
// Exporting push() makes a connector outbound.
// Called with batches of up to 250 entities,
// at the requests/second you configure.
export async function push(entities, config, helpers) {
  for (const part of entities) {
    await helpers.postJson(
      `${config.baseUrl}/items/${part.ipn}`,
      { ipn: part.ipn, name: part.name },
    );
  }
  helpers.log(`pushed ${entities.length} parts`);
}

Helpers

The plumbing is already written

Connector code calls into a small helper toolbox, so the integration stays a dozen lines. Parse a CSV or a chosen Excel sheet, query a database directly, fetch a URL, post JSON, send a signed webhook, or hand back symbols and footprints, down to the original CAD binaries.

  • log(), parseCSV(), parseExcel(sheet)
  • queryDatabase(): PostgreSQL, MySQL, SQLite and more
  • fetchUrl(), postJson(), sendWebhook(): Standard Webhooks HMAC-SHA256 signing
  • getSymbol / getFootprint, and getSymbolFile / getFootprintFile for the original .SchLib / .PcbLib binaries
ConfigCodeOutputLogs erp-stock · inbound
export async function run(config, helpers) {
  const rows = await helpers.queryDatabase(
    config.connection,
    "SELECT ipn, qty_on_hand FROM erp.stock",
  );

  return {
    components: rows.map((r) => ({
      ipn: r.ipn,
      parameters: [
        { type: "Stock", value: String(r.qty_on_hand) },
      ],
    })),
  };
}

Templates

Seven built-ins to start from

The common cases ship ready to run, and each one is ordinary connector code. Open it, read it, make it yours.

CSV → Parameters Inbound

Auto-detects the name, IPN and description columns; every other column becomes a parameter.

CSV → MPNs Inbound

Manufacturer part numbers, with manufacturer names resolved against your Manufacturers table.

CSV → Attachments Inbound

Datasheets and documents, linked by URL or fetched and stored as files.

Excel → Parameters Inbound

The same column detection, from a chosen sheet of a spreadsheet.

Excel → MPNs Inbound

Manufacturer part numbers from a chosen Excel sheet.

Excel → Attachments Inbound

Attachment links or files from a chosen Excel sheet.

Components → Webhook Outbound

Your components as signed JSON batches, to any endpoint that will have them.

Or write your own. A configSchema and one exported function is a complete connector.

Trust model

Full Node access, on purpose

Connector code runs with full Node access. That is the point: this is operator automation, a script in your tools directory that you own. You write the integration your workflow needs, without waiting for anyone to ship it.

The failure mode is forgiving, too. The library tables are the source of truth, so if a run dies partway you run it again and you're current.

Running

Manually, on a schedule, or on demand

Run a connector by hand while you're still shaping it, hand it to a cron schedule once it's trusted, or push on demand when a downstream system asks. For event-shaped delivery there are signed webhooks.

When the destination is the CAD seat itself, the Altium ODBC connector is the main outbound path: your library, live in Altium's Components panel.

Put every part on one data model

Download Sideband for Windows and give your whole team one source of truth. Free 30-day trial — no card required.

Request access

Beta 1.0.0-beta.4 · Windows · free