Something went wrong

Thank you for being patient! We're working hard on resolving the issue

SDK CLI - Lona Docs Log in

SDK CLI

@tento-lona/cli lives under tento/tento-lona-js/cli/ and inspects sheets through the live LonaSdk.Client. It talks to the API and runs against authenticated sheets.

When to use which CLI

ScenarioUse
Inspect a .sheet.json fixture on disk@tento-lona/cli/rows-fixtures
Replay a scripted ops fixture@tento-lona/cli/rows-fixtures
Render a real sheet from your account@tento-lona/cli
Render a sheet's tree as terminal output@tento-lona/cli
Watch a real sheet for live changes@tento-lona/cli
Run an ephemeral :home / :weather sheet@tento-lona/cli

The SDK CLI requires LONA_ACCESS_TOKEN in the environment.

Available scripts

All scripts live under tento/tento-lona-js/cli/. Run with Deno:

deno run --allow-read --allow-env --allow-net --unstable-sloppy-imports \
  tento/tento-lona-js/cli/<script>.deno.ts [args]

sheet-tree.deno.ts

Render a sheet (real or ephemeral) as an indented text tree.

# Real sheet:
deno run ... tento/tento-lona-js/cli/sheet-tree.deno.ts ss_3f9a8b2e7c1d4e6f

# Ephemeral catalog template:
deno run ... tento/tento-lona-js/cli/sheet-tree.deno.ts :home

# Ephemeral URL spec:
deno run ... tento/tento-lona-js/cli/sheet-tree.deno.ts \
  --url 'https://lona.so/sheet?title=Sprint&r0.type=task&r0.label=Frontend'

render-sheet-tui.deno.ts

Render a sheet as a terminal grid (uses TuiReconciler from @tento-lona/sheets).

deno run ... tento/tento-lona-js/cli/render-sheet-tui.deno.ts ss_3f9a8b2e7c1d4e6f
deno run ... tento/tento-lona-js/cli/render-sheet-tui.deno.ts :home --width 120

render-sheet-tree-watch.deno.ts

Reactive demo of the per-type CLI plugin pipeline. Opens an ephemeral sheet, renders it, then mutates the sheet through a scripted sequence (add row, rename row, delete row). After each mutation the new tree is re-rendered and diffTree against the previous output prints a one-line change summary above the new tree.

deno run ... tento/tento-lona-js/cli/render-sheet-tree-watch.deno.ts
deno run ... tento/tento-lona-js/cli/render-sheet-tree-watch.deno.ts --json

The accompanying test (cli-reactive-pipeline.deno.test.ts) exercises the same pipeline against fixed assertions; this driver is the eyeball-runnable counterpart.

events-row.deno.ts

Verify row-backed event rendering. Opens an event row through RowClient, decodes cells through event.v1, then seeds EventsIndex exactly as renderers do.

deno run ... tento/tento-lona-js/cli/events-row.deno.ts \
  --row r_3f9a8b2e7c1d4e6f \
  --start 2026-04-01 --end 2026-05-01 \
  --fetch

events-batch.deno.ts

Bulk-fetch events for many rows in a single batch request. Useful for benchmarking the events-fetch path.

events-aggregate.deno.ts

Aggregate event counts across multiple sheets / calendars over a date range.

sheet-cells-batch.deno.ts

Bulk-fetch cells for a list of (rowId, date) pairs. Used to exercise the canonical-cell dedup path.

Authentication

All scripts read LONA_ACCESS_TOKEN from the environment. Generate one at lona.so/settings/tokens:

export LONA_ACCESS_TOKEN="lona_pat_..."

Tokens grant the same access as your user account. Do not commit tokens or inline them on command lines — set the env var via .env (loaded by ./run) or your shell profile.

Per-type plugin manifest

Every CLI rendering script wires the canonical per-type plugin manifest from tento/tento-lona-js/cli/plugins/index.ts. New plugins added to BUILTIN_RENDER_PLUGIN_SPECS automatically pick up CLI support — the manifest mirrors the rows-side spec list 1:1.

The rows-side per-type plugin contract lives with the @tento-lona/sheets library docs.

See also

  • @tento-lona/cli/rows-fixtures — fixture-driven rows CLI
  • Package Architecture — why two CLIs exist and when to reach for which