Overview
Discover what makes Slink powerful
Slink is a self‑hosted image sharing platform that lets developers deploy a fully functional, privacy‑first media server without relying on third‑party cloud services. Built with **Symfony** (PHP) for the backend and **SvelteKit** for a reactive, single‑page frontend, it exposes a rich set of APIs and hooks that enable programmatic access to uploads, tagging, analytics, and storage management. The architecture is deliberately modular: the core Symfony services handle authentication, file handling, and business logic while SvelteKit consumes a JSON‑only API, enabling easy replacement of the UI or integration into existing frontends.
Multi‑format image support
Concurrent multi‑file uploads
Hierarchical tag system
Flexible storage backends
Overview
Slink is a self‑hosted image sharing platform that lets developers deploy a fully functional, privacy‑first media server without relying on third‑party cloud services. Built with Symfony (PHP) for the backend and SvelteKit for a reactive, single‑page frontend, it exposes a rich set of APIs and hooks that enable programmatic access to uploads, tagging, analytics, and storage management. The architecture is deliberately modular: the core Symfony services handle authentication, file handling, and business logic while SvelteKit consumes a JSON‑only API, enabling easy replacement of the UI or integration into existing frontends.
Key Features
- Multi‑format image support (PNG, JPG, WEBP, SVG, BMP, ICO, GIF, AVIF, HEIC, TIFF) with automatic transcoding and validation.
- Concurrent multi‑file uploads with per‑file progress, retry logic, and server‑side deduplication based on hash comparison.
- Hierarchical tag system that supports nested tags, full‑text search, and bulk operations via API.
- Flexible storage backends: local disk, SMB/CIFS shares, and AWS S3 are all first‑class options; the storage layer is abstracted through Symfony’s
Filesystemcomponent. - Public and private galleries with customizable share links that can enforce size limits or expiration dates.
- Role‑based access control and optional user approval workflows for moderated uploads.
Technical Stack
| Layer | Technology | Rationale |
|---|---|---|
| Backend | Symfony 6 (PHP) | Mature framework with dependency injection, event system, and robust security components. |
| API | Symfony API Platform / FOSRestBundle | Generates RESTful endpoints, OpenAPI docs, and integrates with Symfony security. |
| Frontend | SvelteKit (TypeScript) | Lightweight, component‑based UI that consumes the API; supports SSR for SEO and fast initial load. |
| Storage | Symfony Filesystem + Flysystem adapters (local, SMB, S3) | Abstracts file operations; allows adding new providers with minimal code changes. |
| Database | PostgreSQL / MySQL (via Doctrine ORM) | Stores user accounts, image metadata, tags, and audit logs. |
| Containerization | Docker + Compose (official images) | Simplifies deployment; the repo includes ready‑to‑run containers for all services. |
Core Capabilities
- Programmatic Uploads:
POST /api/imagesaccepts multipart form data; returns image metadata and public URL. - Tag Management: CRUD endpoints for tags, including bulk association/dissociation.
- Analytics API: Endpoints expose per‑user storage usage, upload counts, and access logs.
- Webhooks: Configurable outbound events (e.g.,
image.uploaded,user.approved) that can trigger CI/CD pipelines or external services. - CLI Tools: Symfony console commands for user management, cleanup of orphaned files, and cache purging.
Deployment & Infrastructure
Slink ships with Docker images for both the web server and database, making it trivial to spin up a production instance:
- Self‑hosting: Requires PHP 8.1+, Node.js (for SvelteKit build), and a relational database.
- Scalability: The stateless API layer can be horizontally scaled behind a load balancer; file storage is externalized, so multiple instances can share the same backend.
- High Availability: The storage layer’s abstraction allows swapping to a distributed file system (e.g., MinIO) without code changes.
- CI/CD Friendly: The Dockerfile is minimal and supports multi‑stage builds; CI pipelines can publish new images to registries automatically.
Integration & Extensibility
- Plugin System: Custom Symfony bundles can hook into events (e.g.,
image.preUpload,user.postLogin) to extend functionality. - API Hooks: Developers can consume the public API from any language; the OpenAPI spec is auto‑generated.
- Custom Storage Providers: Adding a new provider involves implementing the
FilesystemInterface; existing code remains untouched. - Theming: SvelteKit’s component architecture allows swapping themes or integrating with existing CSS frameworks.
Developer Experience
- Configuration: All settings are exposed via environment variables; the docs provide a comprehensive reference for each variable.
- Documentation: The official site hosts detailed guides, API references, and a “Getting Started” tutorial that covers both Docker and manual setups.
- Community: Active issue tracker, pull‑request guidelines, and a Slack/Discord channel for quick support.
- Licensing: MIT license encourages internal use and commercial deployment without licensing fees.
Use Cases
- Team Collaboration: Internal design teams can host a shared gallery with role‑based permissions and audit logs.
- Developer Portfolios: Embed Slink in personal blogs or GitHub READMEs to host screenshots and diagrams.
- Educational Platforms: Institutions can provide a private image repository for student projects, leveraging the deduplication feature to save storage.
- Automated CI Artifacts: Use webhooks to publish build screenshots or test coverage images directly to Slink for easy sharing with stakeholders.
Advantages
- Performance: Symfony’s HTTP cache and SvelteKit’s SSR reduce latency; the storage abstraction allows using SSDs or high‑throughput object stores.
- Flexibility: The modular
Open SourceReady to get started?
Join the community and start self-hosting Slink today
Related Apps in other
Immich
Self‑hosted photo and video manager
Syncthing
Peer‑to‑peer file sync, no central server
Strapi
Open-source headless CMS for modern developers
reveal.js
Create stunning web‑based presentations with HTML, CSS and JavaScript
Stirling-PDF
Local web PDF editor with split, merge, convert and more
MinIO
Fast, S3-compatible object storage for AI and analytics
Weekly Views
Repository Health
Information
Explore More Apps
Outline Server
Create and manage your own VPN with ease
cmyflix
Fast DIY Netflix clone for Raspberry Pi and NAS
Offen Fair Web Analytics
Privacy‑first web analytics for self‑hosted sites
Supysonic
Self‑hosted Subsonic API server for streaming and managing music
Glowing Bear
Web IRC client for WeeChat, mobile‑friendly and feature rich
Xandikos
Self-hosted other
