Skip to content

[Start]: Binary encoding issue when prerendering Server Routes. #8746

Open

Description

@JulioGrajales

Which project does this relate to?

Start

Describe the bug

When implementing Takumi with tanstack start following their guide , they use a server route to generate images on demand, however since they are og images it's not necessary to regenerate each request, even with cache control the way they set up their og-images endpoint (open search params / dynamic params) is open to cache invalidation attacks (example of attacks) unless you validate the url on the server route.

the server routes docs don't mention much about how to prerender server routes effectively, researching more i found this discussion that tells to use the prerender option with configuration for specific pages

the option to prerender api routes is available in Astro and Next.js , so i implemented it, the image show correctly in dev, but when running build command the image can no longer be opened.

researching and comparing the two files (image rendered in dev and image rendered in build) it shows the image output at build has incorrect binary format:

image header in dev (it shows):
ÿØÿà �JFIF �� � � ÿÀ ���v�°� � ������ÿÛ C ��� ��� �
�

������������� $.' ",#��(7),01444�'9=82<.342ÿÛ C�

image header in build (it does not show):
�JFIF �� � � ���v� � � ������ C ��� ��� �
�

������������� $.' ",#��(7),01444�'9=82<.342 C�

i believe more documentation is necessary to instruct how to effectively prerender in tanstack start, especially when prerendering things like binary files (images, audio, etc.)

Complete minimal reproducer

https://github.com/JulioGrajales/tanstack-start-format-issue/

Steps to Reproduce the Bug

  1. download repo and install dependencies
  2. run dev command, visit http://localhost:3000/og-image.jpg to see the image correctly formatted
  3. you can check og-image[.]jpg.tsx file to see server api route
  4. run build command (prerender enabled), check ./dist/client/og-image.jpg file, it's corruped / incorrectly formatted

Expected behavior

Dev and build environments should produce the same files, if tanstack start is currently unable to prerender binary files in server routes it should be made clear in the documentation

Screenshots or Videos

Image Image

DOWNLOAD THE GENERATED IMAGES:
images-arch.zip

Platform

  • Router / Start Version: [e.g. 1.121.0]:
    "@tanstack/react-router": "^1.170.45",
    "@tanstack/react-router-devtools": "^1.167.2",
    "@tanstack/react-start": "^1.169.3",

  • OS: [e.g. macOS, Windows, Linux]
    Ubuntu WSL
    C:\Users\julio>wsl --version
    Versión de WSL: 2.7.13.0
    Versión de kernel: 6.18.33.2-2
    Versión de WSLg: 1.0.73.2
    Versión de MSRDC: 1.2.7214
    Versión de Direct3D: 1.611.1-81528511
    Versión de DXCore: 10.0.26100.1-240331-1435.ge-release
    Versión de Windows: 10.0.26200.9711

  • Browser: [e.g. Chrome, Safari, Firefox]
    Google Chrome

  • Browser Version: [e.g. 91.1]
    Version 155.0.8059.85 (Official Build) (64-bit)

  • Bundler: [e.g. vite]
    Vite

  • Bundler Version: [e.g. 7.0.0]
    "vite": "^8.3.4"

Additional context

No response

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions