tessera

mcp
Guvenlik Denetimi
Gecti
Health Gecti
  • License — License: AGPL-3.0
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Community trust — 63 GitHub stars
Code Gecti
  • Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Gecti
  • Permissions — No dangerous permissions requested

Bu listing icin henuz AI raporu yok.

SUMMARY

Self-hosted file and note sharing that cleans up after itself.

README.md

Tessera

Self-hosted file and note sharing that cleans up after itself.

English · 繁體中文 · 简体中文 · 日本語

License: AGPL-3.0

https://github.com/user-attachments/assets/f1c95b78-8561-4184-9616-c57e3fa3bc5a

The upload page A shared snippet, as the recipient sees it

Upload a file, a folder, a snippet of code or a link, and get back a short code and a URL. Whoever has them can open it until it expires or has been downloaded as many times as you allowed. Then it is deleted.

No account is needed to send something, unless you turn that off. Tessera runs as one binary with the web app built in, keeps its data in SQLite, PostgreSQL or MySQL, and stores files on local disk or in object storage.

Who it is for

Just you, and people you trust. Run it on a NAS or a home server, behind your VPN, to move files between your own devices or hand them to friends. The defaults suit this: anonymous uploads on, SQLite and local disk, nothing else to set up. See the personal example.

A public instance for strangers. Anyone can upload, so every resource is spent by people you do not know. Cap the file size and the total storage, shorten the default lifetime, keep sign-up closed or invite-only, and point it at a malware scanner. See the public example.

A team or an organization. Turn anonymous uploads off and let people sign in through your company's OpenID Connect provider. Roles control who may upload, who may see everyone's shares and who may change settings, and each account can have its own quota. PostgreSQL and S3-compatible storage scale past one machine.

Features

Under the hood

  • Big files can skip your server. With S3 or Google Cloud Storage behind it, uploads go straight to the bucket and plain downloads are redirected there. A share with a password or a download limit always comes through the server, so those limits still hold.
  • Limits that hold under load. A retrieval is counted in one conditional database update, so two people racing for a one-time share cannot both get it. Expiry is checked on every request, and code lookups are rate-limited.
  • Streams instead of buffering. Memory use stays flat however large the file.
  • Storage you can mix. Local disk, S3-compatible stores, Azure Blob, Google Cloud Storage and WebDAV, several at once, added or retired from the admin panel without a restart. One large file can even be split across buckets (off by default).
  • SQLite, PostgreSQL or MySQL, each with its own hand-written migrations.
  • An API to build on. The OpenAPI contract is generated from the server code, checked in CI and fuzz-tested. The CLI and API tokens use the same endpoints as the web app.
  • Quotas and limits per role, per account and for anonymous uploads together, plus resumable uploads and optional malware scanning.

For the people using it

  • Expiry and download limits. Each share has a lifetime and, optionally, a maximum number of retrievals.
  • Passwords, required before anything is shown or downloaded.
  • Previews. Code is syntax-highlighted, and images, SVGs and Mermaid diagrams show in the page. Links pasted into chat apps get a preview card.
  • Folders and many files, downloaded together as one archive.
  • Accounts when you want them. Open, invite-only or closed sign-up; passwords, GitHub, Discord or any OpenID Connect provider.
  • Interface in English, Traditional Chinese and Japanese.

Admin panel

The admin dashboard

Everything an operator needs is at /admin, and nearly every setting takes effect on the next request, without a restart:

  • Dashboard: storage used and where it lives, traffic, trends, and warnings about risky settings.
  • Users: suspend or delete accounts, change roles, set per-account quotas, and end everything one account uploaded.
  • Shares: every share on the instance, including anonymous ones, with who uploaded it.
  • Invite codes, roles and permissions.
  • Settings: sign-in providers, upload limits, expiry defaults, storage backends, email, scanning, link previews and branding.

Without a browser, the same settings are available from the command line: tessera-server settings list, settings set <key> <value>.

Quick start

With Docker:

docker run -d --name tessera --restart unless-stopped \
  -p 12923:12923 -v tessera-data:/data ghcr.io/limatura/tessera

Then open http://localhost:12923. On first start the server creates an administrator account and prints its password in the log, once:

docker logs tessera | grep password

From a clone of this repository, docker compose up -d does the same, with the settings kept in docker-compose.yml.

Before you put it on the internet, read the public deployment example. Anonymous uploads are on by default, and without a storage limit anyone who can reach the server can fill its disk.

From source

You need Rust and pnpm.

pnpm install
pnpm --filter web build
pnpm server:dev

Configuration

Most settings live in the admin panel. The few that must be known before the server starts, such as the port, the database URL and the data directory, are environment variables:

TESSERA_SERVER__PORT=9000
TESSERA_DATABASE__URL=postgres://tessera:secret@localhost/tessera
TESSERA_SERVER__DATA_DIR=/var/lib/tessera

Two commented starting points: a personal instance and a public one. For systemd there is a unit file.

Storage

Files go to a local directory unless you add another backend in the admin panel.

Backend Notes
Local disk The default
S3-compatible Tested against MinIO, Garage, RustFS, SeaweedFS, VersityGW and s3proxy. AWS S3, Cloudflare R2 and Backblaze B2 are checked when credentials are available.
Azure Blob Storage Tested against Azurite
Google Cloud Storage Built in, not yet covered by tests
WebDAV Small files only, up to share.inline_threshold_bytes (64 KiB by default)

Command-line client

Install tess for Linux or macOS. Windows builds are on the releases page, and cargo install --path apps/cli builds it from source.

curl -fsSL https://raw.githubusercontent.com/Limatura/tessera/main/scripts/install.sh | sh

Until there is a stable release, add -s -- --version <version> with the release you want.

tess login https://share.example.com
tess send report.pdf --expires 24
tess get https://share.example.com/s/P8D72PSF
echo "hello" | tess send -
tess ls
tess rm P8D72PSF
tess

tess on its own opens a full-screen view to find files and send them without typing paths, and to manage your shares.

Marking a folder and a file in tess, sending them, and getting the link and a QR code

--encrypt seals the content before it leaves your machine; the key is the part of the link after #, which the server never sees.

No CLI at hand? curl will do, and prints the link:

curl -T report.pdf https://share.example.com/
echo "hello" | curl -T - https://share.example.com/

Options go in headers: -H 'X-Share-Expires: 1d', -H 'X-Share-Max-Downloads: 3', -H 'X-Share-Password: …'.

Documentation

Contributing

See CONTRIBUTING.md. Security problems go through SECURITY.md, not the issue tracker.

License

AGPL-3.0. If you run a modified Tessera for other people, you must offer them its source.

Yorumlar (0)

Sonuc bulunamadi