
Mastra review
TypeScript framework for agents and workflows, with a local Studio, memory and tracing
Verdict
Mastra is the most complete choice for TypeScript teams, with agents, workflows that suspend and resume, memory, evals and a local Studio in one package. Most of it is Apache 2.0, but some team features sit under an enterprise licence, so check which folder a feature comes from.
Best for
TypeScript and Next.js teams building agents into their own product
Not for
Python teams, or teams that want every feature under an open source licence
Pros
- Local Studio to chat with agents, run workflows and read traces
- Workflows suspend for approval and resume from stored state
- One interface for many model providers
- Runs inside Next.js or Node apps, or as its own server
Cons
- Some team features are under a source-available enterprise licence
- Needs a recent Node.js, 22.13 or later
- Many packages release separately, so upgrades touch several versions
Is Mastra right for your project?
Describe what you need and AI will check the fit against this review.
Mastra features and capabilities
Studio
mastra dev opens a local UI for chatting with agents, running workflows, testing tools and reading traces, so developers can debug without extra services.
Workflows with suspend and resume
Workflows branch, loop and run steps in parallel, and can pause for a person's input for as long as needed, then continue from a saved snapshot.
Memory
Conversation history, retrieval and observational memory keep agents consistent across sessions, stored in your own database.
MCP both ways
Agents can use tools from MCP servers, and your own tools and agents can be published as an MCP server for other clients.
Tracing and evals
Spans cover agents, workflows, tools and model calls, and built-in evals score outputs, with exporters for OpenTelemetry backends.
- Any model providerWorks with OpenAI, Anthropic, Google and local models, not one vendor
- Yes
- Multi-agentSeveral agents can hand off or work together
- Yes
- MCP toolsCan use tools from MCP servers
- Yes
- Durable stateSaves progress so a run can resume after a crash or a pause
- YesWorkflow snapshots in LibSQL, Postgres or other storage
- Human approvalCan pause for a person to approve or edit before continuing
- Yes
- TracingShows each step, tool call and token use
- YesShown in Studio, with OpenTelemetry exporters
- Visual studioA UI to build, run or debug agents
- YesLocal Studio; team roles need the enterprise licence
At a glance
- Type
- TypeScript agent framework
- Stack
- TypeScript / Node.js 22.13+
- Databases
- LibSQL, PostgreSQL
- Licence terms
- The core framework is Apache 2.0. Code in ee folders, such as Studio roles and the editor, is source-available and needs a paid licence in production.
- SSO
- Free edition
- Roles and permissions
- Paid only
- Audit logs
- Paid only
Free vs paid editions
What you get when you self-host, and what needs a paid plan.
The Apache 2.0 core includes agents, workflows, memory, MCP, tracing and Studio, and you can host it anywhere. Role-based access in Studio and the Studio editor sit in ee folders and need an enterprise licence in production. The Mastra platform hosts agents and Studio with a free Starter plan, and Teams costs $250 a month.
Self-hosting Mastra
Mastra needs Node.js 22.13 or later. Workflow state and memory need a storage adapter such as LibSQL or Postgres.
New cloud server to ready
56 s
Research task, median of 3
20.3 s, 349 MB peak
Version tested
1.78.0 · Oct 19, 2026
- Installing Mastra with zod and tsx in a fresh Node 22 container took 35 seconds and peaked at 349 MB.
- The tools are written with createTool and a zod schema, so they carry their own HTTP calls, which makes the file longer than the Python agents.
- Passing openrouter/anthropic/claude-haiku-5.5 as the model was enough. All three runs passed in 8 to 21 seconds, at about $0.001 to $0.003 each.
import { Agent } from "@mastra/core/agent";
import { createTool } from "@mastra/core/tools";
import { z } from "zod";
const H = { "x-api-key": process.env.GEEKFLARE_API_KEY!, "Content-Type": "application/json" };
const webSearch = createTool({
id: "web_search",
description: "Search the web. Returns the top 5 results as 'title | url | snippet' lines.",
inputSchema: z.object({ query: z.string() }),
execute: async ({ query }) => {
const r = await fetch("https://api.geekflare.com/search", { method: "POST", headers: H, body: JSON.stringify({ query }) });
const items = ((await r.json()).data ?? []).slice(0, 5);
return items.map((i: any) => `${i.title} | ${i.url} | ${i.snippet ?? ""}`).join("\n");
},
});
const readPage = createTool({
id: "read_page",
description: "Read a web page as Markdown, cut to 6,000 characters.",
inputSchema: z.object({ url: z.string() }),
execute: async ({ url }) => {
const r = await fetch("https://api.geekflare.com/webscraping", { method: "POST", headers: H, body: JSON.stringify({ url, format: ["markdown"] }) });
return (((await r.json()).data ?? {}).markdown ?? "").slice(0, 6000);
},
});
export const agent = new Agent({
name: "Researcher",
instructions: "You are a careful research assistant. Use the tools to find facts and cite your sources.",
model: "openrouter/anthropic/claude-haiku-5.5",
tools: { webSearch, readPage },
});
export async function run(task: string): Promise<string> {
const res = await agent.generate(task, { maxSteps: 10, modelSettings: { temperature: 0, maxOutputTokens: 1024 } });
return res.text;
}The latest stable release is Scrapy 2.19.0, released 10 September 2026, according to the Scrapy release notes.
Two notable changes:
- New RemoteControl extension, which lets you inspect and control a running crawl over HTTP.
- The default priority queue is now DownloaderAwarePriorityQueue, per the release notes and the settings docs.
I could only see search snippets of the release notes, not the full text, so there may be other changes I didn't capture.