Simple open source self-hosted file sharing solution. It's an alternative to paid services like Dropbox, WeTransfer.
- No accounts, no logins
- Mobile friendly responsive interface
- Supports many and very big files (Streams ftw)
- Resumable up- and downloads (tus.io)
- Set an expire-time for your upload bucket
- One-time downloads
- Download all files as zip/tar.gz archive
- Modal-style file preview
- Password protected download list (hashed with argon2)
/adminpage lists bucket information (disabled until you setadminPassin config)- Lightweight Vue based frontend apps
- Explicit named bucket IDs with query param
sid=<myBucketID> - Folder uploads/downloads keep their directory structure, browsable as a folder tree
- Optional one-time email notification when a shared file is downloaded
This is a fork of psi-4ward/psitransfer, with the following additions on top of upstream:
- Rate limiting on the admin/upload/download password checks and on new-upload creation, to slow down brute-force and mass-spam attempts without throttling legitimate large uploads
- Bucket and upload passwords hashed with argon2 instead of stored/compared in a weaker form
- Sortable, filterable
/adminbucket table - Folder-tree navigation for uploads and downloads with subfolders
- Optional download-notification emails (
plugins/file-downloaded-email.js)
# Compile the frontend apps
$ cd app
$ npm install
$ npm run build
# Install dependencies
$ cd ..
$ npm install
$ npm startRequires Node >= 24 (see .nvmrc).
There are some configs in config.js like port and data-dir.
You can:
- Edit the
config.js(not recommended) - Add a
config.<NODE_ENV>.js, e.g.config.production.js(git-ignored by default, since it's the natural place for per-environment secrets) - Define environment variables like
PSITRANSFER_UPLOAD_DIRto set the upload directory - To secure your instance if exposed to the internet against unwanted, non-authorized uploads,
use the
PSITRANSFER_UPLOAD_PASSenvironment variable - Set
notifyFromAddress(orPSITRANSFER_NOTIFY_FROM_ADDRESS) if you enable the download-notification email plugin
See docs/configuration.md for the full list of options.
public/pug/upload.pug and download.pug are kept simple.
You can alter these files and add your own logo and styles — custom CSS goes in
public/pug/partials/head_custom.pug. See docs/layout-customization.md.
Please keep a footnote like Powered by PsiTransfer :)
Uses debug:
DEBUG=psitransfer:* npm start- There is no (end-to-end) payload encryption (yet).
Download all as ZIPdoes not support resuming the download.
Built on top of psi-4ward/psitransfer by
Christoph Wiechert. See LICENSE for the original copyright notice.