Model or dataset
vercel-labs/tersa avatar
vercel-labs/tersa

Tersa: a canvas for AI workflows built on the Vercel AI SDK Gateway

Tersa is an open source canvas for building AI workflows.

1,040 stars172 forksTypeScriptMIT

At a glance

What is it?
Tersa is an MIT-licensed Next.js app that puts a drag-and-drop node canvas in front of the Vercel AI SDK Gateway. It runs locally with pnpm, keeps canvas state in the browser, and is best suited to prototyping rather than production orchestration.
Who is it for?
Tersa fits developers who want to try model combinations on a canvas without writing glue code, and who are comfortable cloning a Next.js app and supplying their own AI SDK Gateway credentials. It does not fit anyone who needs a hosted, multi-user service: the README states canvas state persists in the browser, and Vercel Blob is listed as the media storage layer, so shared editing is not part of the design.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 138 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The problem Tersa addresses: wiring models together by hand

Most AI prototyping starts as a script. You import a provider SDK, hardcode a model name, pass a prompt, print the result. The moment you want to compare two models, or chain a text model into an image model, the script grows branches and the prompt strings get buried. Tersa replaces that script with a canvas: nodes are added from a toolbar, connected by dragging from one node's output to another's input, and run as a workflow. The README describes this as a visual AI playground, and the audience is developers who want to see what a chain of models does before committing to an implementation. The cost indicators matter here. The README lists relative pricing across models at a glance, which is the kind of comparison that is tedious to assemble by hand across 25+ providers. Tersa is not an orchestration runtime for scheduled jobs or production traffic. It is a local Next.js application you run yourself, and the README makes no claim about deploying workflows as services.

How the canvas, the gateway and browser storage fit together

The stack is visible in package.json. ReactFlow, published as @xyflow/react, provides the node graph. The Vercel AI SDK, imported as ai and @ai-sdk/react, handles model calls, and @ai-sdk/gateway is the routing layer to providers. TipTap supplies the rich text editing inside nodes, with a long list of individual extensions for tables, task lists, code blocks and typography. Jotai holds state, and @vercel/blob is the media storage dependency. The data flow implied by that layout is: the canvas serialises into browser state, a run sends node inputs through the AI SDK Gateway to whichever provider the node selects, and generated media is written to Vercel Blob. The README confirms local storage for canvas state and lists Vercel Blob for media storage, but it does not document the node execution order, how partial failures are surfaced, or what happens to a run when a provider key is missing. Those are the parts you will learn by reading app/, components/, hooks/, lib/, providers/ and tunnels/ in the repository.

Installing Tersa and running a first workflow

The README gives a five-step path. Prerequisites are Node.js v20+ and PNPM. Start by cloning the repository and moving into it.

bash
git clone https://github.com/vercel-labs/tersa.git
cd tersa

Install dependencies with pnpm. The lockfile is pnpm-lock.yaml, so pnpm is the intended package manager rather than npm or yarn.

bash
pnpm install

Step three is the one the README leaves open: create a .env.local file with your AI SDK Gateway credentials and any provider API keys you want to use. It does not list the variable names. The AI SDK Gateway documentation is the source for those, and the providers/ directory in the repository is where the code reads them.

bash
pnpm dev

The dev script runs next dev --turbopack, and the README says to open http://localhost:3000. From there the usage section is short: add nodes with the toolbar, drag from an output to an input to connect them, pick a model from any supported provider, and run the workflow. If a node fails, check .env.local first, since a missing provider key is the most likely cause and the README does not describe an in-app diagnostic.

Where Tersa stops: storage, collaboration and execution guarantees

The limitation is stated plainly in the feature list. Canvas state persists in the browser automatically. That is convenient for one person on one machine, and it is the wrong model for a team. There is no account system described in the README, no mention of a database for workflow definitions, and no shared workspace. If you clear browser storage, the README gives no recovery path, and it does not document export or import of a canvas. Media is different: it goes to Vercel Blob, which is an external service, so a workflow that generates images or video depends on Blob being configured. The README also does not document retries, rate-limit handling, or what happens when a long chain fails halfway. Tersa is the wrong tool if you need scheduled runs, audit trails, or a workflow that other people can open in a browser without cloning the repository. It is also the wrong tool if you want to avoid the Vercel AI SDK Gateway entirely, since that gateway is the routing layer the whole application is built on.

Tersa against a code-first approach with the AI SDK directly

The obvious alternative is to skip the canvas and call the AI SDK from your own script or application. The difference is in what each one optimises. A script gives you version control over the workflow definition, testability, and a deployable artifact. Tersa gives you a visual surface where you can add a node, swap the model, and see the result without editing code, plus the relative cost indicators the README advertises. For exploring which model handles a task, the canvas removes friction. For anything that must run the same way twice, the script wins, because the canvas state lives in browser storage and the README does not describe a way to check it into a repository. A middle path is to prototype in Tersa, settle on a chain, then reimplement it with the AI SDK in your own codebase. That keeps the exploration cheap and the production path explicit. Note that Tersa's own package.json pins ai at ^6.0.95 and @ai-sdk/gateway at ^3.0.53, so a reimplementation should match those major versions or expect API differences.

Maintenance, releases and what the MIT licence covers

The repository is not archived. The last push was on 2026-05-01, which is more than four months before today, so treat it as a project that moves in bursts rather than one with continuous activity. The release history supports that reading: v2.0.0 landed on 2026-02-20, preceded by v1.3.16 on 2026-01-20 and v1.3.15 on 2025-12-31, with nothing published after the February major. The version field in package.json still reads 0.1.0, which suggests releases are cut by a separate process, likely the .autorc configuration at the repository root. Upgrading means tracking Next.js, React 19, the AI SDK and the TipTap 3.x extension set together, and the bump-deps and bump-ui scripts exist precisely because those move independently. The licence is MIT, and license.md is the file to read; MIT is permissive, but it covers Tersa's own code, not the dependencies, which carry their own terms. Nothing here is legal advice.

Editorial conclusion

Tersa fits developers who want to try model combinations on a canvas without writing glue code, and who are comfortable cloning a Next.js app and supplying their own AI SDK Gateway credentials. It does not fit anyone who needs a hosted, multi-user service: the README states canvas state persists in the browser, and Vercel Blob is listed as the media storage layer, so shared editing is not part of the design. Before adopting it, check the .env.local keys your chosen providers require, confirm the Node.js v20+ and PNPM prerequisites, and read license.md rather than assuming the MIT label covers every bundled dependency.

Frequently asked questions

What is Tersa?

Tersa is an open source visual AI playground from vercel-labs, licensed under MIT. The README describes it as a canvas where you drag, drop, connect and run nodes to build AI workflows powered by the Vercel AI SDK Gateway.

How do I install and run Tersa?

You need Node.js v20+ and PNPM. The README's steps are to clone vercel-labs/tersa, run pnpm install, create a .env.local file with your AI SDK Gateway credentials and provider API keys, run pnpm dev, then open http://localhost:3000.

Which models can Tersa use?

The README states that text, image and video models from 25+ providers are available through the Vercel AI SDK Gateway, and that relative pricing across models is shown at a glance.

Where does Tersa store my workflows and generated media?

Canvas state persists in the browser automatically, according to the README's feature list. Generated media goes to Vercel Blob, which is listed as the media storage layer in the technologies section.

Does Tersa save my workflow to a server?

The README does not describe server-side storage for canvas state, and no account or database layer is mentioned. The documented persistence mechanism is browser local storage, while media is written to Vercel Blob.

Official sources

  1. License: MIT
  2. Project website
  3. README
  4. Releases
  5. vercel-labs/tersa on GitHub
Community notes

Community notes