VIICoreFileTransfer — fast file & folder transfer between your computer (Windows / macOS / Linux) and a server. Installs with a single command, opens in the browser at http://<ip>:<port> and transfers files in multiple parallel streams — several times faster than plain HTTP or SFTP.
- 🚀 Parallel chunked uploads — 10–100 GB files upload in 8 simultaneous streams
- 📁 Files and whole folders — drag a folder into the browser window, the structure is preserved
- ⏸ Resume after interruption — an interrupted upload continues from where it stopped
- ⬇️ Downloading — files directly, folders as a single ZIP archive on the fly
- 🔒 IP filter — the site is only accessible from your IPs (or from anywhere if none are set)
- 🔐 HTTPS — enabled in one click, a self-signed certificate is generated automatically, or upload your own (Let's Encrypt, etc.)
- ⚙️ In-browser settings — port and folder are changed on the site, the server restarts itself
- ⚡ Single binary — Go, no dependencies, ~10 MB RAM
- 🔄 One-command updates —
VIICoreFT update
sudo bash -c "$(curl -fsSL https://raw.githubusercontent.com/VIICore/VIICoreFT/main/install.sh)"The script downloads the binary from GitHub, creates a systemd service and asks for your IP addresses — enter them comma-separated (or leave empty to allow access for everyone). IPs can be changed at any time.
The site will be available at: http://<server-IP>:8080
Click ⚙ on the site → enable "HTTPS" → "Save and restart".
- If no certificate is uploaded — the server generates a self-signed one itself (valid for 10 years) and the browser will ask for confirmation once.
- Paste your
-----BEGIN CERTIFICATE-----and-----BEGIN PRIVATE KEY-----(e.g. from Let's Encrypt) to remove the warning. - The HTTP port with redirect (
http_port, defaultport+1) automatically redirects visitors to HTTPS.
| Command | Action |
|---|---|
VIICoreFT server |
Start the server |
VIICoreFT install |
Reinstall (port, folder, IP list) |
VIICoreFT ip add 192.168.1.10 |
Add an allowed IP or subnet (CIDR) |
VIICoreFT ip remove 192.168.1.10 |
Remove an IP |
VIICoreFT ip list |
Show the IP list |
VIICoreFT ip clear |
Allow access for everyone |
VIICoreFT status |
Status, address, filter |
VIICoreFT update |
Update to the latest version |
VIICoreFT uninstall |
Remove the service and binary |
The browser splits the file into 4 MB chunks and sends them to the server in 8 parallel HTTP streams. The server writes chunks straight into the file at their offsets (WriteAt) — no merging in temporary files. On interruption, the browser asks the server for the current size and resumes from that point.
| Method | Path | Purpose |
|---|---|---|
| GET | /api/info |
Version, storage, stats, IP filter |
| GET/POST | /api/settings |
Port, storage, HTTPS, certificate upload (POST restarts the server) |
| GET | /api/list?path= |
Folder listing |
| POST | /api/upload |
Chunk upload (headers X-Path, X-Offset, X-Total) |
| POST | /api/complete?path= |
Finalize the file (.vftpart → final) |
| GET | /api/progress?path= |
Size of a partially uploaded file (resume) |
| GET | /api/download?path= |
File or folder (ZIP) |
| POST | /api/delete |
Delete ({"path": "..."}) |
File /etc/viicoreft/config.json (or the VIICOREFT_CONFIG environment variable):
{
"port": 8080,
"storage": "/srv/viicoreft",
"allowed_ips": ["192.168.1.10", "10.0.0.0/8"],
"tls": false,
"cert_file": "/etc/viicoreft/cert.pem",
"key_file": "/etc/viicoreft/key.pem",
"http_port": 0
}An empty allowed_ips = access for everyone. With tls: true and missing certificates, they are generated automatically.
go build -o viicoreft .
# all platforms:
./build.sh v1.0.0Releases are built automatically by GitHub Actions when pushing a v* tag.
MIT
