What happens
bun-plugin-stx 0.2.644 serve() reads imageWarmup, imageWarmupBindBudgetMs and imageWarmupGraceMs from the loaded stx config (stxConfig.imageWarmup ?? 'auto'), but StxConfig does not declare them. An app that sets imageWarmup: false in config/ui.ts with satisfies StxOptions fails type checking and has to widen the type by hand.
With 'auto', projectUsesImageBuiltins() scans every .stx file under the working directory except node_modules, dist, build, coverage and vendor. In a Stacks app that includes framework default views the app does not serve (the server logs them as "not served"), so a project that never uses <StxImage> still runs the warm-up. In production that warm-up can hold the bind for up to the 45 second default budget on a cold cache, and it writes AVIF/WebP derivatives of every raster under public/.
Seen in
stacksjs/the-settlers-iii-remake: after the converted original-sprite atlas grew to 1024x3178, CI's production server stopped binding within the browser check's 30 second readiness window (failed run). The app now sets imageWarmup: false with a widened config type (4cf422a); later runs pass.
Expected
StxConfig(or the typeconfig/ui.tssatisfies) declares the serve options it reads.- Auto-detection considers only templates the app serves (its views root and components), not unserved framework defaults.
- Optionally, image delivery accepts exclusions so game assets or pixel-art atlases under
public/are not re-encoded.