The Tersa manifest says 0.1.0 while its newest release is v2.0.0
Tersa is an open source canvas for building AI workflows.
At a glance
- What is it?
- Tersa is a Vercel Labs canvas for wiring AI workflows from drag-and-drop nodes, running on the Vercel AI SDK Gateway with 25 or more providers. The code is a Next.js app with a very large rich text editor dependency list, state that lives in the browser, and a documented stack that has drifted from the manifest that builds it.
- Who is it for?
- Tersa is worth an hour if you want to see how the AI SDK Gateway behaves across many providers, and its cost indicators and reasoning view are the parts that are hard to reproduce elsewhere. Before adopting it, check the version story, since the manifest, the tags and the README stack all disagree, and decide whether browser-only canvas state plus Vercel Blob for media fits a team workflow.
- 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?
- Activity is slowing. The repository last received commits 6 months 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 November 14, 2026, and from our analysis. They are not legal advice.
Star history
- vercel-labs/tersa1,048 ★ · +8
| Repository | 2026-09-15 | 2026-11-14 |
|---|---|---|
| vercel-labs/tersa | 1k | 1k |
8 Stars in the last 60 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
The manifest version and the newest tag disagree by two majors
The package manifest reads name tersa, version 0.1.0, and is marked private. The release history says something else: v1.3.15 on 31 December 2025, v1.3.16 on 20 January 2026, then v2.0.0 on 20 February 2026. So the published train reached a major version that the manifest never recorded, which is what a private package marker implies, since the version field is never consumed by a registry the way a published one would be. There is a second gap behind that. The last push to the repository is dated 1 May 2026, two and a half months after v2.0.0 shipped, so main has moved on without a tag. Anyone pinning a Tersa build has to choose between a tag that predates recent work and a branch that has no version attached to it.
The README names Next 15 while the manifest pins Next 16
The technologies section describes Next.js 15 with the App Router and Turbopack, React 19, the Vercel AI SDK with its Gateway, Vercel Blob for media, ReactFlow for the canvas, TipTap for rich text, Tailwind for styling, and shadcn/ui with Kibo UI and Radix UI for components. The manifest does not match on the two most visible items. Next is pinned at 16.1.6 rather than 15, and the AI SDK line is well ahead of the description, with the gateway package at 3.0.53 and the ai package at 6.0.95, while ReactFlow appears under its scoped name @xyflow/react at 12.10.0. The dependency list also contains a good deal that the stack summary never mentions, including jotai for state, fuse.js for fuzzy search, cmdk for a command palette, nanoid for identifiers and motion for animation.
Roughly twenty of the dependencies are one rich text editor
Count the manifest and the @tiptap packages dominate, all pinned at 3.19.0: core, react, pm, starter-kit, extensions, suggestions, plus one extension per editor capability. Those include a code block wired to lowlight for syntax highlighting, character count, placeholder text, subscript and superscript, the full table set split across table, table cell, table header and table row, task list and task item, text style and typography. That is the clearest signal about what this canvas actually is built around, since the node editor gets one dependency and the text box gets twenty. The practical consequence for anyone extending it is that editor behaviour is a surface you can change in fine granularity, while node behaviour is the part you would be writing yourself.
Workflow state stays in the browser, while analytics does not
The features section lists local storage as canvas state persisting in the browser automatically, and there is no database dependency or migration step anywhere in the documented setup. Two other entries sit next to that promise and are worth reading together. Vercel Blob is used for media storage, so anything the workflow produces as an image or video leaves the browser for object storage, and Vercel Analytics is in the dependency list, so page telemetry is being sent even though the workflow graph itself is not. The net effect is a split model: the shape of your canvas belongs to one browser profile on one machine, while the media it generates and the pages you visit do not.
Five steps from clone to localhost, with credentials left to you
Local setup asks for Node.js 20 or newer and the PNPM package manager, then five steps:
git clone https://github.com/vercel-labs/tersa.git
cd tersapnpm installThe third step is the one with content: create a .env.local holding your AI SDK Gateway credentials along with any provider API keys you want to use, which means the app can run entirely through the gateway or talk to a provider directly, and the file's contents are not enumerated anywhere. Then start the server:
pnpm devand open http://localhost:3000. There is also a hosted deployment at tersa-phi.vercel.app, so the canvas can be looked at before anything is cloned.
Two scripts maintain dependencies, and none runs tests
The script list is short and telling. Development and production both go through Turbopack, with next dev and next build, and next start serves the build. Two maintenance scripts sit alongside them: bump-deps runs npm-check-updates with the update flag and then reinstalls with PNPM, and bump-ui runs the shadcn CLI twice, first adding all components with overwrite, then migrating radix, which is a deliberate one-way move of the component layer to a different primitive set. Linting is delegated to two commands called check and fix, both pointing at ultracite, with a biome.jsonc configuration at the repository root doing the actual rule setting. What is missing is as notable as what is there: no test script is defined at all.
The licence link says LICENSE and points at license.md
The licence section tells readers it is MIT and to see the LICENSE file for details, and the link text reads LICENSE while the target is license.md. The repository root matches the target rather than the text, since license.md is present in lowercase and there is no uppercase LICENSE file. Two other root entries go unexplained by anything in the visible documentation. There is a tunnels directory sitting next to vercel.json, which suggests some kind of network exposure story that the README never mentions, and there is an .autorc file next to CHANGELOG.md, a pairing that points to generated release notes rather than a log someone writes by hand. The README closes by naming a single author, Hayden Bleasel.
Editorial conclusion
Tersa is worth an hour if you want to see how the AI SDK Gateway behaves across many providers, and its cost indicators and reasoning view are the parts that are hard to reproduce elsewhere. Before adopting it, check the version story, since the manifest, the tags and the README stack all disagree, and decide whether browser-only canvas state plus Vercel Blob for media fits a team workflow. Anyone needing server persistence, a test suite or a documented release trail should expect to supply those themselves.
Frequently asked questions
What does Tersa need before it runs locally?
Node.js 20 or newer and the PNPM package manager. You clone the repository, run pnpm install, create a .env.local with your AI SDK Gateway credentials and any provider keys, run pnpm dev, and open http://localhost:3000.
Which models can a Tersa workflow call?
Text, image and video models from more than 25 providers, all reached through the Vercel AI SDK Gateway, with relative cost indicators per model and reasoning viewable for the providers that support it.
Where is a Tersa workflow saved?
Canvas state persists in the browser automatically, and no database step appears in the documented setup. Media goes to Vercel Blob, and the app also includes Vercel Analytics for page telemetry.
What is the current version of Tersa?
The newest published release is v2.0.0 from 20 February 2026, following v1.3.16 and v1.3.15. The package manifest still reads version 0.1.0 and is marked private, and the last push to the repository is dated 1 May 2026.
Does Tersa have an automated test suite?
No test script is defined in the manifest. The scripts cover development, build and start, dependency bumps through npm-check-updates, a UI bump through the shadcn CLI, and check and fix commands that run ultracite.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/vercel-labs-tersa)Star history chart for your README
[](https://hysenlabs.com/projects/vercel-labs-tersa)Was this useful?