faved
A private, self-hosted bookmark manager built for large collections—nested tags, PWA support, and zero cloud dependency.
Faved is a self-hosted, open-source bookmark manager designed for users who need full control over their saved links without relying on commercial services. Built for both privacy-conscious individuals and power users with large collections, it stores all data locally using SQLite—no telemetry, no cloud sync, no subscription required.
The application pairs a lean PHP 8 + Apache backend with a React 19 SPA frontend, deployed as a single Docker image. Bookmarks are enriched automatically with titles, descriptions, and preview images fetched concurrently via Guzzle Pool. A nested tag system lets you build hierarchical taxonomies with rollup support, color coding, and sidebar pinning—far beyond the flat tags most bookmark tools offer.
Faved supports one-click saving via a lightweight browser bookmarklet (no extension needed) and integrates with Apple Shortcuts for native iOS/macOS share-sheet capture. It imports from Chrome, Safari, Firefox, and Edge while preserving folder structures as nested tags, and migrates from Pocket and Raindrop.io including collections and tags. The interface is installable as a PWA for a near-native mobile experience.
What You Get
- Nested Tag System - Build hierarchical tag taxonomies (e.g., Programming → Backend → Go) with color coding, descriptions, rollup to include child-tag items, and sidebar pinning for fast access.
- Automatic Metadata Fetching - Titles, descriptions, and preview images are fetched automatically when you save a bookmark, with bulk refetch available via concurrent Guzzle Pool requests.
- Browser Bookmarklet - Save links from any browser without installing an extension—drag a bookmarklet to your toolbar for one-click saving with a countdown close-on-success UX.
- Multi-Layout Item View - Switch between card, list, and table layouts with customizable field visibility; state is persisted in the URL so links can be shared with filters and layout intact.
- Bulk Actions - Select multiple bookmarks to delete, update tags, or refetch metadata in one operation—essential for managing large collections.
- Import & Migration - Import from Chrome, Safari, Firefox, and Edge preserving folder structure as nested tags; migrate from Pocket and Raindrop.io retaining collections, tags, and notes.
- PWA & Apple Shortcuts - Install as a Progressive Web App for a near-native mobile experience; integrate with Apple Shortcuts to capture links directly from the iOS/macOS share sheet.
- Duplicate Detection - Warns you when adding a URL that already exists in your collection, preventing accidental duplicates before they accumulate.
Common Use Cases
- Building a private research archive - Academics and analysts save hundreds of links with nested subject tags (e.g., AI → Papers → 2025), keeping sensitive research off third-party servers.
- Migrating from Pocket or Raindrop.io - Users moving off shuttered or subscription-gated services import their full archive—including tags, collections, and notes—into a self-controlled instance.
- Developer reference library - Engineers bookmark documentation, Stack Overflow threads, and RFCs organized under tech-specific nested tags, accessible from any device via bookmarklet.
- Read-it-later queue on mobile - With the PWA installed on iOS and Apple Shortcuts added to the share sheet, users capture articles while browsing and review them later in the app.
- Family or team link sharing - A single self-hosted instance with login credentials serves as a shared bookmark hub for a household or small team, without a subscription.
- Browser migration - When switching browsers, users import their existing bookmarks (Chrome/Firefox/Safari/Edge) and immediately have them organized under the same nested tag hierarchy.
Under The Hood
Architecture Faved employs a clean two-tier architecture: a custom PHP micro-framework handles the backend API and data layer, while a fully decoupled React SPA drives the frontend. The backend follows a thin-controller pattern where route-resolved controllers delegate immediately to the Repository model for data access or to utility services for imports and metadata fetching. A pluggable middleware chain—authentication, CSRF protection, and database migration checks—is composed in reverse order and executed before each controller, providing composable cross-cutting concerns without framework bloat. The frontend maintains its own observable state tree via MobX, with route-level middleware guards mirrored in React Router’s nested layout structure (InitMiddleware, AuthMiddleware, SetupMiddleware). The deployment model consolidates both tiers into a single Apache/PHP Docker container that also serves the pre-built React bundle, eliminating a separate node server in production and avoiding CORS complexity.
Tech Stack The backend runs PHP 8 on Apache with SQLite as the sole data store, accessed through a custom Repository class without an ORM. Guzzle 7 handles outbound HTTP requests for bookmark metadata enrichment, including concurrent pool fetching for bulk operations. Respect/Validation enforces input rules at the controller layer with a typed exception hierarchy. The frontend is built with React 19, TypeScript 5.8, and Vite 7, styled with Tailwind CSS v4 and Shadcn UI components on Radix UI primitives. MobX 6 provides reactive observable state across two stores—mainStore for application data and preferencesStore for persisted user preferences auto-synced to localStorage. Form management uses react-hook-form with Zod v4 validation; drag-and-drop tag reordering uses dnd-kit; toast notifications use Sonner.
Code Quality No automated test files exist anywhere in the repository, which is the most significant quality gap. The PHP backend compensates partially through a well-defined exception hierarchy with consistent HTTP status codes and a central bootstrap exception handler. The TypeScript codebase is strictly typed, and the production build pipeline enforces Prettier formatting and ESLint lint rules as hard prerequisites—the build fails if either check does not pass. MobX actions follow consistent patterns with explicit observable declarations. PHP code is clean and readable but lacks inline documentation. The ServiceContainer provides lightweight dependency resolution without a full IoC container. The absence of tests means correctness relies entirely on manual verification and the type system.
What Makes It Unique Faved’s most distinctive technical decision is building a custom PHP micro-framework rather than using Laravel or Symfony, keeping the entire backend dependency footprint minimal. The nested tag system uses a hierarchical parent-child data model with real-time rollup to include child-tag items in parent tag counts—an uncommon depth for bookmark tools that typically offer flat tags. Parallel metadata fetching via Guzzle Pool enriches multiple bookmarks concurrently. The Apple Shortcuts integration exposes a native share-sheet capture target for iOS users, which is rare among self-hosted web applications. Combined with a PWA manifest for installability, Faved achieves a mobile-native feel from a conventional self-hosted web stack without any React Native or Capacitor dependency.
Self-Hosting
Faved is released under the MIT License, one of the most permissive open-source licenses available. You can use it commercially, modify the source code, redistribute it, and incorporate it into proprietary systems without any obligation to share your changes. The only requirement is preserving the original copyright notice. There are no copyleft implications—your data, your modifications, and your infrastructure remain entirely under your control.
Running Faved yourself requires a Linux server (VPS or bare metal) with Docker installed. The official image (denho/faved) bundles Apache, PHP 8, and the pre-built React frontend into a single container; a single docker run command with a storage volume mount is all that’s needed to start. The storage volume persists the SQLite database file and cached bookmark images, so upgrades are performed by pulling the new image version and restarting the container. You are responsible for your own uptime, SSL termination (Apache config is volume-mounted for customization), database backups (a file copy of the SQLite file is sufficient), and applying image updates as they release.
For those who prefer not to manage infrastructure, faved.cloud offers a managed hosting tier with zero-setup onboarding, automatic backups, encryption at rest, and support. The self-hosted version is fully featured—there are no capabilities withheld behind the cloud plan, and the source code shows no license gates or feature flags. What the cloud tier adds is operational convenience: automatic updates, managed SSL, guaranteed uptime, and a support channel, rather than exclusive features.
Related Apps
AFFiNE
Productivity · Project Management · Note Taking
Write, draw, and plan in one infinite canvas — the open-source alternative to Notion and Miro that keeps your data yours.
AFFiNE
Othermemos
Note Taking
Open-source, self-hosted note-taking built for quick capture — Markdown-native, lightweight, and fully yours.
memos
MITJoplin
Note Taking
The privacy-first, open-source note-taking app with end-to-end encrypted sync, AI assistance, and a powerful plugin ecosystem across every platform.