Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
9eb3bd1
feat(chrome): sidebar top row, address display and navigation keys
siyabendoezdemir Oct 9, 2026
6356eed
Merge remote-tracking branch 'origin/main' into lane/chrome
siyabendoezdemir Oct 9, 2026
1bc2a98
chrome: hide, reveal and resize the sidebar (SB-11, SB-12, SB-14, FL-…
siyabendoezdemir Oct 9, 2026
e0ffac3
chrome: the page card in every state; audit the window layout (SB-19,…
siyabendoezdemir Oct 9, 2026
227be40
chrome: find in page and page zoom (NV-05, NV-06)
siyabendoezdemir Oct 9, 2026
442766d
test(split): the views-over-panes poll waits for a pane that is still…
siyabendoezdemir Oct 9, 2026
7768a9f
chrome: modified link clicks, pop-ups, page menu and private windows …
siyabendoezdemir Oct 9, 2026
c1c0f07
Merge origin/main (PRs #6, #7) into lane/chrome
siyabendoezdemir Oct 9, 2026
f86385a
chrome: tests for links, pop-ups, page menu and private windows; Writ…
siyabendoezdemir Oct 9, 2026
e60b6c6
chrome: windows keep apart by private window profiles only
siyabendoezdemir Oct 9, 2026
12cc0ff
WIP: chrome: permission prompts and the site controls panel (in progr…
siyabendoezdemir Oct 9, 2026
26e065f
Merge origin/main (Peek and Mini Window, PR #8) into lane/chrome
siyabendoezdemir Oct 9, 2026
5657457
nav: one modifier tracker with Peek; private windows keep their links
siyabendoezdemir Oct 9, 2026
ef4acbb
nav: page preload keeps undecided permissions and notification clicks…
siyabendoezdemir Oct 10, 2026
579c3b8
nav: loading indicator over the page card, pending address while a pa…
siyabendoezdemir Oct 10, 2026
534ab54
windows: never call into a view's page once it is gone (D28)
siyabendoezdemir Oct 10, 2026
decf3bf
nav: link status pill at the bottom of the page card (SB-27)
siyabendoezdemir Oct 10, 2026
8e1b32f
nav: a page-source tab keeps its view-source: address (NV-12)
siyabendoezdemir Oct 10, 2026
84126ef
docs: NV-08 note names what the peek lane routes and what is left
siyabendoezdemir Oct 10, 2026
7fb5d17
Merge remote-tracking branch 'origin/lead/quit' into HEAD
siyabendoezdemir Oct 10, 2026
199957c
Merge origin/lead/next (media, PR #9) into the chrome rehearsal branch
siyabendoezdemir Oct 10, 2026
23fdc04
fix(media): a window's media tray lists only tabs that window may show
siyabendoezdemir Oct 10, 2026
984fef4
fix(nav): a page can't fake notification clicks (review B-M1)
siyabendoezdemir Oct 10, 2026
272accf
fix(nav): a frame from another site can't ask for or use the page's n…
siyabendoezdemir Oct 10, 2026
50fe466
fix(nav): a permission prompt takes no clicks as it shows, nor while …
siyabendoezdemir Oct 10, 2026
50e683e
fix(nav): links opened with a modifier are requested as the page's ow…
siyabendoezdemir Oct 10, 2026
bbe165a
fix(nav): the loading indicator leaves the window when it hides, and …
siyabendoezdemir Oct 10, 2026
f622007
fix(nav): ⌘F and ⌘G do nothing while a Peek is open, so the keyboard …
siyabendoezdemir Oct 10, 2026
17ea8af
fix(chrome): the hover reveal hears a real pointer at the window's ed…
siyabendoezdemir Oct 10, 2026
ce9e365
fix(split): the page keeps out of the sliding sidebar's way (review A…
siyabendoezdemir Oct 10, 2026
1cd73aa
fix(nav): page menu media items and the hidden-sidebar toast (review …
siyabendoezdemir Oct 10, 2026
8236aee
fix(nav): site choices reach disk on quit; a deleted profile's go (re…
siyabendoezdemir Oct 10, 2026
b179d77
refactor(tabs): drop the dead ±0.5 zoom handlers (review A-F7)
siyabendoezdemir Oct 10, 2026
4a7b503
fix(nav): zoom in a Peek or Mini Window takes the tab steps and is ke…
siyabendoezdemir Oct 10, 2026
740dae5
fix(core): editing the address starts from where the page is going (r…
siyabendoezdemir Oct 10, 2026
f518a21
fix(chrome): an address without a host says what it is (review A-F2)
siyabendoezdemir Oct 10, 2026
fba58b9
test(chrome): make the SB-11 scroll and SB-28 slow-page tests determi…
siyabendoezdemir Oct 10, 2026
0f9418c
fix(nav): the plain permission dialog: Esc keeps nothing, one per req…
siyabendoezdemir Oct 10, 2026
4b911e0
fix(nav): a split view's panes ask in the sidebar, the pane without t…
siyabendoezdemir Oct 10, 2026
b72c78d
fix(nav): orbit --private-window <url> opens the link in the private …
siyabendoezdemir Oct 10, 2026
b5c1115
fix(nav): the page's Notification keeps the engine's shape (review B-…
siyabendoezdemir Oct 10, 2026
39dfaa9
docs: feature notes for the review fixes; regenerate FEATURES.md (rev…
siyabendoezdemir Oct 10, 2026
8647efe
docs: the page preload's Notification patch includes its prototype's …
siyabendoezdemir Oct 10, 2026
e784737
Merge origin/main (archive lane, PR #12) into lane/chrome
siyabendoezdemir Oct 10, 2026
5010cbf
test(nav): Restore Data and Recently Closed with a private window ope…
siyabendoezdemir Oct 10, 2026
ae2adb3
fix(chrome): a page's find bar, prompt and loading views stay under t…
siyabendoezdemir Oct 10, 2026
132e1ce
docs: the views over the pages and the page cover; regenerate FEATURE…
siyabendoezdemir Oct 10, 2026
6f34029
test(nav): the split-view prompt test follows the pane's corner as th…
siyabendoezdemir Oct 10, 2026
944ac36
Merge origin/main (PR #14) into lane/chrome
siyabendoezdemir Oct 10, 2026
cd87da0
Merge lane/settings (PR #15) into lane/chrome
siyabendoezdemir Oct 10, 2026
d8a7924
fix(nav): the page menu's search item names and uses the tab's profil…
siyabendoezdemir Oct 10, 2026
183ac50
fix(nav): a prompt the closing Library uncovers takes no click at onc…
siyabendoezdemir Oct 10, 2026
9dc79d9
fix(nav): a web page can't have Orbit open or save a local file (fix …
siyabendoezdemir Oct 10, 2026
a3c8f70
fix(nav): Option-click finds the link at the click, not where the pag…
siyabendoezdemir Oct 10, 2026
f7886e2
fix(nav): closing a private window drops only a private Space (fix ch…
siyabendoezdemir Oct 10, 2026
a8cf952
fix(chrome): the card the window's very edge brought in goes when the…
siyabendoezdemir Oct 10, 2026
23bc8b0
fix(nav): with the Library open, find and zoom keys leave the tab und…
siyabendoezdemir Oct 10, 2026
4adf916
fix(nav): a window's first loading indicator no longer takes the keyb…
siyabendoezdemir Oct 10, 2026
a7bc6cf
docs(windows): put promptOnScreen's comment back above it
siyabendoezdemir Oct 10, 2026
3c4e532
fix(nav): a window's first permission prompt over a page leaves the k…
siyabendoezdemir Oct 10, 2026
b76dd54
test(nav): zoom in a Mini Window, with its steps and the site's memor…
siyabendoezdemir Oct 10, 2026
886e3bb
docs: PK-11 note, find does nothing while a Peek is open (fix check A…
siyabendoezdemir Oct 10, 2026
0db0d6f
fix(core): drop the placeholder Settings action the settings module r…
siyabendoezdemir Oct 10, 2026
1e543f8
Merge origin/main (PRs #16, #17, #19: the test harness) into lane/chrome
siyabendoezdemir Oct 10, 2026
d6bcef4
fix(nav): make each window's loading view as it shows, so a first-sec…
siyabendoezdemir Oct 10, 2026
6448a25
fix(nav): Save Page As… saves complete only a page whose frames are a…
siyabendoezdemir Oct 10, 2026
02e2eba
fix(links): an ⌥-click over a frame counts as the frame's, and a fram…
siyabendoezdemir Oct 10, 2026
ecc28e4
fix(page-tools): a new window's page tools never take the keyboard wh…
siyabendoezdemir Oct 10, 2026
8fd507a
fix(sidebar): a pointer that leaves the window from inside the floati…
siyabendoezdemir Oct 10, 2026
12c691f
fix(links): pageMayOpen is the one check on every route where Orbit l…
siyabendoezdemir Oct 10, 2026
6fa6333
fix(actions): ActionRegistry.register throws on an id registered alre…
siyabendoezdemir Oct 10, 2026
cd3fd99
fix(page-menu): a script, page source or data link offers no open ite…
siyabendoezdemir Oct 10, 2026
f10e519
test(onboarding): OB-02 counts the loading indicator's view as the br…
siyabendoezdemir Oct 10, 2026
f0711e8
Merge origin/main (PR #21) into lane/chrome
siyabendoezdemir Oct 10, 2026
c11aab6
fix(sidebar): a menu Chromium refuses no longer holds the floating ca…
siyabendoezdemir Oct 10, 2026
99572a8
test(links): the ⌥-click Referer check waits for the split, not for e…
siyabendoezdemir Oct 10, 2026
1664134
fix(links): a local file Orbit refuses for a page is named in a toast…
siyabendoezdemir Oct 10, 2026
fb98f8c
fix(find): held keys go into the find bar as text, and a late bar tak…
siyabendoezdemir Oct 10, 2026
e98439a
fix(find): page tools whose page crashed stay out of the window until…
siyabendoezdemir Oct 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 40 additions & 40 deletions FEATURES.md

Large diffs are not rendered by default.

9 changes: 7 additions & 2 deletions docs/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ BrowserWindow (frameless; hiddenInset traffic lights on macOS)
- **Main process** (`src/main`) owns all state, all web contents, sessions, windows, menus, shortcuts and persistence.
- **Shell renderer** (`src/renderer`, `?view=shell`) draws the sidebar and an empty rounded "frame". It measures the frame (and split panes) and reports pane rectangles to main (`layout.panes` event). Main then places the native tab views exactly over them. Pages are never iframes.
- **Overlay renderer** (`?view=overlay`) is a transparent full-window view above the tabs. It's shown only while something floats (command bar, Peek card chrome, menus). Clicking its backdrop closes it.
- **Views over the pages**, bottom to top: the tab views; the page's small views (page tools, permission prompt, loading indicator, link pill: `WindowManager.createUiView` and kin); a page cover while one is open (the Library, `WindowManager.setPageCover`), which those small views go under; then a Peek, the floating sidebar card and the overlay.
- **Other renderer views**: `mini` (Mini Window chrome) and `settings` (settings window). They come from the same bundle and are selected by the `view` query.
- **Preload** (`src/preload/shell.ts`) runs sandboxed with context isolation. It exposes `window.orbit` (`OrbitBridge` in `src/shared/rpc.ts`) only to Orbit UI contents. Web pages get **no preload**. IPC handlers reject any sender that isn't registered Orbit UI.
- **Preload** (`src/preload/shell.ts`) runs sandboxed with context isolation. It exposes `window.orbit` (`OrbitBridge` in `src/shared/rpc.ts`) only to Orbit UI contents, and its `orbit:*` IPC handlers reject any sender that isn't registered Orbit UI. Web pages get one preload of their own, `src/preload/page.ts` (NV-15), on D40's terms. It runs in main frames only and adds nothing to page globals: it patches only the built-ins NV-15 needs (`Notification.permission`, `Notification.requestPermission`, the `Notification` constructor, with its prototype's `constructor` pointing back at it, and `PermissionStatus.prototype.state`), so a permission the user hasn't decided reads "default"/"prompt" as in Chromium and a click on one of the page's notifications reaches main. It talks to main only over its own `orbit-page:*` channels, separate from the UI's `orbit:*` channels, and main takes the origin and profile from `event.senderFrame`, never from the message.

## 2. State: one store, patches out

Expand Down Expand Up @@ -118,7 +119,11 @@ Rules: no synchronous disk I/O on hot paths after boot, no full-state broadcasts

## 10. Security baseline

Sandboxed, context-isolated renderers everywhere. No Node in pages. Pages never get a preload. IPC accepts registered Orbit UI senders only. UI renderers can't navigate or open windows. Permission prompts are per origin. Tweak JS (user-authored, per site) is injected only through `webFrame.executeJavaScript` in an isolated world, never with Node. Extensions use Electron's built-in extension support plus Orbit's own (MIT) API shims (D3: no GPL dependency).
Sandboxed, context-isolated renderers everywhere. No Node in pages. Pages get one preload, `src/preload/page.ts`, on D40's terms: main frames only, nothing added to page globals, built-ins patched only where the spec needs Chromium's behaviour (captured before the page runs, `Reflect.apply` included), and its own `orbit-page:*` channels. Main takes a page's origin and profile from the sender frame (`event.senderFrame`), never from the message, and each channel either returns read-only state for that origin or carries a request main checks against its own state before acting. Its uses, all of them (any other channel, patch or global is a lead decision, D40):
- `orbit-page:permission` (NV-15): a synchronous read of how a permission reads for the sending frame's own origin and profile ("prompt" while the user hasn't decided). Read-only.
- `orbit-page:notification-click` (NV-15): a trusted click on one of the page's notifications. Main brings the tab forward only for a site allowed to show notifications, and at most once per `NOTIFICATION_CLICK_GAP_MS` per tab.

The UI's `orbit:*` IPC accepts registered Orbit UI senders only. UI renderers can't navigate or open windows. Permission prompts are per origin. Tweak JS (user-authored, per site) is injected only through `webFrame.executeJavaScript` in an isolated world, never with Node. Extensions use Electron's built-in extension support plus Orbit's own (MIT) API shims (D3: no GPL dependency).

## 11. Packaging and updates

Expand Down
Loading