<p align="center">
  <img src="https://www.projectsend.org/projectsend-logo-white.png" alt="ProjectSend logo" />
</p>

<h3 align="center">The self-hosted client portal for file sharing</h3>

<p align="center">
  Share files privately with clients, partners, and teams — on your own server.<br>
  Built for freelancers, agencies, accountants, photographers, architects, NGOs, and any business that sends files to external people.
</p>

<p align="center">
  <a href="https://github.com/projectsend/projectsend/releases/latest"><img src="https://img.shields.io/github/v/release/projectsend/projectsend?style=flat-square" alt="Latest Release"></a>
  <a href="https://github.com/projectsend/projectsend/blob/develop/LICENSE"><img src="https://img.shields.io/github/license/projectsend/projectsend?style=flat-square" alt="License"></a>
  <a href="https://github.com/projectsend/projectsend/actions/workflows/php-static-analysis.yml"><img src="https://img.shields.io/github/actions/workflow/status/projectsend/projectsend/php-static-analysis.yml?style=flat-square&label=analysis" alt="PHP Static Analysis"></a>
  <a href="https://github.com/projectsend/projectsend/actions/workflows/asset-build.yml"><img src="https://img.shields.io/github/actions/workflow/status/projectsend/projectsend/asset-build.yml?style=flat-square&label=build" alt="Asset Build"></a>
</p>

<p align="center">
  <strong>Maintained since 2011</strong> &middot; <a href="https://www.projectsend.org">Website</a> &middot; <a href="https://docs.projectsend.org">Docs</a> &middot; <a href="https://www.projectsend.org/demo/">Demo</a>
</p>

---

## Screenshots

<p align="center">
  <img src="https://www.projectsend.org/screenshots/dashboard.png" alt="Dashboard" width="700" /><br>
  <em>Admin dashboard</em>
</p>

<p align="center">
  <img src="https://www.projectsend.org/screenshots/template-modern-cards.png" alt="Client portal" width="700" /><br>
  <em>Client portal with the Modern template</em>
</p>

<p align="center">
  <img src="https://www.projectsend.org/screenshots/file-editor.png" alt="File editor" width="700" /><br>
  <em>File editor with assignments and expiration</em>
</p>

<p align="center">
  <img src="https://www.projectsend.org/screenshots/themes.png" alt="Themes" width="700" /><br>
  <em>Multiple themes for the client-facing portal</em>
</p>

## How ProjectSend Compares

| Feature | ProjectSend | Nextcloud | WeTransfer | Dropbox |
|---|:---:|:---:|:---:|:---:|
| Self-hosted | :white_check_mark: | :white_check_mark: | :x: | :x: |
| Open source | :white_check_mark: GPL v2 | :white_check_mark: AGPL | :x: | :x: |
| Dedicated client accounts | :white_check_mark: | :warning: Partial | :x: | :x: |
| Client groups | :white_check_mark: | :x: | :x: | :x: |
| Auto-expiring files | :white_check_mark: | :white_check_mark: | :warning: Pro only | :x: |
| Clients can upload back | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark: |
| Download limits | :white_check_mark: | :x: | :x: | :x: |
| Encryption at rest | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| Client portal themes | :white_check_mark: | :x: | :x: | :x: |
| Two-factor authentication | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
| 70+ languages | :white_check_mark: | :white_check_mark: | :warning: Partial | :warning: Partial |
| S3 / object storage | :white_check_mark: | :white_check_mark: | — | — |
| Runs on shared hosting | :white_check_mark: | :x: | — | — |
| Setup complexity | :white_check_mark: Low | :warning: Medium | — | — |
| One-time cost | :white_check_mark: Free | :white_check_mark: Free | From $10/mo | From $10/mo |
| Data ownership | :white_check_mark: Full | :white_check_mark: Full | :x: None | :x: None |

## Who Uses ProjectSend

Freelancers, agencies, photographers, accountants, lawyers, architects, NGOs, schools, government offices — anyone who needs to share files with external people without giving up control of their data.

## Features

- **Client accounts** with usernames and passwords
- **Groups** to organize clients and share files with multiple people at once
- **Auto-expiration** for time-limited file access
- **Email notifications** when new files are available
- **Client uploads** — let clients send files back to you
- **Download tracking** and full activity logging
- **Categories and folders** for file organization
- **Multiple themes** for the client-facing portal
- **Two-factor authentication** (2FA)
- **S3-compatible storage** support
- **70+ languages** via community translations
- **Custom branding** with your own logo and colors
- **Role-based permissions** for team members
- **Public file links** for sharing without an account

## Quick Start

**Requirements:** PHP 8.2+, MySQL 5.7+ / MariaDB 10.3+, Apache or Nginx

1. Download the [latest release](https://github.com/projectsend/projectsend/releases/latest)
2. Upload files to your web server
3. Open the URL in your browser and follow the installer

ProjectSend is also available on **Softaculous** and **Installatron** for one-click installation on supported hosting providers.

Full installation guide: [docs.projectsend.org](https://docs.projectsend.org)

### Nginx Configuration (required)

**If you are using Nginx**, you must add location blocks to block direct access to the upload directory. Apache deployments use `.htaccess` for this automatically, but Nginx ignores `.htaccess` files — without the proper config, uploaded files would be publicly accessible regardless of their permission settings.

A ready-to-use template is included: [`nginx.conf.example`](nginx.conf.example)

The critical block is:

```nginx
location ^~ /upload/files/ {
    deny all;
}
location ^~ /upload/temp/ {
    deny all;
}
```

**The `^~` is required, not decoration.** Without it these are ordinary prefix locations, and Nginx lets a matching regex location win over an ordinary prefix location. A typical static asset block such as `location ~* \.(js|css|png|jpg|svg)$ { ... }` would then take over every image, stylesheet and script under `upload/files/` and serve them with no login at all, while `deny all` silently does nothing for those extensions.

Do **not** block `upload/thumbnails/` or `upload/admin/` — thumbnails and your branding logo are served to browsers from there.

See the example file for the complete recommended configuration including PHP-FPM, X-Accel-Redirect support, and all other required security blocks, and [`SECURITY_HARDENING.md`](SECURITY_HARDENING.md) for how to verify your deployment is actually protected.

## Demo

Try ProjectSend without installing: [www.projectsend.org/demo](https://www.projectsend.org/demo/)

## Support the Project

ProjectSend is free and open source. If you find it useful, consider supporting development:

- [Patreon](https://www.patreon.com/ignacionelson)
- [Open Collective](https://opencollective.com/projectsend)

## Contributing

- Read the [Contributing Guide](CONTRIBUTING.md)
- Report bugs and suggest features via [Issues](https://github.com/projectsend/projectsend/issues)
- Ask questions in [Discussions](https://github.com/projectsend/projectsend/discussions)
- Join us on [Facebook](https://www.facebook.com/projectsend/)
- Email: contact@projectsend.org

## Translations

ProjectSend is available in **70+ languages** thanks to the community.

Download translations or contribute yours on [Transifex](https://explore.transifex.com/subwaydesign/projectsend/).

## License

ProjectSend is licensed under [GNU GPL v2](http://www.gnu.org/licenses/old-licenses/gpl-2.0.html).
