Noureddine RAMDI / Faved: A self-hosted bookmark manager with a hybrid TypeScript and PHP architecture

Created Mon, 04 May 2026 10:23:01 +0000 Modified Sat, 23 May 2026 20:41:27 +0000

denho/faved

Faved tackles a common frustration: managing bookmarks privately and efficiently without relying on cloud services or browser extensions. Its hybrid architecture pairs a modern TypeScript/React frontend with a PHP 8 backend and SQLite database, all running locally under Apache. This combination offers a neat balance between a slick user interface and a straightforward, minimal dependency backend.

What faved does and its architecture

At its core, Faved is a self-hosted bookmark manager designed to keep all your data local, with zero dependencies on external services. It stores bookmarks and metadata in a SQLite database managed by a PHP 8 backend running on Apache, which is a reliable and widely supported stack.

The frontend is built with TypeScript and React, using Vite for fast development and Tailwind CSS with Shadcn UI components for styling and UI composition. This modern approach gives Faved a responsive, clean interface that works well across devices.

A key architectural aspect is the separation of concerns: controllers handle requests, models manage data, views render the frontend, and framework components support the app’s plumbing. This layered approach makes the codebase easier to maintain and extend.

Faved supports nested tags, a feature that lets users organize bookmarks hierarchically with color customization for better visual management. This is more sophisticated than flat tag systems found in many bookmark managers.

To enhance usability, Faved offers import tools for bookmarks from Chrome, Safari, Firefox, Edge, Raindrop.io, and Pocket, covering most popular sources.

For mobile and offline use, Faved implements a Progressive Web App (PWA) that delivers a near-native experience without the need for installable apps.

Cross-platform saving is streamlined with a lightweight bookmarklet and Apple Shortcuts integration, avoiding the complexity and privacy concerns of browser extensions.

What makes faved technically interesting

Faved’s hybrid stack is somewhat unusual: a modern TypeScript frontend backed by a PHP 8 + SQLite backend. This choice has tradeoffs worth understanding.

On the plus side, PHP 8 is a mature, well-supported backend language with a broad hosting ecosystem. SQLite offers a zero-configuration, file-based database ideal for single-user local storage without the overhead of running a database server. This keeps the footprint minimal and the deployment simple.

However, SQLite is not designed for high concurrency or multi-user environments, which means Faved is best suited for personal or small-scale use. The local-first approach limits syncing capabilities inherently, so users needing multi-device sync must rely on external tools or manual export/import.

The frontend’s use of React with Vite and Tailwind offers a very smooth developer experience and a clean, performant UI. Shadcn UI components add a polished look with accessible patterns.

The nested tag system stands out as a thoughtful feature. It supports hierarchical relationships between tags with color-coding, making it easier to visually parse and organize large bookmark collections. This feature is often missing or clunky in other bookmark managers.

The bookmarklet and Apple Shortcuts integration is a clever UX decision. Instead of building complex browser extensions, which can be privacy-sensitive and hard to maintain, Faved offers a lightweight, cross-browser method to save bookmarks quickly.

Under the hood, the codebase splits responsibilities clearly, which should help maintainability and reduce technical debt. The PHP backend is straightforward, focusing on SQLite queries and data serialization, while the React frontend handles UI state and PWA features.

Explore the project

The repository organizes its code clearly:

  • backend/ contains PHP 8 code responsible for API endpoints and data management with SQLite.
  • frontend/ holds the TypeScript and React app, built with Vite, Tailwind, and Shadcn UI.
  • docs/ or the README files (if present) provide guidance on configuration, usage, and import/export features.

The README gives an overview of features, architecture, and usage but does not provide explicit installation commands. Deployment involves setting up a PHP 8 environment with SQLite and serving the frontend and backend under Apache or a compatible web server.

Bookmark importers support popular browsers and services, easing migration.

To get a feel for how it works, explore the frontend source to understand UI components and PWA setup, and inspect the backend controllers to see how PHP interacts with SQLite and handles requests.

Verdict

Faved is a solid self-hosted bookmark manager option for users who want to keep complete control of their data locally without relying on cloud services or browser extensions.

Its hybrid architecture balances a modern, responsive frontend with a familiar PHP backend leveraging SQLite’s simplicity. The nested tag system with color customization and the PWA support are nice touches that improve usability.

That said, the choice of SQLite and PHP 8 backend sets clear boundaries: it’s primarily for single-user or small-scale private use. It lacks built-in sync or collaborative features, and scaling beyond a personal setup would require additional infrastructure.

If you value local-first data ownership, want a clean UI without browser extension overhead, and are comfortable setting up a PHP + SQLite environment, Faved is worth exploring. It solves a real problem with an honest, maintainable codebase and practical UX decisions.


→ GitHub Repo: denho/faved ⭐ 937 · TypeScript