Off unless you ask for it. Set LFSX_ANONYMOUS_READ=true to turn it on.
With it on, a request carrying no token is resolved against the forge rather than refused: an unauthenticated lookup answers for a repository the forge serves publicly and denies one it will not admit exists. So a public project can be cloned by CI without a token, by a contributor with no credential helper, and by anyone who just wants to read, which is what cloning a public repository does everywhere else.
It is off by default because of what it costs rather than what it exposes. Nothing confidential is at stake: a private repository is still refused, and a repository's objects are only served to a caller the marker says holds them, so a public project is never a way into a private one that happens to share the same bytes. What it does mean is that anyone who finds the endpoint can pull from it, and on a server whose job is to move files measured in gigabytes, that is your bandwidth and your availability. Inheriting that silently is the mistake this default avoids.
Reading only. A public repository grants exactly that; uploading needs a token whatever the visibility.
A private repository still answers 401 with the challenge, never 403. That distinction is not
cosmetic: 403 tells git-lfs the answer will not change, so it stops asking the credential helper and
a user who does have access can never get in.
The two resolutions are cached apart. An anonymous decision and a token's decision are hashed under different domains, so one is never served in place of the other in either direction.
Left unset, a credential-free request is refused without the forge being asked at all. Only the exact
string true opens it: a typo, an empty value or a 1 leaves it closed, because the failure worth
guarding against is the one that opens the door when nobody meant to.
The server logs at startup when it is on, so a deployment that inherited the flag from an older chart sees it rather than discovers it.
LFSX_AUTH=disabled turns the server into an open one. It exists for local development and closed
networks, it is logged loudly at startup, and it is never the right setting for anything reachable
from the internet.
The quota the anonymous question spends
Unauthenticated calls to GitHub are limited to 60 an hour per address, which makes the anonymous
path the weakest quota in the system even though the cache keeps consumption low. A GitHub App
turns it into the strongest: with LFSX_GITHUB_APP_ID and LFSX_GITHUB_APP_KEY_FILE set, the
same question is asked as the App's installation, whose budget is 5,000 an hour and scales with
repository count. See Authentication
for the setup. Repositories the App is not installed on fall back to the plain anonymous ask.