Puedes servir apps frontend estáticas con app.frontend() (o router.frontend()).
Esto es útil para herramientas frontend que generan archivos estáticos, como React con Vite, TanStack Router, Astro, Vue, Svelte, Angular, Solid, y otros.
Con estas herramientas, normalmente tienes un paso que construye el frontend, con un comando como:
npmrunbuild
Eso generaría un directorio como ./dist/ con tus archivos frontend.
Puedes usar app.frontend() para servir ese directorio siguiendo las convenciones necesarias para estos frameworks frontend.
FastAPI revisa los path operations primero. Los archivos frontend se revisan solo si ninguna ruta normal coincide, por lo que tu API no se verá afectada.
Muchas apps frontend, incluyendo single-page apps (SPAs), usan routing del lado del cliente. Un path como /dashboard/settings podría no ser un archivo real pero el framework se encargaría de manejarlo.
Así, si se accede a esa URL directamente (en lugar de navegar a través de la app), el backend debería servir la app frontend desde index.html, para que el framework frontend pueda luego manejar el routing del lado del cliente.
FastAPI usa este fallback solo para requests GET y HEAD que parecen navegación del navegador. Los archivos faltantes como JavaScript, CSS, e imágenes siguen devolviendo 404.
Los requests con otros methods, como POST o PUT, a paths que solo coinciden con el fallback del frontend también devuelven 404. Los path operations regulares de FastAPI siguen teniendo mayor prioridad que las rutas del frontend.
Consejo
Por defecto, fallback tiene un valor de fallback="auto". En la mayoría de los casos no necesitarás especificar fallback. Lee más abajo para los detalles.
Esto es lo que querrías con muchas apps frontend que usan routing del lado del cliente, por ejemplo, React con TanStack Router, Vue, Angular, SvelteKit, o Solid.
Si hay un archivo 404.html en el directorio del frontend, los paths faltantes del frontend sirven ese archivo con código de estado 404.
De lo contrario, si hay un archivo index.html, los paths faltantes de navegación del navegador sirven index.html, que es lo que muchas apps frontend con routing del lado del cliente esperan.
Así, en la mayoría de los casos puedes usar app.frontend("/", directory="dist") sin especificar el argumento fallback.
Por defecto, app.frontend() verifica que el directorio exista cuando se crea la app.
Esto ayuda a detectar errores de configuración temprano. Por ejemplo, si el directorio de salida del build del frontend falta, FastAPI lanzará un error al iniciar.
Si tus archivos frontend se crean después, por ejemplo por un paso de build separado después de que se crea el objeto app, establece check_dir=False:
Con check_dir=False, FastAPI no verificará el directorio cuando se crea la app. Si el directorio configurado sigue faltando cuando se maneja un request, FastAPI lanzará un error en ese momento.
app.frontend() sirve archivos ya generados por tu build del frontend.
No ejecuta server-side rendering. Es para frameworks frontend que generan archivos estáticos, no para frameworks que necesitan rendering dinámico en el servidor para cada request.