Skip to content

feat: add tanstack support#159

Closed
adriandlam wants to merge 97 commits intomainfrom
feat/tanstack-support
Closed

feat: add tanstack support#159
adriandlam wants to merge 97 commits intomainfrom
feat/tanstack-support

Conversation

@adriandlam
Copy link
Copy Markdown
Contributor

@adriandlam adriandlam commented Oct 31, 2025

adds tanstack support

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Oct 31, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
example-nextjs-workflow-turbopack Ready Ready Preview, Comment Dec 16, 2025 0:39am
example-nextjs-workflow-webpack Ready Ready Preview, Comment Dec 16, 2025 0:39am
example-workflow Ready Ready Preview, Comment Dec 16, 2025 0:39am
workbench-astro-workflow Ready Ready Preview, Comment Dec 16, 2025 0:39am
workbench-express-workflow Ready Ready Preview, Comment Dec 16, 2025 0:39am
workbench-fastify-workflow Ready Ready Preview, Comment Dec 16, 2025 0:39am
workbench-hono-workflow Ready Ready Preview, Comment Dec 16, 2025 0:39am
workbench-nitro-workflow Ready Ready Preview, Comment Dec 16, 2025 0:39am
workbench-nuxt-workflow Ready Ready Preview, Comment Dec 16, 2025 0:39am
workbench-sveltekit-workflow Ready Ready Preview, Comment Dec 16, 2025 0:39am
workbench-tanstack-start-workflow Ready Ready Preview, Comment Dec 16, 2025 0:39am
workbench-vite-workflow Ready Ready Preview, Comment Dec 16, 2025 0:39am
workflow-docs Ready Ready Preview, Comment Dec 16, 2025 0:39am

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Oct 31, 2025

🦋 Changeset detected

Latest commit: 4b9fdb5

The changes in this PR will be included in the next version bump.

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Comment thread workbench/tanstack/src/routes/api/hook.ts Outdated
Comment thread workbench/tanstack/src/routes/api/trigger.ts Outdated
Copy link
Copy Markdown
Contributor

@vercel vercel Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additional Suggestion:

The SvelteKitBuilder constructor hardcodes the dirs array, overriding any custom dirs value passed in the configuration. This prevents users from specifying custom workflow directories through the config interface.

View Details
📝 Patch Details
diff --git a/packages/sveltekit/src/builder.ts b/packages/sveltekit/src/builder.ts
index 531c754..02a7f7c 100644
--- a/packages/sveltekit/src/builder.ts
+++ b/packages/sveltekit/src/builder.ts
@@ -20,7 +20,7 @@ export class SvelteKitBuilder extends BaseBuilder {
 
     super({
       ...config,
-      dirs: ['workflows', 'src/workflows', 'routes', 'src/routes'],
+      dirs: config?.dirs ?? ['workflows', 'src/workflows', 'routes', 'src/routes'],
       buildTarget: 'sveltekit' as const,
       stepsBundlePath: '', // unused in base
       workflowsBundlePath: '', // unused in base

Analysis

SvelteKitBuilder Constructor Ignores Custom dirs Configuration

What fails: The dirs option passed to SvelteKitBuilder constructor is silently ignored because the hardcoded dirs array assignment in the super() call overrides any custom value from the config parameter.

How to trigger: Create a SvelteKitBuilder instance with custom directories:

const builder = new SvelteKitBuilder({ dirs: ['my-workflows', 'custom-dir'] });
// Expected: builder.config.dirs === ['my-workflows', 'custom-dir']
// Actual: builder.config.dirs === ['workflows', 'src/workflows', 'routes', 'src/routes']

What happens vs expected: When calling methods like getInputFiles() (inherited from BaseBuilder), only the hardcoded default directories are scanned, making the dirs configuration parameter non-functional. This prevents users from specifying custom workflow directories through the configuration interface.

Root cause: In packages/sveltekit/src/builder.ts line 23, the object property spread (...config) is immediately overridden by an explicit dirs assignment, since JavaScript property assignments that follow a spread operator override the spread's properties.

Fix: Use nullish coalescing to preserve custom dirs while providing defaults:

dirs: config?.dirs ?? ['workflows', 'src/workflows', 'routes', 'src/routes']
Fix on Vercel

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Jan 15, 2026

Deployment failed with the following error:

Creating the Deployment Timed Out.

@andrewdoro
Copy link
Copy Markdown

Hey I am interested in this. What's the status for this one?

@alandotcom
Copy link
Copy Markdown
Contributor

@andrewdoro I followed the nitro instructions, and it works just fine for me. The only issue I ran into is this #798

@cravend
Copy link
Copy Markdown

cravend commented Jan 23, 2026

Hey y'all! When I try to follow Nitro instructions for my TanStack Start app, I get the following error (the dev server hangs for 60sec and then spits this out):

bun dev
$ bun --bun vite dev
Discovering workflow directives 4570ms
Created intermediate workflow bundle 155ms
Created steps bundle 24ms
Creating webhook route
Creating manifest...
Created manifest with 9 step(s) and 1 workflow(s) 27ms
10:58:08 AM [vite] (client) Re-optimizing dependencies because lockfile has changed

  ROLLDOWN-VITE v7.3.1  ready in 6731 msLocal:   http://localhost:3000/
    Network: use --host to expose
    press h + enter to show help
2026-01-23 10:58:09 [sentry] Sentry initialized on server {}
470 | 	let id = "", i = size | 0;
471 | 	for (; i--;) id += "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[Math.random() * 64 | 0];
472 | 	return id;
473 | };
474 | function reviveInvokeError(e) {
475 | 	let error = Error(e.message || "Unknown invoke error");
                   ^
error: transport invoke timed out after 60000ms (data: {"type":"custom","event":"vite:invoke","data":{"name":"fetchModule","id":"send:w-829_oRXqv5OQVb6_n3V","data":["file:///Users/cravend/src/app/node_modules/.nitro/workflow/steps.mjs","\u0000virtual:",{"cached":false,"startOffset":2}]}})
      at reviveInvokeError (/Users/cravend/src/app/node_modules/.bun/rolldown-vite@7.3.1+909d114dfec580fe/node_modules/rolldown-vite/dist/node/module-runner.js:475:14)
      at invoke (/Users/cravend/src/app/node_modules/.bun/rolldown-vite@7.3.1+909d114dfec580fe/node_modules/rolldown-vite/dist/node/module-runner.js:549:11)

471 | 	for (; i--;) id += "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[Math.random() * 64 | 0];
472 | 	return id;
473 | };
474 | function reviveInvokeError(e) {
475 | 	let error = Error(e.message || "Unknown invoke error");
476 | 	return Object.assign(error, e, { runnerError: /* @__PURE__ */ Error("RunnerError") }), error;
                                                                     ^
error: RunnerError
      at reviveInvokeError (/Users/cravend/src/app/node_modules/.bun/rolldown-vite@7.3.1+909d114dfec580fe/node_modules/rolldown-vite/dist/node/module-runner.js:476:64)
      at invoke (/Users/cravend/src/app/node_modules/.bun/rolldown-vite@7.3.1+909d114dfec580fe/node_modules/rolldown-vite/dist/node/module-runner.js:549:11)

470 | 	let id = "", i = size | 0;
471 | 	for (; i--;) id += "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[Math.random() * 64 | 0];
472 | 	return id;
473 | };
474 | function reviveInvokeError(e) {
475 | 	let error = Error(e.message || "Unknown invoke error");
                   ^
error: transport invoke timed out after 60000ms (data: {"type":"custom","event":"vite:invoke","data":{"name":"fetchModule","id":"send:_-Nwpw0pTyO-lwNj5Wi3s","data":["/node_modules/.bun/@tanstack+start-server-core@1.154.12+cf7a91fbc0ade779/node_modules/@tanstack/start-server-core/dist/esm/constants.js","/Users/cravend/src/app/node_modules/.bun/@tanstack+start-server-core@1.154.12+cf7a91fbc0ade779/node_modules/@tanstack/start-server-core/dist/esm/index.js",{"cached":true,"startOffset":2}]}})
      at reviveInvokeError (/Users/cravend/src/app/node_modules/.bun/rolldown-vite@7.3.1+909d114dfec580fe/node_modules/rolldown-vite/dist/node/module-runner.js:475:14)
      at invoke (/Users/cravend/src/app/node_modules/.bun/rolldown-vite@7.3.1+909d114dfec580fe/node_modules/rolldown-vite/dist/node/module-runner.js:549:11)

471 | 	for (; i--;) id += "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[Math.random() * 64 | 0];
472 | 	return id;
473 | };
474 | function reviveInvokeError(e) {
475 | 	let error = Error(e.message || "Unknown invoke error");
476 | 	return Object.assign(error, e, { runnerError: /* @__PURE__ */ Error("RunnerError") }), error;
                                                                     ^
error: RunnerError
      at reviveInvokeError (/Users/cravend/src/app/node_modules/.bun/rolldown-vite@7.3.1+909d114dfec580fe/node_modules/rolldown-vite/dist/node/module-runner.js:476:64)
      at invoke (/Users/cravend/src/app/node_modules/.bun/rolldown-vite@7.3.1+909d114dfec580fe/node_modules/rolldown-vite/dist/node/module-runner.js:549:11)

any ideas? What's weird is the first time I ran it, it worked, and then I've been getting this every time since (even on fresh installs, delete all folders, etc). I'm on 4.0.1-beta.48.

@michael-han-dev michael-han-dev mentioned this pull request Jan 28, 2026
2 tasks
@VaguelySerious
Copy link
Copy Markdown
Member

VaguelySerious commented Apr 28, 2026

Closed in favor of #877

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants