---
title: "Ecosystem"
description: "Which Nuxt modules, Convex components and agent tools nuxt-backend ships, supports, plans or leaves out, and why."
canonical_url: "https://nuxt-backend.dev/docs/reference/ecosystem"
---
# Ecosystem

> Which Nuxt modules, Convex components and agent tools nuxt-backend ships, supports, plans or leaves out, and why.

`nuxt-backend` is built from community packages, and it works with more of them than it installs. This page says where each one stands. The package's CI reads the tables below: a component that ships without its row, or a row that claims a package the manifest does not have, fails the build.

<table>
<thead>
  <tr>
    <th>
      Status
    </th>
    
    <th>
      Meaning
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        Shipped
      </strong>
    </td>
    
    <td>
      Installed and wired by this package. You add nothing.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Bundled
      </strong>
    </td>
    
    <td>
      Arrives through a shipped package. It works, but this package exposes no options of its own for it.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Supported
      </strong>
    </td>
    
    <td>
      Works when you add it: the package already sets what it needs.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Planned
      </strong>
    </td>
    
    <td>
      On the roadmap for the release named in the notes.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Recipe
      </strong>
    </td>
    
    <td>
      Works beside the package with a little code of your own. There is no wrapper.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Not planned
      </strong>
    </td>
    
    <td>
      Left out on purpose, for the reason given.
    </td>
  </tr>
</tbody>
</table>

## Nuxt modules

<table>
<thead>
  <tr>
    <th>
      Package
    </th>
    
    <th>
      Status
    </th>
    
    <th>
      Surface
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        nuxt-convex-module
      </code>
    </td>
    
    <td>
      Shipped
    </td>
    
    <td>
      The Convex client, SSR, the auth plumbing, <code>
        useQuery
      </code>
      
       and the other core composables
    </td>
    
    <td>
      Installed and configured for you; its own <a href="https://nuxt-convex-module.dev" rel="nofollow">
        stability policy
      </a>
      
       covers the core composables
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        nuxt-security
      </code>
    </td>
    
    <td>
      Shipped
    </td>
    
    <td>
      CSP entries for the backend URL, relaxed rules on <code>
        /mcp/**
      </code>
    </td>
    
    <td>
      Set through the base module's Nitro plugin
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @nuxtjs/mcp-toolkit
      </code>
    </td>
    
    <td>
      Shipped
    </td>
    
    <td>
      The OAuth-protected <a href="https://nuxt-backend.dev/docs/agents/mcp">
        agent endpoint
      </a>
    </td>
    
    <td>
      Experimental, like the endpoint
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @nuxt/devtools
      </code>
    </td>
    
    <td>
      Supported
    </td>
    
    <td>
      The <a href="https://nuxt-backend.dev/docs/start/develop/devtools">
        Backend tab
      </a>
      
       with seven tabs, an activity log among them
    </td>
    
    <td>
      Nuxt enables DevTools in dev; the tab registers itself
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @nuxtjs/robots
      </code>
    </td>
    
    <td>
      Supported
    </td>
    
    <td>
      The private <a href="https://nuxt-backend.dev/docs/ui/pages">
        module pages
      </a>
      
       carry <code>
        robots: false
      </code>
    </td>
    
    <td>
      They get an <code>
        X-Robots-Tag
      </code>
      
       header and a <code>
        noindex
      </code>
      
       meta tag
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @nuxtjs/sitemap
      </code>
    </td>
    
    <td>
      Supported
    </td>
    
    <td>
      The same pages carry <code>
        sitemap: false
      </code>
    </td>
    
    <td>
      They never appear in the sitemap
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @nuxt/eslint
      </code>
    </td>
    
    <td>
      Supported
    </td>
    
    <td>
      <a href="https://nuxt-backend.dev/docs/ship/test/linting">
        <code>
          nuxt-backend/eslint
        </code>
      </a>
      
       adds the Convex rules
    </td>
    
    <td>
      <code>
        export default withNuxt(backendEslint())
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @nuxt/ui
      </code>
    </td>
    
    <td>
      Supported
    </td>
    
    <td>
      The packaged components take Nuxt UI's neutrals, borders, card radius and dark mode
    </td>
    
    <td>
      No setup: the module <a href="https://nuxt-backend.dev/docs/ui/customize/theming#on-nuxt-ui-and-color-mode">
        bridges the tokens
      </a>
      
       when Nuxt UI is installed
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @nuxtjs/color-mode
      </code>
    </td>
    
    <td>
      Supported
    </td>
    
    <td>
      The packaged components follow the mode it sets, not the OS setting
    </td>
    
    <td>
      No setup: the module sets <code>
        color-scheme
      </code>
      
       on the component roots from its class
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @nuxt/image
      </code>
    </td>
    
    <td>
      Planned
    </td>
    
    <td>
      A provider for backend file storage
    </td>
    
    <td>
      0.2.0
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @nuxt/test-utils
      </code>
    </td>
    
    <td>
      Planned
    </td>
    
    <td>
      Helpers for testing pages against a backend
    </td>
    
    <td>
      0.2.0
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @nuxtjs/i18n
      </code>
    </td>
    
    <td>
      Planned
    </td>
    
    <td>
      The packaged labels, translated
    </td>
    
    <td>
      0.2.0; today, <code>
        appConfig.backend.labels
      </code>
      
       sets every string
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        nuxt-auth-utils
      </code>
    </td>
    
    <td>
      Not planned
    </td>
    
    <td>
      
    </td>
    
    <td>
      Passwordless Better Auth is the foundation, and one auth layer is enough
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @sidebase/nuxt-auth
      </code>
    </td>
    
    <td>
      Not planned
    </td>
    
    <td>
      
    </td>
    
    <td>
      Same reason
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @clerk/nuxt
      </code>
    </td>
    
    <td>
      Not planned
    </td>
    
    <td>
      
    </td>
    
    <td>
      A hosted identity provider replaces what the package owns
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @nuxthub/core
      </code>
    </td>
    
    <td>
      Not planned
    </td>
    
    <td>
      
    </td>
    
    <td>
      A different platform: the backend here is Convex
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        convex-nuxt
      </code>
    </td>
    
    <td>
      Not planned
    </td>
    
    <td>
      
    </td>
    
    <td>
      A thinner, client-only Convex module; use it instead when you want bindings without the SaaS layer
    </td>
  </tr>
</tbody>
</table>

## Convex components

<table>
<thead>
  <tr>
    <th>
      Package
    </th>
    
    <th>
      Status
    </th>
    
    <th>
      Surface
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        @convex-dev/better-auth
      </code>
    </td>
    
    <td>
      Shipped
    </td>
    
    <td>
      Auth: passkeys, email codes, workspaces, the agent OAuth provider
    </td>
    
    <td>
      Its adapter and auth tables live in the <code>
        backend
      </code>
      
       component; it is not mounted as a component of its own
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/resend
      </code>
    </td>
    
    <td>
      Shipped
    </td>
    
    <td>
      Transactional email with delivery tracking
    </td>
    
    <td>
      Mounted inside the <code>
        backend
      </code>
      
       component
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/polar
      </code>
    </td>
    
    <td>
      Shipped
    </td>
    
    <td>
      Subscriptions, credits, gifts, the catalog as code
    </td>
    
    <td>
      
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/rate-limiter
      </code>
    </td>
    
    <td>
      Shipped
    </td>
    
    <td>
      Sign-in, billing and AI limits
    </td>
    
    <td>
      
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/workflow
      </code>
    </td>
    
    <td>
      Shipped
    </td>
    
    <td>
      <a href="https://nuxt-backend.dev/docs/data/jobs/workflows">
        Durable workflows
      </a>
      
       and email sequences
    </td>
    
    <td>
      
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/migrations
      </code>
    </td>
    
    <td>
      Shipped
    </td>
    
    <td>
      <a href="https://nuxt-backend.dev/docs/data/jobs/migrations">
        Online migrations
      </a>
    </td>
    
    <td>
      
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/aggregate
      </code>
    </td>
    
    <td>
      Shipped
    </td>
    
    <td>
      <a href="https://nuxt-backend.dev/docs/data/aggregates">
        Counts and sums
      </a>
    </td>
    
    <td>
      
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/persistent-text-streaming
      </code>
    </td>
    
    <td>
      Shipped
    </td>
    
    <td>
      <a href="https://nuxt-backend.dev/docs/ai/streaming">
        Streamed AI responses
      </a>
    </td>
    
    <td>
      
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/workpool
      </code>
    </td>
    
    <td>
      Bundled
    </td>
    
    <td>
      Runs the workflow and email queues, through <code>
        @convex-dev/workflow
      </code>
      
       and <code>
        @convex-dev/resend
      </code>
    </td>
    
    <td>
      A wrapper of its own is planned for 0.2.0
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/batch-worker
      </code>
    </td>
    
    <td>
      Bundled
    </td>
    
    <td>
      Batches work for the aggregate, rate-limiter and workpool components
    </td>
    
    <td>
      
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/presence
      </code>
    </td>
    
    <td>
      Planned
    </td>
    
    <td>
      <code>
        usePresence
      </code>
    </td>
    
    <td>
      0.2.0
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/sharded-counter
      </code>
    </td>
    
    <td>
      Planned
    </td>
    
    <td>
      High-write counters
    </td>
    
    <td>
      0.2.0
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/action-cache
      </code>
    </td>
    
    <td>
      Planned
    </td>
    
    <td>
      Cached action results
    </td>
    
    <td>
      0.2.0
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/crons
      </code>
    </td>
    
    <td>
      Planned
    </td>
    
    <td>
      Crons registered at runtime
    </td>
    
    <td>
      0.2.0
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/agent
      </code>
    </td>
    
    <td>
      Planned
    </td>
    
    <td>
      AI agents with threads and tools
    </td>
    
    <td>
      0.3.0, with RAG
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/rag
      </code>
    </td>
    
    <td>
      Planned
    </td>
    
    <td>
      Retrieval over your data
    </td>
    
    <td>
      0.3.0
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/r2
      </code>
    </td>
    
    <td>
      Recipe
    </td>
    
    <td>
      Files in Cloudflare R2
    </td>
    
    <td>
      Mount it beside the <code>
        backend
      </code>
      
       component
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/prosemirror-sync
      </code>
    </td>
    
    <td>
      Recipe
    </td>
    
    <td>
      Collaborative editing
    </td>
    
    <td>
      
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/geospatial
      </code>
    </td>
    
    <td>
      Recipe
    </td>
    
    <td>
      Location queries
    </td>
    
    <td>
      
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/twilio
      </code>
    </td>
    
    <td>
      Recipe
    </td>
    
    <td>
      SMS
    </td>
    
    <td>
      
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/expo-push-notifications
      </code>
    </td>
    
    <td>
      Recipe
    </td>
    
    <td>
      Push notifications
    </td>
    
    <td>
      
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/launchdarkly
      </code>
    </td>
    
    <td>
      Recipe
    </td>
    
    <td>
      Feature flags from LaunchDarkly
    </td>
    
    <td>
      <a href="https://nuxt-backend.dev/docs/billing/feature-gating">
        Feature gates
      </a>
      
       cover plan-based flags
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/table-history
      </code>
    </td>
    
    <td>
      Recipe
    </td>
    
    <td>
      Row history
    </td>
    
    <td>
      
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/action-retrier
      </code>
    </td>
    
    <td>
      Recipe
    </td>
    
    <td>
      Retries for flaky actions
    </td>
    
    <td>
      
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/static-hosting
      </code>
    </td>
    
    <td>
      Recipe
    </td>
    
    <td>
      Static files served by Convex
    </td>
    
    <td>
      Nuxt serves the app here
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/ai-sdk-provider
      </code>
    </td>
    
    <td>
      Recipe
    </td>
    
    <td>
      The AI SDK against Convex
    </td>
    
    <td>
      
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/stripe
      </code>
    </td>
    
    <td>
      Not planned
    </td>
    
    <td>
      
    </td>
    
    <td>
      Billing is built on one provider's meters and benefits
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/workos-authkit
      </code>
    </td>
    
    <td>
      Not planned
    </td>
    
    <td>
      
    </td>
    
    <td>
      A hosted identity provider replaces the auth the package owns
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/auth
      </code>
    </td>
    
    <td>
      Not planned
    </td>
    
    <td>
      
    </td>
    
    <td>
      Better Auth is the auth layer
    </td>
  </tr>
</tbody>
</table>

## Convex tooling

<table>
<thead>
  <tr>
    <th>
      Package
    </th>
    
    <th>
      Status
    </th>
    
    <th>
      Surface
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        convex
      </code>
    </td>
    
    <td>
      Shipped
    </td>
    
    <td>
      The peer dependency and the CLI
    </td>
    
    <td>
      <code>
        npx nuxt-backend dev
      </code>
      
       runs it for you
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        convex-helpers
      </code>
    </td>
    
    <td>
      Shipped
    </td>
    
    <td>
      The custom functions behind <a href="https://nuxt-backend.dev/docs/auth/access/functions">
        <code>
          createFunctions
        </code>
      </a>
      
      , and the triggers behind <a href="https://nuxt-backend.dev/docs/data/aggregates">
        aggregates
      </a>
    </td>
    
    <td>
      
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        convex-test
      </code>
    </td>
    
    <td>
      Shipped
    </td>
    
    <td>
      <a href="https://nuxt-backend.dev/docs/ship/test">
        <code>
          nuxt-backend/test
        </code>
      </a>
      
       registers the component
    </td>
    
    <td>
      An optional peer
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        @convex-dev/eslint-plugin
      </code>
    </td>
    
    <td>
      Shipped
    </td>
    
    <td>
      <a href="https://nuxt-backend.dev/docs/ship/test/linting">
        <code>
          nuxt-backend/eslint
        </code>
      </a>
    </td>
    
    <td>
      An optional peer
    </td>
  </tr>
</tbody>
</table>

The rest of Convex's tooling works as it does anywhere:

- **The dashboard.** The DevTools tab links to it for a cloud deployment.
- **The MCP server.** `npx convex mcp start` lets an agent read the deployment. `init` writes it into `.mcp.json`.
- **The AI guidelines.** `npx convex ai-files install` writes Convex's own rules for agents.
- **Local and self-hosted backends.** An anonymous local deployment is enough for development, and a self-hosted URL works through the Convex CLI's own variables.

## Agent tooling

<table>
<thead>
  <tr>
    <th>
      Package
    </th>
    
    <th>
      Status
    </th>
    
    <th>
      Surface
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        skills
      </code>
    </td>
    
    <td>
      Supported
    </td>
    
    <td>
      The <a href="https://nuxt-backend.dev/docs/agents/coding">
        <code>
          nuxt-backend
        </code>
        
         skill
      </a>
    </td>
    
    <td>
      <code>
        npx skills add https://nuxt-backend.dev -s nuxt-backend
      </code>
    </td>
  </tr>
</tbody>
</table>

Beyond the skill, `init` writes an `AGENTS.md` section and `.mcp.json` for coding agents, and this site publishes [`llms.txt`](https://nuxt-backend.dev/llms.txt).

## Templates

Apps start from Nuxt's own `create nuxt` with a [template](https://nuxt-backend.dev/docs/start/templates): the starter, the playground or the advanced example. Once the package is listed on [nuxt.com/modules](https://nuxt.com/modules), `create nuxt` and `npx nuxt module add backend` offer it by name.


## Sitemap

See the full [sitemap](https://nuxt-backend.dev/sitemap.md) for all pages.
