{"id":15669864,"url":"https://github.com/alexgustafsson/drop","last_synced_at":"2026-03-12T21:33:11.341Z","repository":{"id":57597563,"uuid":"373126051","full_name":"AlexGustafsson/drop","owner":"AlexGustafsson","description":"A self-hosted, end-to-end encrypted personal file sharing service written in Go and TypeScript using React","archived":false,"fork":false,"pushed_at":"2022-06-22T08:21:56.000Z","size":493,"stargazers_count":10,"open_issues_count":10,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-31T02:34:53.715Z","etag":null,"topics":["api","end-to-end-encryption","file-share","file-upload","go","golang","react","typescript","webapp"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlexGustafsson.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-06-02T10:25:44.000Z","updated_at":"2023-11-14T16:36:21.000Z","dependencies_parsed_at":"2022-08-28T10:21:05.212Z","dependency_job_id":null,"html_url":"https://github.com/AlexGustafsson/drop","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexGustafsson%2Fdrop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexGustafsson%2Fdrop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexGustafsson%2Fdrop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexGustafsson%2Fdrop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlexGustafsson","download_url":"https://codeload.github.com/AlexGustafsson/drop/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252762282,"owners_count":21800288,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","end-to-end-encryption","file-share","file-upload","go","golang","react","typescript","webapp"],"created_at":"2024-10-03T14:41:31.222Z","updated_at":"2026-03-12T21:33:11.311Z","avatar_url":"https://github.com/AlexGustafsson.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/logo-240x240.png\" alt=\"Logo\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/AlexGustafsson/drop/blob/master/go.mod\"\u003e\n    \u003cimg src=\"https://shields.io/github/go-mod/go-version/AlexGustafsson/drop\" alt=\"Go Version\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/AlexGustafsson/drop/releases\"\u003e\n    \u003cimg src=\"https://flat.badgen.net/github/release/AlexGustafsson/drop\" alt=\"Latest Release\" /\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\n  \u003cstrong\u003e\u003ca href=\"#quickstart\"\u003eQuick Start\u003c/a\u003e | \u003ca href=\"#contribute\"\u003eContribute\u003c/a\u003e \u003c/strong\u003e\n\u003c/p\u003e\n\n# Drop\n### A self-hosted, end-to-end encrypted personal file sharing service\n\nNote: Drop is currently being actively developed. Until it reaches v1.0.0 breaking changes may occur in minor versions.\n\nDrop is a new service for letting people easily upload end-to-end encrypted files from any device right to your own cluster, swarm or Raspberry Pi. It's design with two primary goals in mind:\n\n1. The service must be user-friendly. A computer-novice should be able to receive a link and use the service on their own on their device of choice.\n2. The service must be secure. The server must have minimal knowledge of the files shared - encryption is not optional.\n\nBeyond these primary goals, there are two secondary goals.\n\n1. The service must be easily self-hosted, be it on a Raspberry Pi, using Docker or running in a Kubernetes cluster.\n2. The service must be performant and scalable. The web-based client should easily handle uploads of hundreds of megabytes within seconds and the server must be able to handle the load shared over one or more instances.\n\n## Quickstart\n\u003ca name=\"quickstart\"\u003e\u003c/a\u003e\n\nUpcoming.\n\n## Table of contents\n\n[Quickstart](#quickstart)\u003cbr/\u003e\n[Features](#features)\u003cbr /\u003e\n[Installation](#installation)\u003cbr /\u003e\n[Usage](#usage)\u003cbr /\u003e\n[Contributing](#contributing)\n\n\u003ca id=\"features\"\u003e\u003c/a\u003e\n## Features\n\n* Non-optional end-to-end streaming file encryption\n* Several supported state and storage backends\n* Support for all the latest browsers (Chrome, Edge, Firefox, Safari)\n* API-first to support third-party clients\n\n\u003ca id=\"installation\"\u003e\u003c/a\u003e\n## Installation\n\n### Using Docker\n\nUpcoming.\n\n### Using Homebrew\n\nUpcoming.\n\n```sh\nbrew install alexgustafsson/tap/drop\n```\n\n### Downloading a pre-built release\n\nDownload the latest release from [here](https://github.com/AlexGustafsson/drop/releases).\n\n### Build from source\n\nClone the repository.\n\n```sh\ngit clone https://github.com/AlexGustafsson/drop.git \u0026\u0026 cd drop\n```\n\nOptionally check out a specific version.\n\n```sh\ngit checkout v0.1.0\n```\n\nBuild the application.\n\n```sh\nmake build\n```\n\n## Usage\n\u003ca name=\"usage\"\u003e\u003c/a\u003e\n\n_Note: This project is still actively being developed. The documentation is an ongoing progress._\n\n```\nUsage: drop [global options] command [command options] [arguments]\n\nA service for securely transferring files\n\nVersion: v0.1.0, build 19df17a. Built Wed Jun  9 11:29:18 CEST 2021 using go version go1.16 darwin/amd64\n\nOptions:\n  --verbose   Enable verbose logging (default: false)\n  --help, -h  show help (default: false)\n\nCommands:\n  decrypt  Decrypt a file\n  serve    Serve the application\n  token    Create a token\n  version  Show the application's version\n  help     Shows a list of commands or help for one command\n\nRun 'drop help command' for more information on a command.\n```\n\n## Documentation\n\nUpcoming.\n\n### API\n\nThe API is documented in `api.yml` using OpenAPI 3.0.\n\nYou may use tools such as the open source [Insomnia](https://github.com/Kong/insomnia) to easily work with the API, or Swagger UI to explore the API.\n\n## Security\n\nSecurity is one of the core features of Drop and therefore it's taken very seriously. At the time of writing, Drop is not ready for production use. When it is, it will provide confidentiality via end-to-end encryption, integrity via the use of authenticated cryptography and availability by being horizontally scalable, offloading the data and state to highly available stores.\n\nThis section will be extended to provide information on how to disclose security issues, what considerations should be made when deploying and using Drop, as well as security features and limitations.\n\n## Contributing\n\u003ca name=\"contributing\"\u003e\u003c/a\u003e\n\nAny help with the project is more than welcome. The project is still in its infancy and not recommended for production.\n\n### Development\n\n```sh\n# Clone the repository\nhttps://github.com/AlexGustafsson/drop.git \u0026\u0026 cd drop\n\n# Show available commands\nmake help\n\n# Build the project for the native target\nmake build\n```\n\n#### Frontend\n\nThe frontend is written entirely in TypeScript using React and built using Vite. The app uses a web worker to handle the encryption and uploading of files in the background. The entire source is found in the `frontend` directory.\n\nThe only top-level build command available for the frontend is `make build/frontend`, which builds the frontend and outputs it to the `build/frontend` directory. For development, it's recommended to use the available commands via yarn or NPM instead.\n\n```sh\ncd frontend\n\n# Install dependencies\nyarn install\n\n## Building\n\n# Build for production\nyarn build\n# Build in development mode on each change\nyarn build:watch\n\n## Serving\n\n# Serve the built application\nyarn serve\n\n# Build in watch mode and serve the application continously with automatic reload\nyarn dev\n```\n\nSome features such as the Worker-based file upload does not work in Safari or Firefox when using the `yarn dev` command as these platforms have varying support for ECMAScript modules. To test in these browser, it may be easier to use `yarn build:watch` and run the go server to serve the files.\n\nIn other cases, `yarn dev` will work well and automatically point to the API running on the standard port for the server.\n\n#### Server\n\nThe server is written entirely in Go, using the [Fiber](https://gofiber.io) web framework. Its source is scattered in the `cmd` and `internal` directories.\n\n```sh\n## Building\n\n# Build the server\nmake build/drop\n\n## Code quality\n\n# Format code\nmake format\n# Lint code\nmake lint\n# Vet the code\nmake vet\n\n## Testing\n\n# Run tests\nmake test\n```\n\n_Note: due to a bug (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93082, https://bugs.llvm.org/show_bug.cgi?id=44406, https://openradar.appspot.com/radar?id=4952611266494464), clang is required when building for macOS. GCC cannot be used._\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexgustafsson%2Fdrop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexgustafsson%2Fdrop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexgustafsson%2Fdrop/lists"}