App Builder: Node.js version mismatch between preview/build and production

I am developing a Next.js App Builder app locally, then uploading its source to a self-hosted Teable instance. I would like to understand the supported way to keep the Node.js version consistent across local development, preview, build, and the published app.

Observed behavior

In a recorded probe on September 23, 2026, the sandbox initially provided Node.js 24.19.0, while the published app reported Node.js 22.23.1.

We then explicitly tested this package.json configuration:

{
  "engines": { "node": "26.9.0" },
  "pnpm": {
    "executionEnv": { "nodeVersion": "26.9.0" }
  }
}

With Next.js 16.2.9, the results were:

Measurement Node.js version
Preview: server-side process.version 26.9.0
Remote build: process.version recorded during the build 26.9.0
Published app: server-side process.version 22.23.1

The published app returned the new deployment marker, so this was not simply an old deployment. We distinguished the build-time JSON file from the live server response: a file generated during the build does not prove which Node version is serving the published app.

These are results from that test, not a claim that every Teable deployment currently uses those versions. We subsequently pinned local development and preview/build to 22.23.1 to match that production runtime. Node 26 was a probe; the main question is version consistency, not a requirement to support Node 26.

What we found while investigating

The public deployment configuration separates SANDBOX_OPENSANDBOX_IMAGE from APP_RUNTIME_DEFAULT_IMAGE:
Teable deployment configuration

We also inspected the published image ghcr.io/teableio/teable-app-runtime:20260919T055651Z. Its image configuration declares NODE_VERSION=22.23.2. This is a separate inspection of an official image, not the version measured in our September 23 deployment.

The entrypoint in that image defaults to node server.js when a standalone server.js exists, and otherwise to pnpm start, unless APP_START_COMMAND overrides it. That appears to explain why pnpm.executionEnv.nodeVersion affects preview/build but does not select the Node executable for the standalone production path.

The pnpm 9 documentation says this setting applies to pnpm run and pnpm node:
pnpm 9 runtime configuration

Investigation conclusion and requested version alignment

The evidence points to two independently selected Node runtimes: preview/build can use the Node version selected by pnpm inside the sandbox, while the published standalone app starts with the Node executable supplied by the separate App Runtime image. Updating the app’s package.json therefore does not, by itself, align the production runtime.

Please align the actual Node.js versions used by App Builder preview, remote build, and published apps. The same app deployment should use the same supported Node version, ideally pinned to the same exact major.minor.patch version across all three stages.

Specifically, the requested behavior is:

  • The default sandbox preview/build runtime and production App Runtime should have a coordinated Node version, with a documented version that developers can also use locally.
  • If per-app Node selection is supported, it should apply consistently to preview, build, and production. An unsupported production version should produce an explicit validation error instead of successfully building with one version and silently running with another.
  • Both the build-time Node version and the live production Node version should be visible. A generated build metadata file alone is insufficient.

For example, in the tested deployment whose production runtime was 22.23.1, local development, preview, and remote build should also run on 22.23.1. If the platform moves production to a supported Node 24 release, the other stages should move to the same release. This request is about aligning versions, not forcing Node 26 or assuming that every current deployment runs our historical versions.

The practical concern is that version-specific Node APIs or dependencies may work in preview and pass the build, but behave differently after publication. App developers without infrastructure-admin access cannot reliably resolve that mismatch by changing package.json alone.

Questions

  1. Can Teable align these Node versions by default, and is the current mismatch expected or something that should be fixed?
  2. What is the supported way to choose or discover the production Node version? Is there a per-app option, or must an administrator change the runtime image?
  3. Until the versions are aligned by the platform, is pinning local development and preview/build to the observed production version the recommended approach?

Thank you for confirming the supported configuration and the recommended way to keep the versions aligned.

Hi @qixi , Thanks for the thorough investigation and feedback. It saved us a lot of time.

Your analysis is correct. This comes down to the maintenance cycle of the runtime image: the sandbox has already moved to a newer Node version, but the app runtime image hasn’t caught up yet, which is why preview/build and production differ. We’ll upgrade the runtime image to bring them back in line.

Thanks again, and feel free to post here if you run into anything else.

Thanks for confirming, @Leo. Where is the best place to track this runtime image update? Is there a public issue/PR or an estimated release date?

Once it is available, could you share the teable-app-runtime image tag, the corresponding Teable release (if applicable), and the exact Node.js version that preview/build and production will align on?

For self-hosted deployments, could you also clarify the rollout steps: whether administrators need to update APP_RUNTIME_DEFAULT_IMAGE and restart/recreate any services, and whether existing published apps must be redeployed to pick up the new runtime?

An update in this thread when the fixed image is released would be very helpful. Thank you!

Hi qixi,

Thanks for the detailed investigation. To help us understand your requirements alongside the runtime image update Leo mentioned, could you clarify a few things?

Does your app require a particular Node.js version—for example, because of a dependency or a Node API—or are you mainly checking consistency between preview, build, and production? Have you encountered any actual errors or differences in behavior?

What led you to select Node 26.9.0? Would aligning all environments on a supported Node.js LTS version meet your needs, or do you specifically need to choose the runtime version per app?

This will help us distinguish the environment consistency issue from a requirement for per-app Node.js version selection, and provide guidance that fits your setup.

Hi @Bieber, thanks for following up. My local development environment currently uses Node.js 26.x, which is why that version appeared in my testing. I do not need Teable to use that particular version, and I am happy to adjust my local environment to follow Teable’s default supported Node.js version. I do not need per-app runtime version selection.

While developing a custom app, I noticed that Teable’s preview and production environments were running different Node.js versions. That mismatch is my main concern. I would like preview, build, and production to use a consistent version, so that code or dependencies that work in preview do not run into subtle compatibility issues after publication.

Following Teable’s default version is fine for me; I just want the preview and production environments to stay aligned. Thank you!

Got it, We will make Node JS and other dependent environments keep consistent with the development environment in the next version. Thank you for your feedback and look forward to your sharing more of your usage scenarios and experiences.

3 Likes

Hi @Bieber, just following up on the environment consistency fix you mentioned. I noticed there have been several Teable releases over the past few days. Has the fix to align Node.js versions between App Builder preview/build and production been included in any of them?

If it has, could you point me to the relevant release or runtime image tag and let me know whether self-hosted deployments need any additional steps to apply it? If it is still in progress, is there an updated expected release timeframe?

Thanks for your help!