@uploadthing/nuxt

7,842 5,354
Install
npm install @uploadthing/nuxt
Latest Version:7.1.10
Vue:3
License:MIT
Last Updated:Sep 30, 2026
Links: GitHub  ·  npm
Maintainer: t3dotgg

Nuxt UploadThing Module

npm version npm downloads License Nuxt

Nuxt module for getting started with UploadThing in your Nuxt app.

Quick Setup

  1. Add @uploadthing/nuxt and uploadthing dependencies to your project
# Using pnpm
pnpm add -D @uploadthing/nuxt
pnpm add uploadthing

# Using yarn
yarn add --dev @uploadthing/nuxt
yarn add uploadthing

# Using npm
npm install --save-dev @uploadthing/nuxt
npm install uploadthing

# Using bun
bun add -D @uploadthing/nuxt
bun add uploadthing
  1. Add @uploadthing/nuxt to the modules section of nuxt.config.ts
export default defineNuxtConfig({
  modules: ["@uploadthing/nuxt"],
});

That's it! You can now use @uploadthing/nuxt in your Nuxt app ✨

Usage

For full documentation, see the UploadThing docs

  1. Create an upload router in your app:
// server/uploadthing.ts
import { createUploadthing, UTFiles } from "uploadthing/h3";
import type { FileRouter } from "uploadthing/h3";

const f = createUploadthing();

/**
 * This is your Uploadthing file router. For more information:
 * @see https://docs.uploadthing.com/api-reference/server#file-routes
 */
export const uploadRouter = {
  videoAndImage: f({
    image: {
      maxFileSize: "4MB",
      maxFileCount: 4,
      acl: "public-read",
    },
    video: {
      maxFileSize: "16MB",
    },
  })
    .middleware(({ event, files }) => {
      //           ^? H3Event

      // Return some metadata to be stored with the file
      return { foo: "bar" as const };
    })
    .onUploadComplete(({ file, metadata }) => {
      //                       ^? { foo: "bar" }
      console.log("upload completed", file);
    }),
} satisfies FileRouter;

export type UploadRouter = typeof uploadRouter;
  1. Mount a component in your app and start uploading files:
<script setup lang="ts">
const alert = (msg: string) => {
  window.alert(msg);
};
</script>

<template>
  <div>Playground</div>
  <UploadButton
    :config="{
      endpoint: 'videoAndImage',
      onClientUploadComplete: (res) => {
        console.log(`onClientUploadComplete`, res);
        alert('Upload Completed');
      },
      onUploadBegin: () => {
        console.log(`onUploadBegin`);
      },
    }"
  />

  <UploadDropzone
    :config="{
      endpoint: 'videoAndImage',
      onClientUploadComplete: (res) => {
        console.log(`onClientUploadComplete`, res);
        alert('Upload Completed');
      },
      onUploadBegin: () => {
        console.log(`onUploadBegin`);
      },
    }"
  />
</template>

Wow, that was easy!

Development

From workspace root:

# Install dependencies
pnpm install

# Develop with the playground
pnpm dev

# Run ESLint
pnpm lint

Related Packages

Version History

Version Released Vue License
7.1.10 ^3.0 MIT
7.1.9 ^3.0 MIT
7.1.8 ^3.0 MIT
7.1.7 ^3.0 MIT
7.1.6 ^3.0 MIT
Pre-releases (69)
Version Released Vue License
7.1.9-canary.112f5c8 ^3.0 MIT
7.1.8-canary.07fd596 ^3.0 MIT
7.1.8-canary.b547b29 ^3.0 MIT
7.1.8-canary.35d7da3 ^3.0 MIT
7.1.8-canary.e657b69 ^3.0 MIT