Getting started with Fastify

Added in v5.6

Package Setup

Install the package

npm install uploadthing

Add env variables

UPLOADTHING_TOKEN=... # A token for interacting with the SDK

Set Up A FileRouter

Creating your first FileRoute

All files uploaded to uploadthing are associated with a FileRoute. The following is a very minimalistic example, with a single FileRoute "imageUploader". Think of a FileRoute similar to an endpoint, it has:

  • Permitted types ["image", "video", etc]
  • Max file size
  • (Optional) middleware to authenticate and tag requests
  • onUploadComplete callback for when uploads are completed

To get full insight into what you can do with the FileRoutes, please refer to the File Router API.

src/uploadthing.ts

import { createUploadthing, type FileRouter } from "uploadthing/fastify";

const f = createUploadthing();

export const uploadRouter = {
  imageUploader: f({
    image: {
      maxFileSize: "4MB",
      maxFileCount: 4,
    },
  }).onUploadComplete((data) => {
    console.log("upload completed", data);
  }),
} satisfies FileRouter;

export type OurFileRouter = typeof uploadRouter;

Register the UploadThing plugin

src/index.ts

import Fastify from "fastify";

import { createRouteHandler } from "uploadthing/fastify";

import { uploadRouter } from "./router";

const fastify = Fastify({ logger: true });

fastify
  /** ... */
  .register(createRouteHandler, {
    router: uploadRouter,
    config: { ... },
  });

See configuration options in server API reference

Use the FileRouter in your app

Client side usage differs ever so slightly from the fullstack framework setups when using a separate backend server. You'll need to set the URL of your server when you generate the components and helpers.

import { generateUploadButton } from "@uploadthing/react";

export const UploadButton = generateUploadButton({
  url: "https://your-server.com/api/uploadthing",
});
// ...

For the remaining usage, please refer to client side examples of the fullstack framework guides:

or check out the full API reference:

Was this page helpful?