{"id":"src_s2I4fJZpIFPJZHXVJho9x","slug":"nuxt-blog","name":"Nuxt Blog","type":"feed","url":"https://nuxt.com/blog","orgId":"org_oRqLooJtnRzA_ZCanmmDo","productId":null,"productSlug":null,"org":{"id":"org_oRqLooJtnRzA_ZCanmmDo","slug":"nuxt","name":"Nuxt"},"isPrimary":false,"isHidden":false,"discovery":"curated","metadata":"{\"feedUrl\":\"https://nuxt.com/blog/rss.xml\",\"feedType\":\"rss\",\"feedEtag\":\"W/\\\"2c06934be85220dbad7c4cd2161486c8\\\"\",\"feedLastModified\":\"Tue, 02 Jun 2026 19:15:32 GMT\",\"feedContentDepth\":\"summary-only\"}","kind":null,"stars":null,"starsFetchedAt":null,"releaseCount":48,"releasesLast30Days":0,"avgReleasesPerWeek":0.2,"latestVersion":null,"latestDate":"2026-04-29T00:00:00.000Z","changelogUrl":null,"hasChangelogFile":false,"lastFetchedAt":"2026-06-03T00:01:24.131Z","lastPolledAt":"2026-06-03T00:01:21.566Z","trackingSince":"1970-01-01T00:00:00.000Z","releases":[{"id":"rel_czhLoW-SLs_3dhLUfCLPY","version":null,"type":"feature","title":"Introducing the Nuxt Agent","summary":"# Introducing the Nuxt Agent\n\nOur own AI agent on nuxt.com, grounded in the official docs and the Nuxt ecosystem. We built it internally using the AI ...","titleGenerated":null,"titleShort":null,"content":"# Introducing the Nuxt Agent\n\nOur own AI agent on nuxt.com, grounded in the official docs and the Nuxt ecosystem. We built it internally using the AI SDK, our MCP server, and Nuxt UI components.\n\nFirst, we want to thank [Kapa.ai](https://kapa.ai), who have powered our AI Chat widget over the past few years through their sponsorship and continue to support our community through our [Discord server](https://go.nuxt.com/discord).  \nWe decided to build our own to showcase what's possible with Nuxt and offer a deeper integration with the framework and its ecosystem.\n\nThe **Nuxt Agent** is now in Beta on nuxt.com. We built it ourselves, plugged it into the site, and connected it to our docs, modules catalog, blog, and deployment guides.\n\nOpen the agent anywhere on nuxt.com with **⌘I** (or **Ctrl+I**), or jump straight into the full-screen experience at [/chat](/chat).\n\n## From a docs widget to a real agent\n\nKapa AI served us well as a docs Q&A widget for the past couple of years. It searched the docs and summarized an answer, and that was about it. But Nuxt is more than docs. There are modules, templates, deployment providers, a changelog, GitHub issues, playgrounds, and real navigation across the site.\n\nWe wanted an agent that could handle all of it, with the same design language as the rest of nuxt.com and the same content pipeline (Nuxt Content) we already run. So we built our own on top of the [Nuxt MCP server](/blog/building-nuxt-mcp) we shipped last November.\n\nHere's what the agent does today:\n\n- **Grounds answers** in the official Nuxt docs and ecosystem data through MCP tools, not retrieved text chunks.\n- **Renders rich UI**. Modules, templates, blog posts, hosting providers, and playground links come back as clickable cards instead of plain links.\n- **Streams everything** as it runs, including tool call progress.\n- **Closes the loop**. Feedback, voting, and issue reports flow into our internal tools so we can keep improving it.\n\n## Meet the agent\n\n### Three ways to talk to it\n\nYou can reach the agent three ways:\n\n- A **side panel** pinned to the right on large screens, sliding over on smaller ones. Toggle it from the header or with **⌘I**.\n- An **ask bar** at the bottom of docs and blog pages, so you can ask a question without leaving the page you're reading.\n- A **full-screen chat** at [/chat](/chat) for longer sessions.\n\n### It knows what page you're on\n\nAsk \"how do I customize this for my app?\" while reading a doc and the agent automatically pulls that page in as context. A small \"Agent is using this page\" indicator in the footer makes it explicit, and you can dismiss it whenever you want.\n\n### Rich answers, not just text\n\nAnswers come back as more than text. Ask about a module and you get a module card with metadata pulled live from the API. Ask for starter templates and you get a row of clickable template cards. Ask about deployment and you get provider cards that link to the right guide. Need to reproduce a bug? The agent can generate a [StackBlitz](https://stackblitz.com) playground link from the conversation itself.\n\nTry asking: *\"Show me official starter templates\"* — you'll get the full lineup as cards you can open in one click.\n\n### Feedback built in\n\nEvery assistant message has a thumbs up/down. If you want to share more (a missing piece, a wrong answer, an idea), the **Report issue** action opens a short form and creates a Linear ticket on our side with the conversation attached, so we have everything we need to follow up.\n\nThe agent can open that form itself, too. If you ask to \"submit feedback\" or \"report an issue\", or if the conversation starts to feel frustrated, the agent calls the report issue tool and the same form opens inline. No button hunting required.\n\nConversations are saved and resume across reloads, so you can step away and pick up where you left off.\n\n## What the agent can actually do\n\nThe agent's grounding comes from the [Nuxt MCP server](https://nuxt.com/mcp), the same one Cursor, Claude Desktop and ChatGPT connect to. That means the Nuxt Agent and your local AI assistant share the same structured data: the official docs, the modules catalog, the blog, deployment guides, and the Nuxt repositories' changelog.\n\nOn top of that grounding, the agent has a small set of native tools that render as UI in the chat: module and template cards, hosting providers, blog posts, StackBlitz playground links, and a GitHub issue search across Nuxt repositories. The agent reaches for that issue search first whenever you paste an error.\n\nThe web is available too, through Anthropic's native web search, but only as a fallback for things the model couldn't reasonably know: a brand new Vue release, a freshly published RFC, recent ecosystem news. It's not a general-purpose search engine, and the system prompt is explicit about that. We never use web search for anything that should be answered from the docs or the rest of the Nuxt content exposed through MCP.\n\n## Under the hood\n\n### The stack\n\nA single Nitro handler drives everything. On the client, an `@ai-sdk/vue` `Chat` instance points at `/api/agent`. On the server, AI SDK v6 `streamText` calls `claude-sonnet-4.6`, with tools merged from our own MCP server and a few native ones. Chat state lives in Drizzle ORM, and `evlog` wraps the model for structured telemetry on tokens, cost, and tool calls.\n\n### UIMessage streaming with AI SDK v6\n\nThe whole pipeline runs on the [AI SDK v6](https://ai-sdk.dev) `UIMessage` streaming model. The server side looks like this:\n\n```typescript\nconst stream = createUIMessageStream({\n  execute: async ({ writer }) => {\n    const result = streamText({\n      model: ai.wrap(MODEL),\n      maxOutputTokens: 4000,\n      stopWhen: stopWhenResponseComplete,\n      system: systemPrompt,\n      messages: await convertToModelMessages(messages),\n      tools: {\n        ...mcpTools as ToolSet,\n        web_search: anthropic.tools.webSearch_20250305(),\n        search_github_issues: createSearchGitHubIssuesTool(event),\n        show_module: showModuleTool,\n        show_template: createShowTemplateTool(event),\n        show_blog_post: createShowBlogPostTool(event),\n        show_hosting: createShowHostingTool(event),\n        open_playground: openPlaygroundTool,\n        report_issue: reportIssueTool\n      },\n      experimental_telemetry: {\n        isEnabled: true,\n        integrations: [createEvlogIntegration(ai)]\n      }\n    })\n\n    writer.merge(result.toUIMessageStream({\n      sendSources: true,\n      originalMessages: messages,\n      onFinish: ({ messages: finalizedMessages }) => {\n        event.waitUntil(saveChat(finalizedMessages))\n      }\n    }))\n  }\n})\n```\n\nTwo details are worth pointing out. `stopWhen: stopWhenResponseComplete` is a custom predicate that ends the loop as soon as the model produces text without another tool call, with a hard ceiling at 10 steps. That avoids the classic \"model loops forever on tools\" failure mode. And `event.waitUntil(saveChat(...))` pushes persistence outside the response lifecycle, so the stream finishes for the user right away while the chat row gets upserted in the background.\n\n### One MCP server, two consumers\n\nThe agent and external AI assistants talk to the same MCP server. That's the single most important architectural choice we made. The route handler opens an HTTP MCP client pointed at its own `/mcp` endpoint:\n\n```typescript\nconst httpClient = await createMCPClient({\n  transport: { type: 'http', url: `${getRequestURL(event).origin}${MCP_PATH}` }\n})\nconst mcpTools = await httpClient.tools()\n```\n\nThose tools then get merged with the native UI tools into a single `tools` object passed to `streamText`. The payoff: any tool we add to the MCP server is immediately available to the Nuxt Agent and to every external assistant pointed at it, with no extra wiring. We wrote a [separate post](/blog/building-nuxt-mcp) about how the MCP server itself works back in November.\n\n### Persistence, cost, and rate limiting\n\nChats live in a single `agent_chats` table, keyed by the `x-chat-id` header the client sends on every request. Drizzle's `onConflictDoUpdate` accumulates token usage, estimated cost, duration, and request count across the lifetime of a conversation. That gives us per-chat analytics for free.\n\nEvery request also goes through a small `consumeAgentRateLimit` helper before streaming starts. The current cap is 20 messages per day per IP fingerprint, which is enough for real use and low enough to prevent runaway costs if something starts looping.\n\n### A tight system prompt\n\nA lot of agent quality comes from the prompt. A few rules carried most of the weight: reach for `search_github_issues` first whenever the user pastes an error, prefer `show_module` over `get_module` when the answer should render as a card, never call `web_search` unless the question is genuinely outside what the model could know, and never end a turn with only a tool call. Together those rules cut tool-spam and hallucinations enough that the agent stays focused on the task at hand.\n\n## What's next\n\nThe agent is launching in Beta. In the short term, we're focused on the basics: better answer quality, richer memory across turns, and cleaner source citations.\n\nFurther out, we want nuxt.com to feel more like an application than a static site. The next step there is user accounts. Each logged-in user gets their own session, their chat history saved and resumable across devices, and the Nuxt Agent becomes the first real building block of that more app-like nuxt.com.\n\nWe'd love your help shaping where it goes next. If the agent gets something wrong, or misses something you want, use the **Report issue** button inside the chat. It creates a ticket on our side with the full conversation attached, and we read every one.\n\nTry the Nuxt Agent now: open it with **⌘I**, use the ask bar on any [docs](/docs) page, or head to [/chat](/chat) for the full-screen experience.\n\nThe full source for nuxt.com is on [GitHub](https://github.com/nuxt/nuxt.com), including the agent, the MCP server, and every tool covered above. The agent handler is at `server/api/agent.post.ts`, the native tools at `server/utils/tools/`, and the UI components at `app/components/agent/`. Take any of it as inspiration for your own apps. And if you want to build your own MCP server, the [Nuxt MCP Toolkit](https://mcp-toolkit.nuxt.dev) gets you there in a few minutes.","publishedAt":"2026-04-29T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.618Z","url":"https://nuxt.com/blog/introducing-nuxt-agent","media":[],"coverageCount":0},{"id":"rel_kuv02XTb4sFPooo-qvoxM","version":"4.4","type":"feature","title":"Nuxt 4.4","summary":"Nuxt 4.4 brings custom useFetch/useAsyncData factories, vue-router v5, a new accessibility announcer, typed layout props, build profiling, smarter pay...","titleGenerated":null,"titleShort":null,"content":"Nuxt 4.4 brings custom useFetch/useAsyncData factories, vue-router v5, a new accessibility announcer, typed layout props, build profiling, smarter payload handling, and much more.","publishedAt":"2026-03-12T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.618Z","url":"https://nuxt.com/blog/v4-4","media":[],"coverageCount":0},{"id":"rel__k3rS9Tp29NiQHZDcBBxK","version":"4.3","type":"feature","title":"Nuxt 4.3","summary":"Nuxt 4.3 is out – route rule layouts, ISR payload extraction, draggable error overlay, and more!","titleGenerated":null,"titleShort":null,"content":"Nuxt 4.3 is out – route rule layouts, ISR payload extraction, draggable error overlay, and more!","publishedAt":"2026-01-22T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.618Z","url":"https://nuxt.com/blog/v4-3","media":[],"coverageCount":0},{"id":"rel_pLvvlUcz_cmJHsbbyRSH8","version":null,"type":"feature","title":"Building an MCP Server for Nuxt","summary":"How we built the Nuxt MCP server to enable AI assistants to access our documentation through structured data and composable tools.","titleGenerated":null,"titleShort":null,"content":"How we built the Nuxt MCP server to enable AI assistants to access our documentation through structured data and composable tools.","publishedAt":"2025-11-13T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.618Z","url":"https://nuxt.com/blog/building-nuxt-mcp","media":[],"coverageCount":0},{"id":"rel_pXAKcT0sHNgGdu4XvzwJH","version":null,"type":"feature","title":"Nuxt Image v2","summary":"Nuxt Image v2 is out - with full TypeScript support, IPX v3, and new providers!","titleGenerated":null,"titleShort":null,"content":"Nuxt Image v2 is out - with full TypeScript support, IPX v3, and new providers!","publishedAt":"2025-11-05T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.618Z","url":"https://nuxt.com/blog/nuxt-image-v2","media":[],"coverageCount":0},{"id":"rel_mvoHWXtwvhOq_Cl2yrxvJ","version":"4.2","type":"feature","title":"Nuxt 4.2","summary":"Nuxt 4.2 is out - with experimental TypeScript plugin support, better error handling in development, abort control for data fetching, and more!","titleGenerated":null,"titleShort":null,"content":"Nuxt 4.2 is out - with experimental TypeScript plugin support, better error handling in development, abort control for data fetching, and more!","publishedAt":"2025-10-25T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.642Z","url":"https://nuxt.com/blog/v4-2","media":[],"coverageCount":0},{"id":"rel_c1_7V0VewZY4AM7LR44JG","version":null,"type":"feature","title":"Nuxt UI v4","summary":"Nuxt UI v4 unifies Nuxt UI and Nuxt UI Pro into one powerful, completely free library. With over 110 components, 12 templates, and a comprehensive Fig...","titleGenerated":null,"titleShort":null,"content":"Nuxt UI v4 unifies Nuxt UI and Nuxt UI Pro into one powerful, completely free library. With over 110 components, 12 templates, and a comprehensive Figma kit, all of this is available for free.","publishedAt":"2025-09-22T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.642Z","url":"https://nuxt.com/blog/nuxt-ui-v4","media":[],"coverageCount":0},{"id":"rel_qSP_1YcD0N4Ez-SIFgx1l","version":"4.1","type":"feature","title":"Nuxt 4.1","summary":"Nuxt 4.1 is out - bringing enhanced build stability, better development experience, and powerful new features for module authors!","titleGenerated":null,"titleShort":null,"content":"Nuxt 4.1 is out - bringing enhanced build stability, better development experience, and powerful new features for module authors!","publishedAt":"2025-09-02T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.642Z","url":"https://nuxt.com/blog/v4-1","media":[],"coverageCount":0},{"id":"rel_EOQmlFzXHCuu-RkuS5CIc","version":"3.18","type":"feature","title":"Nuxt 3.18","summary":"Nuxt 3.18 is out - bringing v4 features to v3, improved accessibility, better browser dev tooling integration, and performance enhancements!","titleGenerated":null,"titleShort":null,"content":"Nuxt 3.18 is out - bringing v4 features to v3, improved accessibility, better browser dev tooling integration, and performance enhancements!","publishedAt":"2025-07-28T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.642Z","url":"https://nuxt.com/blog/v3-18","media":[],"coverageCount":0},{"id":"rel_uOU_coOkz5NgQzn9uo28B","version":"4.0","type":"feature","title":"Announcing Nuxt 4.0","summary":"Nuxt 4.0 is here! A thoughtful evolution focused on developer experience, with better project organization, smarter data fetching, and improved type s...","titleGenerated":null,"titleShort":null,"content":"Nuxt 4.0 is here! A thoughtful evolution focused on developer experience, with better project organization, smarter data fetching, and improved type safety.","publishedAt":"2025-07-15T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.642Z","url":"https://nuxt.com/blog/v4","media":[],"coverageCount":0},{"id":"rel_w1NLzP5DvswmOvngKXwPu","version":null,"type":"feature","title":"Building a Privacy-First Feedback Widget","summary":"A lightweight, privacy-focused widget to gather your feedback on Nuxt documentation, built with Drizzle, NuxtHub database and Motion Vue.","titleGenerated":null,"titleShort":null,"content":"A lightweight, privacy-focused widget to gather your feedback on Nuxt documentation, built with Drizzle, NuxtHub database and Motion Vue.","publishedAt":"2025-06-13T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.668Z","url":"https://nuxt.com/blog/building-a-feedback-widget","media":[],"coverageCount":0},{"id":"rel_Oegz09ReiVlj1bSre_LJm","version":null,"type":"feature","title":"Roadmap to v4","summary":"We have some exciting news about the roadmap to Nuxt 4, including a new timeline and what to expect in the next few weeks.","titleGenerated":null,"titleShort":null,"content":"We have some exciting news about the roadmap to Nuxt 4, including a new timeline and what to expect in the next few weeks.","publishedAt":"2025-06-02T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.668Z","url":"https://nuxt.com/blog/roadmap-v4","media":[],"coverageCount":0},{"id":"rel_ncydFQkgMeyua5wXpEXH2","version":"3.17","type":"feature","title":"Nuxt 3.17","summary":"Nuxt 3.17 is out - bringing a major reworking of the async data layer, a new built-in component, better warnings, and performance improvements!","titleGenerated":null,"titleShort":null,"content":"Nuxt 3.17 is out - bringing a major reworking of the async data layer, a new built-in component, better warnings, and performance improvements!","publishedAt":"2025-04-27T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.668Z","url":"https://nuxt.com/blog/v3-17","media":[],"coverageCount":0},{"id":"rel_18U8bVoWsyGBrXftxEWty","version":null,"type":"feature","title":"Nuxt UI v3","summary":"Nuxt UI v3 is out! After 1500+ commits, this major redesign brings improved accessibility, Tailwind CSS v4 support, and full Vue compatibility","titleGenerated":null,"titleShort":null,"content":"Nuxt UI v3 is out! After 1500+ commits, this major redesign brings improved accessibility, Tailwind CSS v4 support, and full Vue compatibility","publishedAt":"2025-03-12T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.668Z","url":"https://nuxt.com/blog/nuxt-ui-v3","media":[],"coverageCount":0},{"id":"rel_RwmLraRwdEi3Nolb9LOym","version":"3.16","type":"feature","title":"Nuxt 3.16","summary":"Nuxt 3.16 is out - packed with features and performance improvements","titleGenerated":null,"titleShort":null,"content":"Nuxt 3.16 is out - packed with features and performance improvements","publishedAt":"2025-03-07T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.668Z","url":"https://nuxt.com/blog/v3-16","media":[],"coverageCount":0},{"id":"rel_5y5_f3Quv5L29oL7HE1Pe","version":"3.15","type":"feature","title":"Nuxt 3.15","summary":"Nuxt 3.15 is out - with Vite 6, better HMR and faster performance","titleGenerated":null,"titleShort":null,"content":"Nuxt 3.15 is out - with Vite 6, better HMR and faster performance","publishedAt":"2024-12-24T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.694Z","url":"https://nuxt.com/blog/v3-15","media":[],"coverageCount":0},{"id":"rel_JfyZE_UKK7FGrGqtchSeH","version":null,"type":"feature","title":"Introducing Nuxt Icon v1","summary":"Discover Nuxt Icon v1 - a modern, versatile, and customizable icon solution for your Nuxt projects.","titleGenerated":null,"titleShort":null,"content":"Discover Nuxt Icon v1 - a modern, versatile, and customizable icon solution for your Nuxt projects.","publishedAt":"2024-11-25T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.694Z","url":"https://nuxt.com/blog/nuxt-icon-v1-0","media":[],"coverageCount":0},{"id":"rel_sJxr4_gxMKPUa5J_6BQYJ","version":"3.14","type":"feature","title":"Nuxt 3.14","summary":"Nuxt 3.14 is out - with a new rspack builder, shared folder, and performance enhancements!","titleGenerated":null,"titleShort":null,"content":"Nuxt 3.14 is out - with a new rspack builder, shared folder, and performance enhancements!","publishedAt":"2024-11-04T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.694Z","url":"https://nuxt.com/blog/v3-14","media":[],"coverageCount":0},{"id":"rel_VXkUT53bsxAkV36-wY9NN","version":"3.13","type":"feature","title":"Nuxt 3.13","summary":"Nuxt 3.13 is out - porting back some of the new features we're building for Nuxt 4!","titleGenerated":null,"titleShort":null,"content":"Nuxt 3.13 is out - porting back some of the new features we're building for Nuxt 4!","publishedAt":"2024-08-22T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.694Z","url":"https://nuxt.com/blog/v3-13","media":[],"coverageCount":0},{"id":"rel_B-K-U_6kqAGRr5N8NIRTi","version":null,"type":"feature","title":"Introducing Nuxt Scripts","summary":"Nuxt Scripts provides better performance, privacy, security, and developer experience for third-party scripts.","titleGenerated":null,"titleShort":null,"content":"Nuxt Scripts provides better performance, privacy, security, and developer experience for third-party scripts.","publishedAt":"2024-08-20T00:00:00.000Z","fetchedAt":"2026-05-05T13:24:05.694Z","url":"https://nuxt.com/blog/nuxt-scripts","media":[],"coverageCount":0}],"pagination":{"nextCursor":"2024-08-20T00:00:00.000Z|2026-05-05T13:24:05.694Z|rel_B-K-U_6kqAGRr5N8NIRTi","limit":20},"summaries":{"rolling":null,"monthly":[]}}