A self-hostable, fully featured file hosting service
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



screenshot screenshot

A self-hostable, fully featured file host


PenguinUpload is a self-hostable web application that lets users upload and share files.

PenguinUpload was inspired by sr.ht.


  • Easy configuration (just a JSON file!)
    • Disable public registration
      • Require an invite code to create an account
    • Set physical location of files (use /tmp for ephemeral storage)
  • Simple directory structure and file metadata
    • A simple directory structure to organize files is available (>= 0.8.x)
    • Directory structure is generated dynamically on query
    • File metadata includes size and upload date
  • Password protection of files
    • Server enforced password protection
    • Passwords are hashed and stored securely
  • Complete API with stateless authentication for accessing the entire application
    • All functionality is exposed through the API
    • In fact, the entire web application (a Vue.js SPA) works entirely through calls to PenguinUpload's REST API
    • Each user has an API key
  • Intuitive Material Design interface
    • Pages for login, upload, download, profile, file management, and more
  • Concurrent, streamed file transfer
    • Multiple uploads/downloads at a time
  • Uploaded file management
    • Download previously uploaded files
    • Protect uploaded files with custom passwords
    • Share download links, even to password protected files, which will prompt for the password. Links can also be generated containing encoded passwords.
  • Rich download/embed support
    • Stream raw files with a simple API call
    • Supports partial download, allowing for streaming of content directly from cloud storage
  • Advanced user management
    • User privileges, advanced admin API
    • File storage quotas and enforcement
  • Optional resource usage control
    • Limit concurrent uploads per user


Build Status


PenguinUpload uses an embedded NoSQL database (LiteDB) to store metadata about files and users. The files themselves are stored in a configurable location on the filesystem.

Setup Instructions (From source)

  1. Install dependencies (.NET Core SDK 1.1, NPM/Node.js v7)
  2. Run the included script ./script/build.sh. It will output the application to ./src/PenguinUpload/bin/Release/netcoreapp1.0/publish/, and you can copy it to wherever you like
  3. Set up configuration - Create a file called penguinupload.config.json. See the example configuration file (penguinupload.config.example.json for an example.) This is required, as registration is disabled by default for security reasons.
  4. (optional) Set ASP.NET Core config in a hosting.json file.


See the Administration documentation. PenguinUpload provides an administration API for this purpose.


Copyright © 2017 0xFireball (Nihal Talur). All Rights Reserved.

Licensed under the Apache License 2.0