Your server, your data
+Files are stored on infrastructure you control, in the country you choose — not with a transfer service.
+diff --git a/.ai/rules/website.md b/.ai/rules/website.md new file mode 100644 index 0000000..6f091e5 --- /dev/null +++ b/.ai/rules/website.md @@ -0,0 +1,9 @@ +--- +paths: + - 'website/**' +--- + +# Website + +## website/ is the live site, uploaded by hand +website/ is a faithful copy of sealshare.nonameweb.ch (METANET hosting), hand-written HTML/CSS with no build step, uploaded wholesale when it changes. Colours in css/theme.css are copied from resources/css/material-scheme.json — copy them again whenever the scheme is regenerated. The comparison tables are dated and every competitor value has a source from the product's own site, docs or repo; an unsourced value is "—", never a guess. Never call SealShare's encryption end-to-end (it encrypts at rest on the server). Nothing may load from another host except plausible.io. tests/Feature/WebsiteTest.php guards all of this. diff --git a/CHANGELOG.md b/CHANGELOG.md index c779cbf..5796273 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- The README called SealShare's encryption end-to-end. Files are encrypted at rest on the server; the README now says so, and that a share password's key is never stored. - The admin dashboard passed its sort column and direction straight to the query, so a crafted Livewire request could order shares by any column or cause a server error. It now sorts only by the columns it shows and otherwise falls back to newest first. ## [1.2.0] - 2026-09-10 diff --git a/README.md b/README.md index ea022c0..0634a98 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,23 @@ A simple, self-hosted file sharing solution built with Laravel. Upload files, get a shareable link, done. All files are encrypted at rest with AES-256-GCM. +**Website:** [sealshare.nonameweb.ch](https://sealshare.nonameweb.ch) + +## Screenshots + +
+
+
+
+
+
SealShare is file sharing software you install on your own server. Your company gets its own upload page to send files to customers and receive files from them — encrypted at rest, on your domain, without relying on an outside service.
+ +
+
+ Transfer services are quick, but every file you exchange with a customer ends up on their servers, under their terms. SealShare is a simple setup for your own upload platform: a secure way to get data from customers and share data with them, entirely under your control.
+Files are stored on infrastructure you control, in the country you choose — not with a transfer service.
+Customers open a link and download. Nobody has to sign up anywhere.
+Your domain, and your logo, title and description on the upload page.
+Open source under the MIT licence. Use it for the whole company, without seats or subscriptions.
+Three steps, for you and for the people you share with.
+Drop files or whole folders. Add a password, an expiry and a download limit if you want.
+Copy the link, show it as a QR code, or send it from your phone's share sheet.
+Your customer opens the link and downloads single files or everything as a ZIP. Expired shares delete themselves.
+And nothing that turns it into a project: SealShare runs from a single container and is set up in a few minutes. It follows your system's light or dark theme, on desktop and phone.
+Drag & drop or browse; folders keep their structure, with live upload progress.
+Every upload gets its own random, hard-to-guess link.
+Show the link as a QR code, save it as a PNG, or pass it to the phone's share sheet.
+Protect a share with a password; its encryption key is derived from it.
+Encrypted at rest with AES-256-GCM; with a share password the key is never stored.
+From 1 hour to 30 days, or never when the admin allows it.
+Close a share after a set number of downloads.
+Recipients download everything in one archive.
+Expired shares and their files are deleted every hour.
+Every share with its size, downloads and expiry; storage use at a glance.
+Maximum file and share size, files per share, storage quota, default expiry.
+Your logo, site title and description on the upload page.
+Optionally close the upload page to everyone who does not have the password.
+Admins protect their accounts with authenticator app codes.
+FrankenPHP with Laravel Octane, automatic TLS and SQLite — no separate database.
+The same interface on a laptop and a phone, in light or dark.
+
+
+
+
+
+
+
+
+
+
+ Hosted transfer services keep your files on their servers; other self-hosted tools do the same job in their own way. Every value below comes from the product's own website, documentation or repository.
+Quick to use, but the files sit with the provider, under the provider's terms.
+| Criterion | SealShare | WeTransfer | SwissTransfer | Dropbox Transfer | Google Drive links |
|---|---|---|---|---|---|
| Files stored | Your server | WeTransfer's cloud (EU or US) | Infomaniak, Switzerland | Dropbox's cloud (US by default) | Google's cloud |
| Operated by | You | WeTransfer | Infomaniak | Dropbox | |
| Recipient needs an account | No | No | No | No | No, with “Anyone with the link” |
| Password protection | Yes | Yes1 | Yes | Standard plan and up | — |
| Link expiry | Yes, 1 hour to 30 days, or never | Up to 3 or 7 days on Free1 | 1 to 30 days4 | 7 days; custom on Standard and up | Work or school accounts only |
| Download limit | Yes | — | Yes, 1 to 250 | — | — |
| Encryption at rest | Yes, AES-256-GCM | Yes, AES-256 | Yes, AES-256 | Yes, AES-256 | Yes, AES-256 |
| End-to-end encryption | No | Enterprise add-on | No | No | Higher Workspace editions |
| Folder upload | Yes | No, folders are flattened | Yes | Yes | Yes |
| Custom branding | Yes: logo, title, description | Ultimate plan and up | Through paid kDrive | Standard plan and up | — |
| Maximum file size | Set by you (server limits) | 3 GB or 100 GB a month on Free1 | 50 GB per transfer | 2 GB on Basic (free) | 15 GB of free storage |
| Licence and cost | MIT, free | Free (non-commercial use); Starter USD 8/month2 | Free | Free; Plus EUR 11.99/month2 | Free; 100 GB CHF 2/month2 |
| QR code for the link | Yes | — | — | — | — |
Open-source apps you run yourself, like SealShare. Included are single-purpose tools that install with Docker and had a release in the last 12 months.
+| Criterion | SealShare | Pingvin Share X | PsiTransfer | Gokapi | Erugo |
|---|---|---|---|---|---|
| Files stored | Your server | Your server or S3 | Your server | Your server or S3 | Your server |
| Operated by | You | You | You | You | You |
| Recipient needs an account | No | No | No | No | No |
| Password protection | Yes | Yes | Yes | Yes | Yes |
| Link expiry | Yes, 1 hour to 30 days, or never | Yes, up to a maximum you set | Yes, 1 hour to 8 weeks | Yes, after days or downloads | Yes, 7 days by default |
| Download limit | Yes | View limit only | One-time download only | Yes | Yes |
| Encryption at rest | Yes, AES-256-GCM | No | No | Optional | No |
| End-to-end encryption | No | No | No | Optional | No |
| Folder upload | Yes | Yes | No | No, files are listed singly3 | Yes, keeps structure |
| Custom branding | Yes: logo, title, description | Yes: logo, name, colours, CSS | Yes, by editing templates | Yes: logo, CSS, JavaScript | Yes: logo, colours, themes |
| Maximum file size | Set by you (server limits) | Set by you (1 GB per share by default) | Set by you (no limit by default) | Set by you (100 GB by default) | Set by you (2 GB per share by default) |
| Licence and cost | MIT, free | BSD-2-Clause, free | BSD-2-Clause, free | AGPL-3.0, free | MIT, free |
| QR code for the link | Yes | Yes | Yes | Yes | No |
SealShare encrypts files on the server as they arrive. With a share password the key is never stored; without one it is kept in SealShare's database. A value marked “—” could not be confirmed from the product's own sources. Checked on 13 September 2026.
+1 WeTransfer's pricing page and its help centre disagree. The pricing page lists password protection on every plan, expiry up to 7 days and up to 100 GB a month on Free; the help centre (May 2026) lists password protection under Ultimate, expiry up to 3 days, and up to 10 transfers or 3 GB in 30 days on Free.
+2 The cheapest paid plan, at the price shown in Switzerland on the date above; prices differ by country. WeTransfer's Free plan is for individual, non-commercial use. Dropbox Plus has no passwords or branding for transfers; Google One 100 GB adds storage, not sharing features.
+3 Gokapi's web interface lists the files of a dropped folder one by one; its command-line client uploads a folder as a ZIP file.
+4 SwissTransfer's upload form offers 1, 3, 7, 15 or 30 days; Infomaniak's help articles describe 15 days, with an extension to 30 days offered to the sender by email.
+All you need is a server with Docker and a domain name.
+mkdir sealshare && cd sealshare
+curl -O https://raw.githubusercontent.com/surtic86/SealShare/main/docker-compose.example.yml
+cp docker-compose.example.yml docker-compose.yml
+
+# Generate an app key and paste it into docker-compose.yml
+docker run --rm ghcr.io/surtic86/sealshare:latest php artisan key:generate --show
+
+# Edit docker-compose.yml — set APP_KEY, APP_URL, and SERVER_NAME
+# Then start:
+docker compose up -d
+ No. SealShare encrypts files on your server as they arrive, with AES-256-GCM in chunks, and stores them only in encrypted form. Because the server does the encrypting, it handles the files in the clear while they are uploaded and downloaded — which is why it matters that the server is yours.
+For a share without a password the key is kept in SealShare's database. With a share password the key is derived from that password and never stored, so the files cannot be decrypted without it.
+Yes. Anyone who can open your upload page can upload and gets a link to send back to you. To keep the page for the people you choose, turn on the optional system password in the admin settings and give it to your customers.
+As big as your server allows. The Docker image accepts up to 4 GB per file by default; within that, you set the maximum file size and share size in the admin settings (100 MB and 2 GB out of the box). Behind a reverse proxy, raise its request size and timeouts as well.
+Nothing. SealShare is open source under the MIT licence. You pay only for the server you run it on.
+You do. There is no SealShare cloud and no account with us: you install the Docker image on a server you run, and your files stay on it instead of passing through a transfer service.
+This page explains what happens to your data when you visit sealshare.nonameweb.ch. It is about this website only. SealShare itself is software that companies install and run on their own servers; this website does not host it, and files shared through a SealShare installation never reach us.
+ +This website is run by noNameWEB, Switzerland. For any question about your data, write to surtic86@gmail.com.
+ +The website is hosted by METANET AG in Switzerland. When you open a page, the web server records technical data in its logs, as every web server does: your IP address, the date and time, the page requested, your browser's user agent and the referring page. These logs keep the site running and secure; they are not used to identify you and are kept only as long as the host's standard retention.
+ +We count visits with Plausible Analytics, a privacy-friendly service hosted in the EU. Plausible uses no cookies and stores no personal data: it does not keep your IP address or build a profile of you. What we see are totals, such as page views, referring sites, countries and device types. See Plausible's data policy.
+ +Links to Gitea, the source repository and Plausible lead to sites with their own privacy policies.
+ +Under the Swiss Federal Act on Data Protection you can ask what data about you is processed, and have it corrected or deleted. Write to the address above.
+ +If this website starts handling data differently, this page is updated and its date changed.
+