EzyShare

Self-hosted, multi-tenant file sharing with a developer-first API, public & private sharing, and an MCP server for AI assistants.

Flexible Auth

JWT access/refresh tokens plus per-project API keys. bcrypt-hashed passwords and role-based access control built in.

Multi-Tenant Projects

Organize files into projects with members, upload policies, and per-project rate limits. Pluggable storage with local and S3 backends, swappable at runtime.

Public & Private Sharing

Expose public projects without auth, or share privately with members. Fine-grained download and listing controls.

MCP Server

Expose file operations to AI assistants via the Model Context Protocol. Includes a get_auth_bearer tool for obtaining REST API tokens without a config file. Available as a standalone stdio binary or as POST /mcp on the main server for remote clients.

Secure by Default

Security headers, CORS, rate limiting, HttpOnly session cookies, and full audit logging of every privileged action.

JSON API First

A clean REST API for everything: auth, projects, files, sharing, and admin. Easy to script and integrate.

Storage Limits

Enforce global and per-project caps on stored bytes. Limits are enforced on upload and adjustable from the admin Settings page.

Secret Share Links

Generate revocable, unguessable links to share a whole project or a single file with anyone — no account or login required.

Large File Support

Streaming uploads and downloads with HTTP Range resumability. Chunked resumable upload sessions for multi-GB files without buffering everything in memory.

Quick Example
# Register and get a token
curl -X POST /api/auth/register \
  -H "Content-Type: application/json" \
  -d '{"email":"you@example.com","password":"secret","name":"You"}'

# Stream a large file upload
curl -X POST /api/projects/{id}/files/upload \
  -H "Authorization: Bearer <token>" \
  -F "file=@large-file.bin;type=application/octet-stream"

# Resume an interrupted download
curl -H "Authorization: Bearer <token>" \
  -H "Range: bytes=104857600-" \
  /api/projects/{id}/files/path/to/large-file.bin/download \
  -o large-file.bin

Open source · Written in Go · Docker-ready · SQLite