H3Error: ENOENT: no such file or directory, open '/baserow/web-frontend/.output/public/

Are you using our SaaS platform (Baserow.io) or self-hosting Baserow?

Self-hosted

If you are self-hosting, what version of Baserow are you running?

v5.6.2

If you are self-hosting, which installation method do you use to run Baserow?

docker compose file

What are the exact steps to reproduce this issue?

  1. Configure Baserow with a simple reverse proxy (Caddy) and try logging in.

token-auth Response

{
  "error": true,
  "url": "https://mysite.obfuscatedintentionally.com/api/user/token-auth/",
  "statusCode": 404,
  "statusMessage": "Page not found: /api/user/token-auth/",
  "message": "Page not found: /api/user/token-auth/",
  "data": {
    "path": "/api/user/token-auth/"
  }
}

UI Response

Login not found.
The selected login wasn't found, maybe it has already been deleted.

Hey! :waving_hand:

From the error format, this looks like a Nuxt (frontend) 404 rather than a Django (backend) one. That means the API request is hitting the frontend server instead of reaching Django, and since the frontend doesn’t handle /api/ routes, it returns a 404.

The most common cause when running behind an external reverse proxy is a misconfigured PRIVATE_BACKEND_URL. This is the URL the Nuxt server-side rendering process uses to reach Django internally, it should point directly to the backend service, not go out through your external Caddy.

Could you share:

  1. Your docker-compose.yml (or at least the environment variables section)?
  2. Your Caddy config?

In the meantime, double-check that PRIVATE_BACKEND_URL is not set to your public URL. If you’re using docker-compose with separate services, it should point to the backend container directly (e.g. http://backend:8000). If you’re using the all-in-one image, just leave it unset and it will default correctly.