A storage backend is where a user's files actually live. It is chosen in Admin → Repository, which validates the settings before switching: if the new backend cannot be reached or its root cannot be read, the previous one stays active and nothing is saved.

What stays the same

Every backend sees the same thing: one root, folders that are real directories, and users confined to their home folder. A folder under homedir is reachable with / and nothing above it — .., absolute paths and symlinks cannot escape, and the check lives in the backend, not in the HTTP layer.

Files look identical whichever backend is used, so switching does not change how the interface behaves.

Local folder (default)

{ "storage": { "type": "local", "root": "repository" } }
KeyMeaning
rootFolder on this machine. Relative to the working directory, or absolute

The admin can point it at any folder on the server with a folder picker, and the change applies immediately. Use an absolute path in production so a different working directory cannot change what users see.

Permissions are the operating system's. FileGator runs as one user, so that user must be able to read and write everything inside the root.

SFTP

{
  "storage": {
    "type": "sftp",
    "sftp": {
      "host": "files.example.com",
      "port": 22,
      "user": "filegator",
      "password": "",
      "private_key": "/etc/filegator/id_ed25519",
      "known_hosts": "/etc/filegator/known_hosts",
      "timeout": 30
    },
    "root": "/srv/files"
  }
}
KeyDefaultMeaning
host, port— , 22SSH server
user—Login name
password or private_key—One is required. The key must be unencrypted PEM/OpenSSH
known_hosts""Set this in production. Empty accepts the host key on first use, which is convenient and vulnerable to interception
timeout15Seconds for connecting and for individual operations. 0 means the default
root—Remote folder served as /

SFTP has no server-side copy, so copying streams through FileGator (bounded to 4 MB in memory). Large folders copied over a slow link therefore take as long as downloading and uploading them.

S3

{
  "storage": {
    "type": "s3",
    "s3": {
      "bucket": "my-files",
      "region": "us-east-1",
      "endpoint": "",
      "access_key": "…",
      "secret_key": "…",
      "use_path_style": false,
      "prefix": "team",
      "timeout": 60
    }
  }
}
KeyMeaning
bucketBucket name
regionAWS region. Some compatible services ignore it but require a value
endpointOverride the AWS host, e.g. https://nyc3.digitaloceanspaces.com. Empty means AWS
access_key, secret_keyCredentials
use_path_stylePut the bucket in the path instead of the host name. MinIO and most self-hosted services need true
prefixKey prefix, so one bucket can hold several repositories
timeoutSeconds per request. Default 60; 0 means the default

S3 has no directories. Folders are placeholder objects with a trailing /; FileGator creates and lists them so the interface still shows a folder tree.

Limitations

Choosing one

LocalSFTPS3
Speedfastestnetwork-boundnetwork-bound
Server-side copyyesnono
Server-side renameyesyescopy + delete
Permission bitsyesyesno
Max file sizediskdisk5 GiB
Needs a writable volumeyesnono

For a single server, local storage is simplest and fastest. SFTP suits "files already on another machine". S3 suits containers with no persistent disk, at the cost of size limits and slow bulk operations.

Security notes