A file uploader + URL shortner written in node for your private cloud
Alternatives To Delta
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Sharex Upload Server365
9 months ago35gpl-3.0JavaScript
AKA ShareS - Feature full & Stable ShareX and file server in node. Includes images, videos, code, text, markdown rendering, password protected uploads, logging via discord, administration through Discord, url shortening, and a full front end. Use standalone or via reverse proxy
2 years agomitJavaScript
A file uploader + URL shortner written in node for your private cloud
Getlink Next43
3 years ago1mitJavaScript
Get Link!
5 years agomitPHP
Starbs URL Shortener!
4 years agomitGo
The King of Things - Pastebin, snippet/text sharing, URL shortener, and file uploader
One Man Shortener1
8 years agoRuby
A personal url shortener and image store
Alternatives To Delta
Select To Compare

Alternative Project Comparisons

Delta - file uploader + url shortner

delta is a small hobby project that I did in my free time. It's a self-hosted file uploader + URL shortner. In short, you can fire a simple curl command with a file name, and that file will be uploaded to your server, after that you'll have a short url as a reponse of upload. And you can use this URL to fetch the uploaded file. Same goes with URL shortner




  • ⚡️ File uploader backed with Superfast Expressjs and Multer
  • 📁 URL shortener for files (upload file ⇒ get shortened URL in return)
  • 🌐 URL shortener for long URLS (
  • 🔥 Custom URL support (
  • 🎉 Secured with API keys
  • 👪 Multiuser + Multidomain support on the same server (see this)
  • ⌛️ Configurable Cron job for deleting resources older than X time
  • 🔢 Never Clashing (0% collision guaranteed) Permanent ID's for generated URLs.
  • 💣 self destructing links
  • 🔐 Password protected links
  • 👻 Easy to install, setup and use :P



git clone

Or, download zip from master branch


Open config.js. it has multiple things you need to configure

  • users: list of users with their own api-keys, name etc.
    • name: Name of the user, a folder will be created with this name inside upload directory.
    • apiKey : a random long string (mandatory as user identification is done with this key, can't leave empty)
    • run cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1 OR date | md5sum | base64 | head -c 32 to create one
    • domainUrl: 'https://your.domain.url/' Keep the trailing slash /
  • timeZone: 'Your/Timezone' This is used to run the cron job periodically according to your location
  • uploadpath: Absolute path where you want your files to be stored on server
  • cron:
    • schedule: Cron schedule string, default is 1st Day of every month at 00:00
    • min_age: Minimum time (days) for which file should be retained
    • max_age: Maximum time (days) for which file should be retained
    • max_size: Maximum file size to calculate retaintion period against (it's not max size of file to upload)
  • dbconfig: Redis configuration
    • port: Redis server port
    • host: Set via REDIS_HOST env variable for Docker, give your server URL if you are not using docker
    • password: Server password
  • port: Port at which you want to run delta at
  • urlLength: length of the generated URL, 4 to 7 are considered good.
  • urlString: list of characters from which shortened URL is generated, you can remove I,l,4,A etc look-alike characters if you want

Install dependencies

There are two ways to use delta


| although I have created basic Dockerfile and docker-compose.yml, and it works, I don't know much docker I need help with persistance storage/volume etc. If you know Docker, that'd be a great help :)

Debian/Ubuntu etc
sudo apt-get install redis-server
sudo systemctl enable --now redis-server.service
fedora etc
sudo dnf -y install redis
sudo systemctl enable --now redis

| for other OS:

npm install # or yarn install


  • run npm start or yarn start! Server is started, enjoy!

If ther's something not working, please submit an issue, I will make sure I fix it in upcoming weekend :D


If you have installed everything correctly, and server is working it's really easy to use it.

curl Method

Most basic method, and it will work with just simple curl command or alternative.

for files
  • Go to the directory from which you want to upload the file
  • run curl -H 'api-key: API_KEY' -F file=@filename,
  • Replace required data accordingly
    • API_KEY - The exact key you have given on server in config.json
    • filename - filename you want to upload
for urls
  • Just replace -F file=@filename part with -d 'url= Rest of the command stays same
  • To generate custom URLs add -d 'custom=test' with previous command

See Examples for more details.

Examples and API

Considering apiKey = 1234:

  • To upload a file called dogs.jpg
curl -H 'api-key: 1234' -F [email protected]
  • To shorten a URL, say this repository
curl -H 'api-key: 1234' -d 'url='
  • To shorten custom URL, again this repository, to delta
curl -H 'api-key: 1234' -d 'url=' -d 'custom=delta'
  • To Shorten a URL and set automatic expiry of 15 minutes
curl -H 'api-key: 1234' -d 'url=' -d 'expires=15m'
  • To upload a file and lock it with password, so that only people with that password can see that file
curl -H 'api-key: 1234' -F [email protected] -F 'pass=eNcRyPt'

of course, file uploads don't have custom URLs, both files and URLs can have password and expiry duration. keep in mind expiry duration can only be in format {number}{s|m|h|d|w|M} (stands for Seconds, Minutes, Hours, Days, Weeks, Months respectively) like 15s for 15 seconds, 1d for 1 day, 2M for two months etc.


delta is a private file uploader, and it's supposed to be used for personal use only. Unlike many other famous file uploaders it's not open to all. for that purpose, you can just keep your API key simple like a or something and distribute it publicly somewhere so that everyone can use your servers instance. But what if you don't want to distribute your api key but still let other people use the server? what if each users data is supposed to be stored in different directory? what if other users don't want your hostname in return but something different? 😁 delta supports all of it. multiuser branch lets you host delta for multiple users on the same instance. just edit the given config.json and you are good to go. The structure of config.json is a littlebit different than that of master branch

  • Everything is inside a users array
  • First element represents the name of the user.
    • this will be used to create different directories to store the uploaded files for each user.
    • keep this parameter same for those users you want to store files in the same directory
  • Second parameter is apiKey, this can be different for each user
  • third paramter is the server name which will be returned as a short URL as a response.

Example: this is current configuration:

    users: [
        ['Spark', 'spark1234', 'https://i.spark.pepe/'],
        ['John', '1234John', '']

And, If spark makes a request to the server with his own api key, the server will store the uploaded file inside a different dir called spark in uploads/ folder, and will return as shortened URL, but if John makes a request to same server with his private api key, his files will be stored in John directory under uploads/ folder, and he will get in return :)


delta is Licensed under MIT

Popular Uploader Projects
Popular Url Shortener Projects
Popular User Interface Components Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Self Hosted
Url Shortener