Build log · Software & apps

IsaacKing Browser

Software & appsdone3 versionsmacOSWKWebViewPyObjCBrowserWhitelist

reflection not written yet · every fact below is generated from this project’s own spec and files

What it is

A whitelist-only macOS browser with NO search: the URL bar rejects anything containing a space, and every navigation is checked against a plain-text allowlist at ~/IsaacKing/whitelist.json that is re-read on every request — edit the file and it applies instantly, no restart, no in-app settings page. Ships as a self-contained 76 MB .app carrying its own Python + PyObjC/WKWebView, with an isaacking CLI (list / add / remove / launch).

Version history

Straight from the project’s own card data — what each version added.

V1

White screen when quitting and reopening.

V2

Fixed: the start page loads as an HTML string — no redirect chain, no white flash.

V3

Self-contained 76 MB .app with its own Python and no PyObjCTools dependency, whitelist re-read live from the file, isaacking CLI, no-search guard, and zero system-proxy writes.

By the numbers

Measured from the real working folder ~/IsaacKing/ — not a claim, a count.

799
files
101,990
lines of code
6
file types used
2025-07-16
oldest file
2026-10-11
last touched

Mostly: Python ×366 · binary assets ×11 · JSON ×3 · HTML ×3 · Shell ×2 · C/C++ header ×2

What broke, and what I’d change

Not written yet. This is the part only I can write — what actually went wrong, and what I’d do differently. It lives in builds/reflections/isaacking-browser.md (see _TEMPLATE.md); as soon as that file has words in it, this section fills in on the next build.

Everything else on this page — the spec, the version history, the file counts — is generated from the project’s own build notes and files, so nothing here is guesswork.

Build spec

The project’s own build notes, rendered. Open the raw .md ↗

Show the spec

IsaacKing Browser

Category: Software & Apps · Status: Done

Whitelist-only macOS browser. No search, no in-app settings — the allowlist is a file you edit.

Stack / Tools: Python 3.14, PyObjC (WKWebView + WKNavigationDelegate), py2app self-contained .app

Build path:

  • V1 — White screen when quitting and reopening.
  • V2 — Fixed: the start page loads as an HTML string (no redirect chain, no white flash).
  • V3 — Self-contained 76 MB .app with its own Python; whitelist re-read live; isaacking CLI; no-search guard.

Location: ~/IsaacKing/ — installed at /Applications/IsaacKing.app

What it is

A real macOS browser built on PyObjC + WKWebView rather than wrapping a web view around a page. It is deliberately crippled in two ways: there is no search, and nothing loads unless it is on the whitelist.

The two rules

No search. Anything typed into the URL bar that contains a space is refused — the browser answers "no search" instead of guessing a search engine. You type an address or you type nothing.

Whitelist only. Every navigation is intercepted in webView:decidePolicyForNavigationAction: and checked against ~/IsaacKing/whitelist.json before it is allowed. Anything else renders a blocked page. localhost and about:blank are always allowed so the app's own start page works.

The whitelist is a file, not a setting

~/IsaacKing/whitelist.json is the sole authority. It accepts plain strings, so the smallest valid file is:

["roblox.com"]

It is re-read from disk on every URL check, so editing the file takes effect immediately — no restart. There is intentionally no settings page and no write API; the browser exposes only a read-only GET /api/whitelist.

The isaacking CLI does the same job from the terminal:

isaacking list
isaacking add example.com
isaacking remove example.com
isaacking launch

Why it does not break the rest of the Mac

IsaacKing never touches system networking. It writes no proxy settings and calls no networksetup, so a crash cannot leave the machine pointing at a dead port. The earlier white-screen-on-reopen bug came from the run loop swallowing signal handlers, which left a stale process and a stale window behind; the current build replaces that loop and quits cleanly.

Verified

Launches from Finder/Spotlight as IsaacKing (its own identity, not "Python"); a second launch focuses the existing window instead of duplicating it; Cmd+Q exits in about a second, releases the port and leaves zero orphan windows; relaunching renders fresh with a new process id. The installed bundle carries its own interpreter and was confirmed to still run with the original source file hidden.


_Spec written from the shipped build on 2026-10-11. Nothing here is inferred — the whitelist behaviour, the no-search rule and the verification results were all observed directly._