Troubleshooting

Uploads fail at a certain size

Almost always the reverse proxy rather than the app. nginx defaults client_max_body_size to 1 MB and rejects the request before it reaches LokalTransfer. Raise it to match NUXT_MAX_FILE_SIZE_MB, and raise the read timeouts while you are there — a slow upload of a large file takes time.

Sign-in appears to do nothing

The session cookie is being discarded. It is marked secure when NODE_ENV=production or when the request carries X-Forwarded-Proto: https, so a browser on HTTPS behind a proxy that does not forward the protocol will throw it away silently.

Configure the proxy to send that header.

NUXT_APP_URL is still the default. Every download and magic link is built from it. Set it to the address recipients actually reach and restart.

The interface is in the wrong language

NUXT_LANGUAGE sets both the interface and outbound mail, and takes one of en, de, fr, es, it, nl, pl, uk, pt or cs — anything else falls back to English. If only the mail changed, you are on a version before 0.1.2 — earlier builds reached only the server-side half of that setting. Upgrade, or set NUXT_PUBLIC_LANGUAGE as well.

"self-signed certificate in certificate chain" at startup

NUXT_MYSQL_SSL=true against a local MySQL, which presents a self-signed certificate. Set it to false for a local database; keep it true only for a managed one that requires TLS.

Expired files are still on disk

The sweep runs every 15 minutes inside the app's own process. If the app is deployed somewhere that starts a process per request, the timer never fires. Run it as a long-lived process — node .output/server/index.mjs, or the Docker image.

Expiry itself still holds: an expired transfer is refused at download time regardless.

Colours are ignored

The hex is unquoted in .env, so # started a comment and the value is empty. Quote it, or write the hex without the #. See Colours.

Checking the instance

curl https://transfer.example.com/api/health

{"status":"ok"} means the app is up and the database is reachable. 503 means it is not — which is the more useful answer than a process that is listening but broken.