mrkeyoor.com_
Tue 22 Sept 17:44 UTC
Self-Hostedevaluationupdated 22 Sept 2026

sftpgo review

SFTPGo is a self-hosted file transfer server that gives the same users access through SFTP, HTTP/S, FTP/S, and WebDAV. It can put local disks, encrypted folders, S3-compatible storage, Google Cloud Storage, Azure Blob Storage, or another SFTP server behind those accounts.

Verdict

Our SFTPGo run built in 233 seconds, but 5 of 14 test results failed, so we would stage this exact commit before trusting it with partner files. Use the Community edition when 4 transfer protocols and mixed storage backends genuinely replace separate services. Choose OpenSSH for a plain local SFTP server, and price Enterprise before assuming every workflow or compliance control is in the AGPL build.

We ran it

Lab card: what happened when we ran sftpgoScreenshot of sftpgo (sftpgo.com)
Install✓ · 44s477 packages
Build✓ · 233s
Tests✗ · 122s9 passed · 5 failed of 14 (go test)
Repo435 files~186,653 lines of source · 18.2 MB · 4 CI workflows · Dockerfile · tests dir

Answers from our run

Does sftpgo build from source?

Dependencies installed in 44 seconds (477 packages), and the build succeeded in 233 seconds. We cloned commit 87fb508 into a clean Debian container with 3 CPUs and no project-specific setup.

Do sftpgo's tests pass?

Not all of them: 9 of 14 passed and 5 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use sftpgo?

Companies that cannot accept AGPL-3.0 copyleft or the separate proprietary-theme restrictions described in the README.

What are the alternatives to sftpgo?

OpenSSH Portable, atmoz/sftp. Our SFTPGo run built in 233 seconds, but 5 of 14 test results failed, so we would stage this exact commit before trusting it with partner files.

Setup3/5Install passed, but the 233-second build led to 5 failed tests
Docs4/5Broad operator docs, with one open proxy-config correction
Community4/512,556 stars; issues and PRs were active in September 2026
Maturity4/5v2.7.6 shipped 4 security fixes; our suite was not green

Who it’s for

Teams replacing several file-transfer servers with one account, policy, and storage layer.
Operators who need legacy SFTP or FTP clients to reach cloud object storage.
Organizations that want WebAdmin and WebClient interfaces alongside protocol access.
Self-hosters prepared to patch promptly and verify proxy, database, storage, and TLS settings.

Who it’s NOT for

Companies that cannot accept AGPL-3.0 copyleft or the separate proprietary-theme restrictions described in the README.
Buyers who need PGP automation, ICAP antivirus or DLP, IMAP ingestion, and advanced workflow logic in the free Community edition: the README reserves those capabilities for Enterprise.
FedRAMP or FIPS 140 deployments that need SFTPGo to create an approved password hash today: issue 2294 and its open pull request say the released choices are bcrypt and Argon2id.
Operators who plan to copy reverse-proxy settings without testing them: open issue 2278 reports that misplaced binding settings can silently drop security headers and client-IP handling.

Setup reality

Our sandbox install succeeded in 44 seconds and pulled 477 Go packages. The build succeeded in 233 seconds. Tests then failed after 122 seconds: 9 passed and 5 failed out of 14. The log tail names failures in SCP upload-size and virtual-folder cases.

A local trial can use an embedded SQLite or bolt data provider and create the first admin in WebAdmin. Cloud backends, OIDC, email, and external SQL add their own credentials. Internet-facing use also needs deliberate TLS, trusted-proxy, port, storage, and account policy.

SQLite fits a single persistent instance. Multiple replicas need PostgreSQL, MySQL, or CockroachDB plus shared storage planning. The repository includes a Dockerfile and 4 CI workflows, but our exact commit did not finish with a green test run.

Four protocol endpoints share one account and storage layer

SFTPGo presents SFTP, HTTP/S, FTP/S, and WebDAV through 4 protocol endpoints backed by the same user and storage model. A partner can keep an old SFTP client while an internal user works through the browser. Their files may live on a local disk, an encrypted local filesystem, S3-compatible object storage, Google Cloud Storage, Azure Blob Storage, or another SFTP server. That combination is the reason to consider SFTPGo instead of adding another OpenSSH account.

The Community edition also includes WebAdmin and WebClient, standard public links, storage quotas, virtual folders, and event-driven actions. This is closer to a managed transfer gateway than a small SSH daemon. That distinction matters during evaluation. If all you need is one local directory for a few Unix users, SFTPGo adds an account database, an HTTP surface, and configuration choices that OpenSSH already avoids. Its value appears when those extra layers replace separate systems.

Community v2.7.6 keeps core transfer features, while deeper controls cost money

Community v2.7.6 retains the 4 server protocols, cloud backends, browser interfaces, standard links, and shared-database high availability described in the README. Enterprise adds the vendor contract and several operational features: dynamic workflow logic, advanced virtual-folder routing, IMAP attachment ingestion, PGP processing, ICAP antivirus and DLP, richer sharing, and browser document editing. A competent buyer should map requirements to that table before building around the free edition.

The split is reasonable, but the word "Community" does not mean a lightly limited demo. It can serve real transfers, and that makes license and support review more important. Community support runs through GitHub Discussions, while direct support and commercial licensing belong to Enterprise. If a failed partner upload must meet a contractual response time, the free channel is the wrong operating assumption even when the software has the required protocol.

What happened when we ran it

Our sandbox installed commit 87fb508 in 44 seconds, pulling 477 Go packages. The build completed in 233 seconds. This was an unprivileged golang:1.24-bookworm container with 3 CPUs, 8 GB of RAM, and no secrets. The checkout contained 435 files, about 186,653 source lines, and occupied 18.2 MB before installation. It also had 4 CI workflow files, a Dockerfile, and a tests directory.

The test step failed with exit code 1 after 122 seconds: 9 passed and 5 failed out of 14. The supplied log tail names TestSCPUploadMaxSize, TestSCPVirtualFolders, and TestSCPNestedFolders, then records failure for internal/sftpd after 77.148 seconds. internal/telemetry passed in 0.064 seconds and internal/webdavd passed in 32.845 seconds. The tail does not show the cause of those SCP failures, so we will not assign one.

Five failed results do not prove the server is unusable, and 9 passing results do not clear it for production. They say something narrower and useful: the exact commit did not pass the available command in our fresh Debian sandbox. The repository has the expected build and CI scaffolding, but a buyer should reproduce the SCP cases on the deployment image and storage layout before migrating external users.

One instance can stay embedded; replicas need a shared database

SFTPGo v2.7.6 can start with SQLite or bolt, expose SFTP on port 2022, and use WebAdmin on port 8080 to create the first administrator and user. That is enough for a contained trial. A real deployment then has to decide which protocols are enabled, where home directories point, how TLS terminates, which storage credentials exist, and whether public shares or the browser client should be reachable at all.

Several replicas change the database choice. The documentation directs multi-instance deployments to PostgreSQL, MySQL, or CockroachDB instead of SQLite. Object stores bring AWS, Google Cloud, or Azure credentials, while OIDC and SMTP introduce more secrets and callback settings. Open issue 2278 adds a sharp warning for reverse proxies: its reporter found that per-binding security and client-IP settings could be accepted in the wrong place yet have no effect under 2.7.5. The issue remained open when checked.

Release v2.7.6 fixed four security flaws on September 19

Release v2.7.6 fixed 4 security problems: disabled or expired share owners did not lose their links, SCP record parsing allowed unbounded memory allocation, directory names enabled stored cross-site scripting in WebClient, and copy filters missed the source path. The release also tightened ZIP-share scope, file-hash permissions, concurrent account updates, token invalidation, and installed data-directory permissions. None of that establishes a cause for our test failures. It does show why a public transfer server needs a prompt update path.

The project itself is moving. GitHub showed a September 19, 2026 push and the v2.7.6 release on the same day. We counted 12,556 stars, 159 open issues, and 20 open pull requests on September 22. Issue 2294 and pull request 2295 were opened one day earlier to add PBKDF2-SHA256 password creation for FIPS-oriented environments. Recent activity is a health signal, though the open request means the released Community build does not yet satisfy that stated need.

AGPL and the proprietary web theme can decide the purchase

The Community source uses AGPL-3.0-only, and the README adds separate terms for the proprietary KeenThemes components in WebAdmin and WebClient. The project says those interface components cannot be reused in a competing derivative without permission. Teams shipping modified network software, appliances, or branded derivatives should have counsel review both layers before engineering work starts. Enterprise is the cleaner route when copyleft or direct support is a procurement blocker.

SFTPGo makes sense when its 4 protocols, browser access, and mixed backends retire several file-transfer services. Our failed test run keeps it behind a staging gate, while the September security release makes patch ownership part of the adoption decision. For a single local SFTP endpoint, OpenSSH has far less surface. For a partner-facing transfer hub, SFTPGo earns a serious trial once the edition, license, database, proxy, and failing SCP cases have named owners.

Alternatives

ProjectWhat it isPick it when
OpenSSH PortableThe portable OpenSSH server includes the familiar SFTP subsystem for local filesystems.pick this instead when you need ordinary SSH and SFTP accounts on one host, without web clients or cloud-storage abstraction.
atmoz/sftpA small Docker image for defining SFTP users and mounted directories.pick this instead when a simple container and local mounted storage cover the whole job.

What people are saying

  1. [github-trending] drakkan/sftpgo

Sources

  1. SFTPGo repository and Community edition README
  2. SFTPGo Community documentation
  3. SFTPGo v2.7.6 release notes
  4. Reverse-proxy configuration documentation issue
  5. FIPS password hashing request
  6. PBKDF2-SHA256 pull request

More self-hosted reviews

mailcow-dockerized · openGym · BackPack · PanWatch · wiki · dashy · the whole board →