Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/friendly-poets-scream.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@uploadthing/react": minor
---

feat: add tanstack start ssr integration
5 changes: 5 additions & 0 deletions .changeset/pink-rabbits-shave.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"uploadthing": minor
---

feat: add `react-router` adapter
2 changes: 1 addition & 1 deletion .github/workflows/examples.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ jobs:
run: |
cat ./examples/${{ matrix.dir }}/package.json |
if grep --silent '"@playwright/test"'; then
pnpm playwright install --with-deps
pnpm exec playwright install --with-deps
fi

- name: Run E2E Tests (if exists)
Expand Down
1 change: 0 additions & 1 deletion .nvmrc

This file was deleted.

24 changes: 12 additions & 12 deletions docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,19 @@
"browserslist": "defaults, not ie <= 11",
"dependencies": {
"@algolia/autocomplete-core": "^1.18.0",
"@headlessui/react": "^2.2.0",
"@headlessui/tailwindcss": "^0.2.1",
"@headlessui/react": "^2.2.9",
"@headlessui/tailwindcss": "^0.2.2",
"@heroicons/react": "^2.2.0",
"@mdx-js/loader": "^3.1.0",
"@mdx-js/react": "^3.1.0",
"@next/mdx": "15.5.8",
"@next/mdx": "15.5.9",
"@scalar/api-reference-react": "^0.4.25",
"@shikijs/transformers": "^1.29.2",
"@sindresorhus/slugify": "^2.1.1",
"@tailwindcss/typography": "^0.5.15",
"@tailwindcss/typography": "^0.5.19",
"@types/mdast": "^4.0.4",
"@types/mdx": "^2.0.13",
"@types/node": "^22.10.0",
"@types/node": "^25.0.2",
"@types/react": "19.2.7",
"@types/react-dom": "19.2.3",
"@types/react-highlight-words": "^0.20.0",
Expand All @@ -36,14 +36,14 @@
"mdast-util-to-string": "^4.0.0",
"mdx-annotations": "^0.1.4",
"motion": "^12.0.6",
"next": "15.5.8",
"next": "15.5.9",
"next-sitemap": "^4.2.3",
"next-themes": "^0.4.6",
"next-view-transitions": "^0.3.4",
"next-view-transitions": "^0.3.5",
"npm-to-yarn": "^3.0.0",
"react": "19.2.2",
"react-dom": "19.2.2",
"react-highlight-words": "^0.20.0",
"react": "19.1.4",
"react-dom": "19.1.4",
"react-highlight-words": "^0.21.0",
"recma-import-images": "^0.0.3",
"remark": "^15.0.1",
"remark-gfm": "^4.0.0",
Expand All @@ -52,8 +52,8 @@
"sharp": "0.33.5",
"shiki": "^1.29.2",
"simple-functional-loader": "^1.2.1",
"tailwindcss": "^3.4.16",
"typescript": "5.8.3",
"tailwindcss": "^4.1.18",
"typescript": "5.9.3",
"unified": "^11.0.5",
"unist-util-filter": "^5.0.1",
"unist-util-visit": "^5.0.0",
Expand Down
31 changes: 17 additions & 14 deletions docs/src/app/(docs)/v7/page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -110,11 +110,12 @@ The `genUploader` function now returns an object with two functions,
`uploadFiles` and `createUpload`. To migrate:

```ts
import { genUploader } from 'uploadthing/client'
import type { UploadRouter } from '~/uploadthing/router'
import { genUploader } from "uploadthing/client";

const uploadFiles = genUploader<UploadRouter>() // [!code --]
const { uploadFiles, createUpload } = genUploader<UploadRouter>() // [!code ++]
import type { UploadRouter } from "~/uploadthing/router";

const uploadFiles = genUploader<UploadRouter>(); // [!code --]
const { uploadFiles, createUpload } = genUploader<UploadRouter>(); // [!code ++]
```

## Log levels has changed {{ tag: 'BREAKING' }}
Expand Down Expand Up @@ -193,18 +194,20 @@ The following were previously deprecated and have now been removed:
`generateUploadButton` and `generateUploadDropzone` instead.

```ts
import { generateComponent } from '@uploadthing/react' // [!code --]
const { UploadButton } = generateComponent() // [!code --]
import { generateUploadButton } from '@uploadthing/react' // [!code ++]
const UploadButton = generateUploadButton() // [!code ++]
// [!code --]
import { generateComponent, generateUploadButton } from "@uploadthing/react"; // [!code --]

const { UploadButton } = generateComponent();
// [!code ++]
const UploadButton = generateUploadButton(); // [!code ++]
```

- `@uploadthing/react/hooks` entrypoint has been removed. Use the main
entrypoint instead.

```ts
import { generateReactHelpers } from '@uploadthing/react/hooks' // [!code --]
import { generateReactHelpers } from '@uploadthing/react' // [!code ++]
import { generateReactHelpers } from "@uploadthing/react"; // [!code ++]
import { generateReactHelpers } from "@uploadthing/react/hooks"; // [!code --]
```

- `useUploadThing` hook result no longer returns `permittedFileInfo`. Use
Expand Down Expand Up @@ -295,12 +298,12 @@ as an environment variable in constant case prefixed with `UPLOADTHING`.

```ts
const api = new UTApi({
logLevel: 'Info',
})
logLevel: "Info",
});

// is the same as
process.env.UPLOADTHING_LOG_LEVEL = 'Info'
const api = new UTApi()
process.env.UPLOADTHING_LOG_LEVEL = "Info";
const api = new UTApi();
```

<Note>
Expand Down
12 changes: 6 additions & 6 deletions docs/src/app/blog/(posts)/incident-report-2024-09-10/page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -81,15 +81,15 @@ broke _all_ files. How is that? Well, I hid a bit of the code from that first
snippet.

```ts
if (fileUrl?.includes('uploadthing-prod')) {
if (fileUrl?.includes("uploadthing-prod")) {
// <-- Pay attention here
const newUrl = fileUrl.replace(
'uploadthing-prod.s3',
'uploadthing-prod-sea1.s3',
)
"uploadthing-prod.s3",
"uploadthing-prod-sea1.s3",
);
// non-blocking update of KV
ctx.waitUntil(env.UTFS_KV.put(cacheKey, newUrl))
return newUrl
ctx.waitUntil(env.UTFS_KV.put(cacheKey, newUrl));
return newUrl;
}
```

Expand Down
10 changes: 5 additions & 5 deletions examples/backend-adapters/client-react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@
},
"dependencies": {
"@uploadthing/react": "7.3.3",
"react": "19.2.2",
"react-dom": "19.2.2",
"react": "19.1.4",
"react-dom": "19.1.4",
"uploadthing": "7.7.4"
},
"devDependencies": {
"@types/react": "19.2.7",
"@types/react-dom": "19.2.3",
"@vitejs/plugin-react-swc": "^3.7.2",
"typescript": "5.8.3",
"vite": "^6.3.4"
"@vitejs/plugin-react-swc": "^4.2.2",
"typescript": "5.9.3",
"vite": "7.2.7"
}
}
4 changes: 2 additions & 2 deletions examples/backend-adapters/client-vanilla/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"uploadthing": "7.7.4"
},
"devDependencies": {
"typescript": "5.8.3",
"vite": "^6.3.4"
"typescript": "5.9.3",
"vite": "7.2.7"
}
}
6 changes: 3 additions & 3 deletions examples/backend-adapters/client-vue/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@
"vue": "^3.4.21"
},
"devDependencies": {
"@vitejs/plugin-vue": "^5.2.1",
"typescript": "5.8.3",
"vite": "^6.3.4",
"@vitejs/plugin-vue": "^6.0.3",
"typescript": "5.9.3",
"vite": "7.2.7",
"vue-tsc": "^2.0.6"
}
}
2 changes: 1 addition & 1 deletion examples/backend-adapters/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"@playwright/test": "1.52.0",
"@uploadthing/react": "7.3.3",
"concurrently": "^9.1.2",
"typescript": "5.8.3",
"typescript": "5.9.3",
"uploadthing": "7.7.4"
}
}
36 changes: 17 additions & 19 deletions examples/backend-adapters/server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,37 +6,35 @@
"build": "tsc",
"dev:cf": "wrangler dev --port 3003",
"dev:elysia": "NODE_ENV=development bun run --hot src/elysia.ts",
"dev:express": "NODE_ENV=development tsx watch src/express.ts",
"dev:fastify": "NODE_ENV=development tsx watch src/fastify.ts",
"dev:hono": "NODE_ENV=development tsx watch src/hono.ts",
"dev:express": "NODE_ENV=development node --env-file .env --watch src/express.ts",
"dev:fastify": "NODE_ENV=development node --env-file .env --watch src/fastify.ts",
"dev:hono": "NODE_ENV=development node --env-file .env --watch src/hono.ts",
"dev:h3": "NODE_ENV=development listhen -w src/h3.ts",
"dev:effect": "NODE_ENV=development PORT=3003 tsx watch src/effect-platform.ts"
"dev:effect": "NODE_ENV=development PORT=3003 node --env-file .env --watch src/effect-platform.ts"
},
"dependencies": {
"@effect/platform": "0.90.3",
"@effect/platform-node": "0.96.0",
"@effect/platform": "0.93.8",
"@effect/platform-node": "0.103.0",
"@elysiajs/cors": "^1.2.0",
"@fastify/cors": "^10.0.1",
"@hono/node-server": "^1.13.7",
"@sinclair/typebox": "^0.34.13",
"cors": "^2.8.5",
"dotenv": "^16.4.5",
"effect": "3.17.7",
"elysia": "^1.2.9",
"express": "^5.0.1",
"fastify": "^5.2.0",
"effect": "3.19.12",
"elysia": "^1.4.19",
"express": "^5.2.1",
"fastify": "^5.6.2",
"h3": "^1.13.0",
"hono": "^4.6.15",
"hono": "^4.11.0",
"listhen": "^1.9.0",
"uploadthing": "7.7.4"
},
"devDependencies": {
"@cloudflare/workers-types": "^4.20241230.0",
"@types/bun": "^1.2.5",
"@types/cors": "^2.8.17",
"@types/express": "^5.0.0",
"tsx": "^4.19.2",
"typescript": "5.8.3",
"wrangler": "^3.99.0"
"@cloudflare/workers-types": "^4.20251213.0",
"@types/bun": "^1.3.4",
"@types/cors": "^2.8.19",
"@types/express": "^5.0.6",
"typescript": "5.9.3",
"wrangler": "^4.54.0"
}
}
2 changes: 1 addition & 1 deletion examples/backend-adapters/server/src/cf-worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import { createRouteHandler } from "uploadthing/server";

import { uploadRouter } from "./router";
import { uploadRouter } from "./router.ts";

export interface Env {
UPLOADTHING_TOKEN: string;
Expand Down
11 changes: 7 additions & 4 deletions examples/backend-adapters/server/src/custom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import { Effect } from "effect";
import { createBuilder, makeAdapterHandler } from "uploadthing/server";

type AdapterArgs = {
req: BunRequest;
server: Server;
req: BunRequest<string>;
server: Server<unknown>;
};
const f = createBuilder<AdapterArgs>();

Expand All @@ -34,9 +34,12 @@ const router = {
}),
};

const requestHandler = makeAdapterHandler<[BunRequest, Server], AdapterArgs>(
const requestHandler = makeAdapterHandler<
[BunRequest<string>, Server<unknown>],
AdapterArgs
>(
(req, server) => Effect.succeed({ req, server }),
(req) => Effect.succeed(req),
(req) => Effect.succeed(req as Request),
{
router,
},
Expand Down
4 changes: 1 addition & 3 deletions examples/backend-adapters/server/src/effect-platform.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import "dotenv/config";

import { createServer } from "node:http";
import {
FetchHttpClient,
Expand All @@ -15,7 +13,7 @@ import { Config, Effect, Layer, Logger, LogLevel } from "effect";

import { createRouteHandler } from "uploadthing/effect-platform";

import { uploadRouter } from "./router";
import { uploadRouter } from "./router.ts";

const uploadthingRouter = createRouteHandler({
router: uploadRouter,
Expand Down
2 changes: 1 addition & 1 deletion examples/backend-adapters/server/src/elysia.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { Elysia } from "elysia";

import { createRouteHandler } from "uploadthing/server";

import { uploadRouter } from "./router";
import { uploadRouter } from "./router.ts";

const handler = createRouteHandler({
router: uploadRouter,
Expand Down
5 changes: 1 addition & 4 deletions examples/backend-adapters/server/src/express.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
import cors from "cors";

import "dotenv/config";

import express from "express";

import { createRouteHandler } from "uploadthing/express";

import { uploadRouter } from "./router";
import { uploadRouter } from "./router.ts";

const app = express();
app.use(cors());
Expand Down
4 changes: 1 addition & 3 deletions examples/backend-adapters/server/src/fastify.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import "dotenv/config";

import cors from "@fastify/cors";
import Fastify from "fastify";

import { createRouteHandler } from "uploadthing/fastify";

import { uploadRouter } from "./router";
import { uploadRouter } from "./router.ts";

const fastify = Fastify({ logger: true });
fastify.register(cors);
Expand Down
4 changes: 1 addition & 3 deletions examples/backend-adapters/server/src/h3.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import "dotenv/config";

import {
appendCorsPreflightHeaders,
createApp,
Expand All @@ -9,7 +7,7 @@ import {

import { createRouteHandler } from "uploadthing/h3";

import { uploadRouter } from "./router";
import { uploadRouter } from "./router.ts";

const app = createApp({
onRequest(event) {
Expand Down
4 changes: 1 addition & 3 deletions examples/backend-adapters/server/src/hono.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import "dotenv/config";

import { serve } from "@hono/node-server";
import { Hono } from "hono";
import { cors } from "hono/cors";
import { logger } from "hono/logger";

import { createRouteHandler } from "uploadthing/server";

import { uploadRouter } from "./router";
import { uploadRouter } from "./router.ts";

const handler = createRouteHandler({
router: uploadRouter,
Expand Down
5 changes: 4 additions & 1 deletion examples/backend-adapters/server/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@
"target": "esnext",
"esModuleInterop": true,
"strict": true,
"module": "Preserve",
"module": "NodeNext",
"rewriteRelativeImportExtensions": true,
"erasableSyntaxOnly": true,
"verbatimModuleSyntax": true,
"skipLibCheck": true,
"outDir": "dist"
},
Expand Down
Loading
Loading