$ show OtterBrowser/otter-browser
Otter Browser is a full-featured desktop web browser written in C++ and Qt, focused on user control and privacy rather than analytics or data science. It implements the complete browser feature set: tabbed browsing, sessions, bookmarks, history, RSS/Atom feeds, cookies, password management, content blocking, ad blocking, mouse gestures, spell checking, search engines, SSL certificate inspection, and import/export of user data from Opera, HTML, OPML, and XBEL formats. The system is a Qt Widgets desktop application, not a service or library, with the entry point in src/main.cpp and central orchestration in Application and MainWindow. Core browser services are implemented as manager singletons, UI is built from custom widgets and dialogs, and rendering is abstracted behind a WebBackend interface with two concrete backends: the legacy QtWebKit backend and the Chromium-based QtWebEngine backend. Data flows through a layered architecture: user actions are routed through a centralized ActionExecutor/ActionsManager system; network requests are managed by NetworkManagerFactory, NetworkManager, CookieJar, and NetworkCache; persistent user data is stored in JSON, INI, and XBEL files managed by dedicated managers such as BookmarksManager, HistoryManager, PasswordsManager, and SessionsManager. The browser also bundles significant third-party code, including Google Breakpad for crash reporting, KDE Sonnet for spell checking, a mouse gesture recognizer, and libmimeapps for freedesktop MIME integration. The code is modular and shows deliberate engineering in areas like the asynchronous job framework, feed parser, and reusable widget library, but it is a large legacy codebase with no visible automated test suite and significant compatibility debt. This is purely an application repository, not a data research project. The only data involved is user browsing data and configuration files. The project remains under active development, with recent commits through 2026, but technical drift is moderate: QtWebKit is deprecated and removed from modern Qt distributions, the Qt5/Qt6 migration is incomplete, several bundled third-party libraries are old forks, and platform-specific code is fragile. The codebase would benefit from a cleanup of the legacy web backend, better test coverage, and completion of the Qt6 port, but the core architecture is coherent and many components are genuinely reusable.
The LLM identified 4 files worth highlighting for reuse:
Parses RSS and Atom XML feeds into a normalized feed-entry structure. The implementation is small, dependency-light, and self-contained, making it easy to extract into any Qt-based feed reader, content aggregator, or notification service.
A JSON settings container that reads and writes configuration with comment support, atomic saving via QSaveFile, and convenience conversions for common Qt types like QRect, QPoint, and QSize. It is self-contained and reusable in any Qt application needing robust JSON-backed preferences.
An asynchronous job abstraction with progress, timeout, and size-limit signals. It demonstrates a clean QObject-based async job pattern that can be lifted into a different project for network fetches, file downloads, icon retrieval, or update checks.
A reusable source code editor widget with a line-number margin, syntax highlighting, find capability, and zoom controls. Although styled for Otter Browser's internal source viewer, it is a self-contained text editor widget that could be extracted into any Qt-based code or log viewer.