Share private files with anyone, and revoke access when you need to.
File Share shares private files and media items with accounts on your site and with people who have none. A share is a set of files plus a set of recipients: site accounts, email addresses, or *@domain patterns that admit anyone at a domain. People without an account sign in with a 6-digit code or a single-use link sent to their address. Access is checked on every request, so revoking a share, a recipient or an issuer takes effect at once.
Features
- Share uploaded files, files already on the site, and media items. A share follows a media item when its file is replaced.
- Recipients can be accounts, email addresses, or domain patterns. Each address and account can get an invitation with a personal sign-in link.
- Sign-in by emailed code or single-use link. Opening a link shows a Continue button, so mail scanners cannot use it up. Codes and links are stored only as hashes, and each works once.
- An address that belongs to an account must log in as that account. Blocking the account shuts it out.
- Recipients can invite others. Removing a recipient removes everyone they invited.
- Revoke a share, remove a recipient from one share or from every share, or revoke everything one account shared. Blocking or deleting an account does both.
- Every download re-checks that the person who shared the file can still download it.
- A log of every sign-in, download and refusal, purged after 90 days by default.
- Optional emails to the issuer on each recipient's first download and on each invitation. Every email template can be edited.
- Recipient sessions use their own cookie scoped to
/shareand never start a Drupal session, so anonymous page caching elsewhere is unaffected. The cookie works behind Pantheon's edge cache. - Drush commands to list, revoke and purge.
- Tool API plugins for AI agents such as Site Agent. No tool result ever contains a sign-in link or token.
Requirements
- Drupal core ^10.5 || ^11, and PHP 8.2 or later.
- A private file system (
$settings['file_private_path']). Only private files can be shared. - Optional: Media, to share media items.
- Optional, for File Share Tools: Tool API 1.0.0-beta11 or later.
Submodules
- File Share Tools adds Tool API plugins to create, change, list and revoke shares and read their activity, each run as the calling account. It classifies its write tools for Site Agent, so Site Agent asks for approval on every write. Experimental while Tool API is in beta.
Project status
File Share is in development on the 1.0.x branch. The File Share Tools submodule stays experimental until Tool API reaches 1.0, because that API may still change.
Similar projects
- Protected Download makes expiring, HMAC-signed links to files. Its links are stateless, so they cannot be single-use or revoked one at a time.
- File Download Token makes tokenized download links. It does not bind them to a person, limit their use, or revoke them.
- Onetime Download and Temporary Download offer one-time and expiring links for Drupal 7.
- Private Files Download Permission controls private file downloads by directory, role and user.
File Share adds stored, per-person access with recipients who need no account, invitations, revocation by share, recipient or issuer, and an activity log.
How this module is built
An AI coding assistant helped draft much of this module's code, tests and documentation. The maintainers review and take responsibility for every change. Contributions follow Drupal's policy on the use of AI when contributing to Drupal.
Supporting this module
File Share is developed and maintained by tbcs. Development is sponsored by:
Ask your assistant about File Share
Check compatibility with your Drupal and PHP version, maintenance and security coverage, from current release data. How it works
Depends on
Dependencies of the latest stable release
No dependencies recorded for this project.
Required by
Tracked projects that depend on this one
No tracked projects depend on this one yet.
Activity
Releases
| Version | Type | Core | PHP | Release date | |
|---|---|---|---|---|---|
| 1.0.x-dev | Dev | 10–11 | PHP >=8.2 | Oct 20, 2026 |