-
released this
2026-07-07 11:17:52 +03:00 | 0 commits to master since this releaseTanabata File Manager 3.0.0
Tanabata is a multi-user, tag-based web file manager for images and video.
Store your media centrally on your own server and manage it from any browser —
desktop or phone — with tags, pools, near-duplicate detection, and per-object
access control.3.0.0 is a ground-up rewrite — the third generation of the project (the
first was written in C, the second in Flask). It replaces the previous stack
with a Go + Gin backend (Clean Architecture) and a SvelteKit single-page app,
shipped as a single self-hosted Docker image that serves both the REST API and
the built UI on one port.Highlights
- Tag-based organization — tags, tag categories, and auto-tag rules (attach
tag A and tag B follows automatically). - Pools — ordered collections of files, with either a user-defined manual
order (drag-to-reorder) or automatic sorting by content date, name, or
creation. - Near-duplicate detection for images and video via perceptual hashing:
review duplicate clusters, dismiss false positives, and merge a pair
field-by-field. - Powerful filtering — a compact filter DSL over tags, MIME types, and review
state, with fast cursor-based pagination. - Installable PWA — mobile-first UI, dark and light themes, and optional
offline viewing of pinned files. - Self-hosted and private — one Docker image, PostgreSQL, automatic database
migration on first start, and a single.envfor configuration.
Files
- Upload via a form or drag-and-drop straight onto the grid.
- Import in bulk from a folder on the server, with live per-file progress.
- Rich metadata and EXIF extraction; edit notes, content date, and custom
key–value metadata (including nested objects). - Replace a file's content in place (keeps the same ID and links).
- Multi-select (click, Shift-range, touch drag) with bulk actions: edit tags,
add to a pool, mark reviewed, and delete. - Trash with restore and permanent delete.
- Gallery-style viewer with prev/next paging and keyboard navigation.
Tags, categories, and pools
- Full CRUD for tags, categories, and pools, each with notes and metadata.
- Auto-tag rules, optionally applied retroactively to already-tagged files.
- Category views showing shared vs. partial tags across a selection.
- Pools support per-pool file sorting: keep a hand-arranged order, or sort
automatically (manual reordering is disabled while an automatic sort is
active). The in-pool selection offers the same bulk actions as the main grid.
Access control, users, and audit
- Private-by-default model: admins see everything; otherwise access requires a
public flag, ownership, or an explicit per-object grant (read / edit). - Admin panel: manage users, set roles, and block/unblock accounts.
- Every meaningful action is recorded in an audit log.
Security
- JWT auth with short-lived access tokens and rotating refresh tokens.
- Per-file content tokens so long media keeps streaming past access-token expiry.
- Per-IP rate limiting on the auth endpoints, conservative security headers, and
trusted-proxy handling for correct client IPs behind a reverse proxy. - Runs as a non-root user in the container; the initial admin is bootstrapped
from environment variables (no default credentials are shipped).
Deployment
- Single multi-stage Docker image (no Node runtime in the final image) plus
PostgreSQL 14+ (bundled container or a host database). - Published on loopback by default and designed to sit behind a reverse proxy
(TLS, large uploads, media streaming). - First run is minimal: fill in
.env, thendocker compose up— migrations
apply automatically and the admin account is created on startup. - Graceful shutdown drains in-flight requests on stop/redeploy, with the drain
window shared between the app and the container's stop grace period.
Tech stack
- Backend: Go + Gin, Clean Architecture, pgx v5, goose migrations.
- Frontend: SvelteKit (SPA mode), Svelte 5, Tailwind CSS v4, TypeScript.
- Database: PostgreSQL 14+.
- API: documented in
openapi.yaml; the frontend types are generated from it.
License
Tanabata File Manager is licensed under the GNU Affero General Public License
v3.0 or later (AGPL-3.0-or-later).Downloads
- Tag-based organization — tags, tag categories, and auto-tag rules (attach