Faved is a lightweight, self-hosted bookmark manager designed for users who want full control over their saved web links without relying on commercial services like Pocket or Raindrop.io. It’s ideal for privacy-conscious individuals, researchers, and power users who need to organize large collections of links with custom tags and quick access. Built for both desktop and mobile, Faved eliminates tracking, ads, and cloud dependency by storing all data locally.
Technically, Faved combines a React + Tailwind CSS + Shadcn UI frontend with a PHP 8 and SQLite backend, deployed via Docker for easy self-hosting. It supports importing bookmarks from Chrome, Safari, Firefox, Edge, and fully preserves folder structures. The system is optimized for speed, with page loads under 100ms even with 2000+ bookmarks, and includes a secure browser bookmarklet for one-click saving from any device.
What You Get
- Clean, Responsive UI - A distraction-free interface with instant search, dark mode, and multiple layout options that works seamlessly on desktop and mobile browsers.
- Advanced Nested Tagging System - Create hierarchical, color-coded tags and pin frequently used tags to the top for rapid access and organization.
- Browser Bookmarklet - Save links from any browser (Chrome, Safari, Firefox, Edge) without extensions—just drag a bookmarklet to your toolbar for one-click saving.
- Pocket Migration Tool - Import all your saved links, tags, collections, and notes from Pocket via a ZIP file upload before its July 2025 shutdown.
- Browser Bookmark Import - Fully preserve your existing folder structure when importing bookmarks from Chrome, Safari, Firefox, and Edge.
- Self-Hosted & Local Storage - All data is stored locally on your server or device using SQLite; no data leaves your control. No cloud dependency or tracking.
- User Authorization - Secure your Faved instance with login credentials, especially important when hosting publicly accessible endpoints.
- Docker-Based Deployment - Deploy Faved in seconds using a single Docker command with persistent storage via volume mounting.
Common Use Cases
- Migrating from Pocket before its shutdown - Users are moving their entire bookmark library—including tags and notes—from Pocket to Faved to retain ownership and avoid data loss.
- Privacy-focused researchers - Academics and analysts store hundreds of research links with nested tags for easy retrieval, without exposing data to third-party trackers.
- Developers managing code references - Engineers use Faved to save documentation links, Stack Overflow threads, and tutorials with custom tags like “React”, “Docker”, or “Debugging”.
- Digital minimalists organizing personal knowledge - Users who reject cloud-based tools use Faved to build a private, searchable archive of web content they want to revisit later.
Under The Hood
Architecture
- PHP application structured with PSR-4 autoloading enforcing clear separation between Framework, Controllers, Models, and Utils, promoting modularity and maintainability
- Controller classes (e.g., ItemsFetchMetadataController, AuthLoginController) follow the Thin Controller pattern, delegating business logic to service or model layers while handling HTTP request routing and response formatting
- Dependency injection is implicitly supported via Composer autoloading and global helper functions, though explicit DI containers are not evident, leading to moderate coupling between components
- Frontend (React) and backend (PHP) are cleanly separated in the Docker setup, with distinct services for Apache/PHP and Node.js, enabling independent scaling and development workflows
- Middleware components like InitMiddleware and AuthMiddleware are pluggable and applied at the framework level, indicating intentional separation of cross-cutting concerns such as authentication and initialization
- The use of Guzzle for external HTTP calls and Respect\Validation for input validation demonstrates thoughtful integration of specialized libraries without monolithic dependencies
Tech Stack
Analysis unavailable for tech_stack.
Code Quality
- Limited testing coverage with no assertions in test functions, indicating superficial or incomplete test validation
- Error handling relies on generic try-catch blocks without custom error classes or structured recovery patterns
- Code organization follows React component-based structure but lacks clear separation of concerns between UI, logic, and data layers
- Naming conventions are inconsistent, with mixed camelCase and snake_case usage across components and utilities
- Type safety is underutilized, with minimal or no TypeScript usage despite React’s ecosystem support
- Linting and code formatting rules appear absent or unenforced, leading to inconsistent style and potential maintainability issues
What Makes It Unique
- Unique item-based data model with built-in metadata auto-extraction and image preview rendering that dynamically adapts to URL content without external APIs
- Atomic component architecture using Radix UI and Class Variance Authority to create reusable, themable item display units with semantic data-slots for consistent UI composition
- Advanced form state management combining react-hook-form with MobX observables to synchronize complex form state, duplicate detection, and image refetching in real-time
- Context-aware layout selector with toggle-based UI that seamlessly switches between list, card, and table views while preserving item state and interaction patterns
- Server-side version checking with intelligent update detection that operates without external dependencies, leveraging lightweight PHP utilities for local app integrity validation
- Comprehensive accessibility and visual feedback system embedded directly into UI primitives, including hover states, focus rings, and countdown-based window closure for user workflow continuity