A self-hosted file-sharing application with a Go backend and Svelte frontend. Create password-protected, expiring shares, set download limits, and let others upload files to you via reverse shares.
my-project-files) or let one be auto-generatedREQUIRE_2FA); mutually exclusive with SSO/OIDCshare.created, file.upload.completed, etc.) with HMAC-SHA256 signed deliveries, retry logic, and a delivery logLoginRateLimiter (5 req/min) is applied to POST /auth/login, RegisterRateLimiter (3 req/min) to POST /auth/register, and TFAVerifyRateLimiter (5 req/min) to the 2FA verification endpoints. The APIRateLimiter (60 req/min) helper is available in internal/middleware/ratelimit.go but not wired up by default. When running behind a reverse proxy, configure TRUSTED_PROXIES so that forwarded client IPs are used for rate limiting instead of the proxy's address — see Networking / Reverse Proxy.| Login — Light | Login — Dark |
![]() |
![]() |
| Dashboard — Light | Dashboard — Dark |
![]() |
![]() |
| Create Share — Light | Create Share — Dark |
![]() |
![]() |
| Share Detail — Light | Share Detail — Dark |
![]() |
![]() |
| Settings — Light | Admin: Users — Dark |
![]() |
![]() |
All 34 screenshots (light and dark variants for every page) live in the
screenshots/directory and are regenerated automatically viamake screenshots.
docker run -d \
-p 8080:8080 \
-v enlace-data:/app/data \
-v enlace-uploads:/app/uploads \
-e BASE_URL=http://localhost:8080 \
ghcr.io/amalgamated-tools/enlace:latest
Open http://localhost:8080 and register your first user.
First admin bootstrap: The first user to register on a fresh instance is automatically granted admin privileges. This also applies to the first user created via OIDC sign-in when SSO is enabled. Subsequent registrations create regular users. Once an admin account exists, additional admins can be created or promoted via the admin panel or
POST /api/v1/admin/users.
For Docker Compose setup and production builds, see the Deployment guide.
| Topic | Link |
|---|---|
| Configuration | docs/configuration.md |
| API Reference | docs/api.md |
| Deployment | docs/deployment.md |
| Development | docs/development.md |
| OIDC / SSO | docs/oidc.md |
| Architecture | docs/architecture.md |
| Contributing | CONTRIBUTING.md |
| Code of Conduct | CODE_OF_CONDUCT.md |
cmd/enlace/ # main entrypoint
internal/
config/ # environment-based configuration
crypto/ # AES-GCM encryption helpers (secrets at rest)
database/ # SQLite helpers & migrations
handler/ # HTTP handlers and router (chi)
integration/ # integration tests (//go:build integration)
middleware/ # auth and rate-limiting middleware
model/ # domain types (Share, File, User)
otel/ # structured logging setup (slog)
repository/ # data-access layer
service/ # business logic
storage/ # Storage interface + local & S3 implementations
telemetry/ # two-level anonymous telemetry (mandatory boot ping + opt-in event telemetry)
frontend/ # Svelte + TypeScript + Vite app
e2e/ # Playwright end-to-end tests
docs/ # documentation and auto-generated OpenAPI specs
scripts/ # release and utility scripts
Enlace is released under the MIT License.