# What is LSD?
URL: https://lsd.tools/docs/start-overview
Updated: 2026-07-17

> LSD is a data-pipeline platform. You write a plain Python function, decorate it with lsdtools, and it appears on the canvas as a live, cached node with an auto-generated form. Pipelines run in the desktop app, in a script, or headlessly in CI — all on the same engine.

## The idea

LSD is a **data-pipeline platform**. A pipeline is a graph of **nodes**; each node is one
step — *load* some data, *shape* it, or *deliver* a result. You build pipelines two ways, on the
same engine:

- **Visually** — drag nodes onto the canvas, wire them together, edit parameters in forms.
- **In Python** — write a function, decorate it, and it *becomes* a node.

The bridge between the two is [`lsdtools`](/docs/api-index): decorate a function and it shows up
on the canvas with a generated form, live caching, and an inspector — no UI code required.

```python
from lsdtools import Tool, Table

tool = Tool("scores")

@tool.shape
def top_scores(t: Table, limit: int = 10) -> Table:
    """Keep the highest-scoring rows."""
    return t.sort("score", descending=True).head(limit)
```

That's a real node. `t: Table` is an **input port** you wire from an upstream node; `limit: int`
is a **parameter** that renders as a number field. Run it and the result is cached — change a
parameter and only what depends on it recomputes.

## The two-layer rule

There is exactly one rule to remember:

> **Import only `lsdtools`.** Everything under `lsd.*` is private engine internals.

`lsdtools` is small (about twenty names) and stable. Staying on it means your tool keeps working
across releases — and `lsd package lint` will tell you if you stray.

## Where LSD runs

The same pipeline runs in three places, unchanged:

| Where | What it adds |
|---|---|
| **Desktop app** | Node-graph canvas, parameter forms, 3D viewer, the Package Manager |
| **A Python script** | `Engine().run(...)` — automate or embed a pipeline anywhere |
| **CI / headless** | The `lsd` CLI runs projects with no display |

## Start here

1. **[Install LSD](/docs/start-install)** — the SDK and the desktop app.
2. **[Run your first pipeline](/docs/start-first-pipeline)** — on the canvas, no code.
3. **[Write your first tool](/docs/start-first-tool)** — ten lines, live on the canvas.
4. **[Where to next](/docs/start-where-next)** — the map of these docs.

## Related

**Learn** — [Build a tool](/docs/tools-tool-object) · [Packages](/docs/pkg-anatomy)

**API** — [lsdtools reference](/docs/api-index) · [Tool](/docs/api-tool) · [Table](/docs/api-table)

## FAQ
### Do I have to write Python to use LSD?

No. You can assemble pipelines from the step palette and edit parameters in forms. You write Python only when you want a custom node — and then it is one decorated function.

### What is the difference between lsd and lsdtools?

lsdtools is the small, stable public API you author against. lsd is the engine and internals — private. The one rule is "import only lsdtools"; lsd package lint enforces it.
