Dev Patel
Apr 2023 → Nov 2023Source

Overse Browser

A multi-tab desktop browser in Python and PyQt5, with SQLite history and AES-encrypted profiles.

The browser running: tab strip, address bar, and the Chromium widget doing the rendering.
Type
Artifact
Where
Personal
When
Apr 2023 → Nov 2023
Duration
7 mo
Status
Complete
Source
GitHub
The problem

The problem

I wanted to understand what a browser actually does — tab lifecycle, session state, history, and where the security boundaries sit — which is hard to learn from the outside.

What I built

What I built

PyQt5 over a Chromium widget for rendering, with the parts I wanted to understand written by hand: tab lifecycle and state, bookmarks, and history in SQLite.

Profile storage is AES-encrypted through OpenSSL, so the interesting question — what a browser is trusted to hold on disk, and what happens if that file is read by someone else — had to be answered rather than assumed.

Screens

Screens

History, read back out of SQLite — the state a browser keeps is the part I wanted to build by hand.
History, read back out of SQLite — the state a browser keeps is the part I wanted to build by hand.
Results

Results

Multi-tablifecycle by hand
SQLitehistory + bookmarks
AESencrypted profiles
  • Working multi-tab browser with persistent history and bookmarks.
  • Encrypted profile storage rather than plaintext on disk.
  • A concrete understanding of where browser state actually lives.
Architecture

Architecture

PyQt5 shellwindow · tabsChromium widgetrenderingSession managertab lifecycleSQLitehistory · bookmarksAES / OpenSSLprofile at rest
The rendering engine is borrowed; everything to the right of it was the point.
In hindsight

In hindsight

Encrypting the profile without a real key-derivation story is security theatre — the key handling is the weak link, not the cipher. Done again, I'd start from where the key lives and work outwards.

Stack

Stack

PythonPyQt5SQLiteOpenSSLAES