Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: Bug report
description: Report a reproducible Bare Browser bug.
description: Report a reproducible Lumen Browser bug.
title: "[Bug]: "
labels:
- bug
Expand All @@ -21,7 +21,7 @@ body:
label: Steps to Reproduce
description: List the smallest reliable reproduction steps.
placeholder: |
1. Open Bare Browser
1. Open Lumen Browser
2. ...
3. ...
validations:
Expand Down
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: Feature request
description: Suggest an improvement for Bare Browser.
description: Suggest an improvement for Lumen Browser.
title: "[Feature]: "
labels:
- enhancement
Expand All @@ -15,7 +15,7 @@ body:
id: proposal
attributes:
label: Proposal
description: What should Bare Browser do?
description: What should Lumen Browser do?
validations:
required: true
- type: textarea
Expand Down
2 changes: 1 addition & 1 deletion CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Code of Conduct

Bare Browser aims to be a practical, respectful open-source project.
Lumen Browser aims to be a practical, respectful open-source project.

## Expected Behavior

Expand Down
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Contributing

Thanks for helping improve Bare Browser.
Thanks for helping improve Lumen Browser.

## Development Setup

Expand Down Expand Up @@ -32,7 +32,7 @@ To launch the app as a foreground macOS bundle:
- `Tests/MeridianBrowserTests`: unit tests.
- `Docs`: architecture, threat model, release checklist, test plan, and WebKit limitations.

The public product name is Bare Browser. The Swift package and modules still use the historical `Meridian*` names.
The public product name is Lumen Browser. The Swift package and modules still use the historical `Meridian*` names.

## Pull Requests

Expand Down
2 changes: 1 addition & 1 deletion DebugFixtures/download-context-menu.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<html lang="en">
<head>
<meta charset="utf-8">
<title>Bare Browser Download Context Menu Fixture</title>
<title>Lumen Browser Download Context Menu Fixture</title>
<style>
body {
font-family: system-ui, sans-serif;
Expand Down
4 changes: 2 additions & 2 deletions Docs/Architecture.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Bare Browser Architecture
# Lumen Browser Architecture

Bare Browser is a native macOS, SwiftUI-first, WebKit-based browser. The early codebase is package-first so model, security, command routing, and WebKit boundary code can build and test before release packaging is added.
Lumen Browser is a native macOS, SwiftUI-first, WebKit-based browser. The early codebase is package-first so model, security, command routing, and WebKit boundary code can build and test before release packaging is added.

## Targets

Expand Down
6 changes: 3 additions & 3 deletions Docs/ThreatModel.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
- URL navigation is centralized in `URLSecurityPolicy`.
- Unsafe script/data schemes are blocked.
- External app and `file://` links create a pending native confirmation before any external handoff, retaining the target URL for approval while reducing source page context to a sanitized host or scheme label.
- Non-local HTTP main-frame navigations are HTTPS-first where practical: explicit opens and WebKit main-frame HTTP actions first attempt the HTTPS equivalent, while localhost and loopback URLs remain HTTP for local development. If a tracked HTTPS upgrade attempt falls back to HTTP, Bare Browser shows the generic insecure-transport status message without embedding the full URL.
- Non-local HTTP main-frame navigations are HTTPS-first where practical: explicit opens and WebKit main-frame HTTP actions first attempt the HTTPS equivalent, while localhost and loopback URLs remain HTTP for local development. If a tracked HTTPS upgrade attempt falls back to HTTP, Lumen Browser shows the generic insecure-transport status message without embedding the full URL.
- TLS certificate failures are not silently downgraded to HTTP fallback.
- WebKit downloads are routed through a native save-location confirmation before bytes are written.
- The download policy sanitizes candidate filenames, avoids existing destination paths, blocks installer-like packages, and requires explicit confirmation for executable-like extensions.
Expand All @@ -39,11 +39,11 @@
- Pop-up/new-window requests and WebKit media-capture permission callbacks are routed through store state before any grant; unsupported permission kinds are denied with an explicit message.
- Autoplay is configured to require a user gesture by default.
- Password form submissions can create a native save prompt for HTTPS origins and loopback HTTP development origins. Accepted credentials are scoped to the current persistent profile and stored in the local macOS Keychain with this-device-only accessibility; private profiles do not prompt or persist passwords.
- Profile isolation covers website sessions and Bare Browser-managed Keychain credentials. macOS/WebKit Password AutoFill suggestions are device-wide system behavior and are not claimed as profile-isolated; Bare Browser does not use fragile webpage-specific suppression to hide them.
- Profile isolation covers website sessions and Lumen Browser-managed Keychain credentials. macOS/WebKit Password AutoFill suggestions are device-wide system behavior and are not claimed as profile-isolated; Lumen Browser does not use fragile webpage-specific suppression to hide them.
- The command bar returns open-tab matches only from the active profile. The intentional all-profile Activity view labels profile ownership and selects a matching space before navigation.
- App Sandbox entitlement file includes only sandbox and outbound network client entitlement.
- A small `WKContentRuleList` blocks common tracker/ad endpoints without request interception hacks.
- Bare Browser does not collect product analytics, browsing telemetry, page contents, URLs, cookies, tokens, or private browsing data; website passwords are stored only after explicit local confirmation, and developer log modes stream only local OS logs.
- Lumen Browser does not collect product analytics, browsing telemetry, page contents, URLs, cookies, tokens, or private browsing data; website passwords are stored only after explicit local confirmation, and developer log modes stream only local OS logs.

## Required Follow-Up

Expand Down
14 changes: 7 additions & 7 deletions Docs/WebKitLimitations.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
# WebKit Limitations

Bare Browser uses `WKWebView`, not Safari's full browser process or Chromium. Known limitations must be visible in product and engineering decisions.
Lumen Browser uses `WKWebView`, not Safari's full browser process or Chromium. Known limitations must be visible in product and engineering decisions.

## Current Known Limitations

- Some Safari browser features are not public `WKWebView` APIs.
- Chrome extension compatibility is not available and should not be claimed.
- Safari Web Extensions require a dedicated extension architecture and are not part of this scaffold.
- Per-profile isolation depends on WebKit support for identified website data stores. Persistent profiles use `WKWebsiteDataStore(forIdentifier:)`; each private profile reuses one `.nonPersistent()` store until that private profile closes.
- macOS Password AutoFill suggestions can be surfaced by WebKit independently of Bare Browser's profile-scoped Keychain credential store. These device-wide suggestions are outside the profile-isolation guarantee; webpage-specific suppression would be incomplete and fragile, so the UI distinguishes the two instead.
- Fine-grained permission APIs vary by macOS/WebKit version. In the macOS 26.2 SDK used for this slice, `WKUIDelegate` exposes media-capture permission callbacks for camera/microphone; Bare Browser routes those through `SitePermissionPolicy`.
- Public-profile allow/deny decisions for supported site permissions can persist in Bare Browser's session store. Private-profile permission decisions are session-only and filtered before disk writes.
- Bare Browser's active-site permission menu can manage only WebKit delegate-backed permissions. Unsupported or configuration-only permissions are shown as limited instead of writing ineffective per-site settings.
- Geolocation and notification permission prompts do not have equivalent public macOS `WKUIDelegate` callbacks in this SDK, so Bare Browser marks them unsupported and denies them conservatively until a safe API is available.
- macOS Password AutoFill suggestions can be surfaced by WebKit independently of Lumen Browser's profile-scoped Keychain credential store. These device-wide suggestions are outside the profile-isolation guarantee; webpage-specific suppression would be incomplete and fragile, so the UI distinguishes the two instead.
- Fine-grained permission APIs vary by macOS/WebKit version. In the macOS 26.2 SDK used for this slice, `WKUIDelegate` exposes media-capture permission callbacks for camera/microphone; Lumen Browser routes those through `SitePermissionPolicy`.
- Public-profile allow/deny decisions for supported site permissions can persist in Lumen Browser's session store. Private-profile permission decisions are session-only and filtered before disk writes.
- Lumen Browser's active-site permission menu can manage only WebKit delegate-backed permissions. Unsupported or configuration-only permissions are shown as limited instead of writing ineffective per-site settings.
- Geolocation and notification permission prompts do not have equivalent public macOS `WKUIDelegate` callbacks in this SDK, so Lumen Browser marks them unsupported and denies them conservatively until a safe API is available.
- Autoplay is controlled at `WKWebViewConfiguration` level by requiring a user gesture for media playback rather than by per-site WebKit callbacks.
- TLS error handling must never be bypassed silently. The scaffold does not yet add custom override UI.
- HTTPS-first fallback is scoped to tracked main-frame upgrade attempts. Certificate trust failures are not downgraded to HTTP; fixture coverage for WebKit delegate edge cases should be added once the signed UI test host is available.
- Web process lifecycle and memory pressure behavior are controlled partly by WebKit; Bare Browser should layer tab unloading and restore metadata on top.
- Web process lifecycle and memory pressure behavior are controlled partly by WebKit; Lumen Browser should layer tab unloading and restore metadata on top.

## Engineering Rule

Expand Down
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Bare Browser
# Lumen Browser

Bare Browser is an open-source, native macOS browser project built with SwiftUI
Lumen Browser is an open-source, native macOS browser project built with SwiftUI
and WebKit.

It exists because a certain kind of browser user got left hanging.
Expand All @@ -18,7 +18,7 @@ browser that is open source, sidebar-first, WebKit-based, SwiftUI/AppKit-native,
and shaped like it actually belongs on macOS instead of feeling like a
cross-platform skin.

Bare Browser is the reaction to that gap.
Lumen Browser is the reaction to that gap.

It is not an Arc clone. It uses original branding, assets, text, and
implementation. The goal is to keep the part that mattered: spaces,
Expand Down Expand Up @@ -72,7 +72,7 @@ history results.

## Repository Notes

The public product name is Bare Browser. The Swift package, module names, and
The public product name is Lumen Browser. The Swift package, module names, and
some internal symbols still use the historical `Meridian*` naming.

First-party app assets live under `Resources/`. Do not add third-party assets
Expand All @@ -87,7 +87,7 @@ swift test
```

`script/build_and_run.sh` stages the SwiftPM GUI executable into
`dist/Bare Browser.app` before launching it, which gives the app foreground
`dist/Lumen Browser.app` before launching it, which gives the app foreground
macOS bundle behavior that `swift run MeridianBrowser` does not reliably provide.
It also supports `--debug`, `--logs`, `--subsystem-logs`, and `--verify`.

Expand All @@ -100,15 +100,15 @@ the Xcode app/UI test host and owner-approved signing setup are available.

## Privacy And Diagnostics

Bare Browser does not collect product analytics, browsing telemetry, page contents,
Lumen Browser does not collect product analytics, browsing telemetry, page contents,
URLs, cookies, tokens, or private browsing data. Website passwords are stored only
after explicit user confirmation, only for persistent profiles, and only in the
local macOS Keychain with this-device-only accessibility. The current app has no
analytics SDK, tracking endpoint, or network reporting path.

Developer diagnostics are local only. `script/build_and_run.sh --logs` streams
local OS log entries for the Bare Browser process, and `--subsystem-logs` streams
local OS log entries for Bare Browser's bundle subsystem. These modes do not send
local OS log entries for the Lumen Browser process, and `--subsystem-logs` streams
local OS log entries for Lumen Browser's bundle subsystem. These modes do not send
diagnostic data off the machine.

## Documentation
Expand All @@ -129,4 +129,4 @@ diagnostic data off the machine.

## License

Bare Browser is released under the MIT License. See [LICENSE](LICENSE).
Lumen Browser is released under the MIT License. See [LICENSE](LICENSE).
Binary file added Resources/LumenIconSources/LumenDark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/LumenIconSources/LumenLight.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/LumenLogo.icon/Assets/LumenDark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/LumenLogo.icon/Assets/LumenLight.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
47 changes: 47 additions & 0 deletions Resources/LumenLogo.icon/icon.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
{
"fill" : {
"automatic-gradient" : "extended-srgb:0.00000,0.53333,1.00000,1.00000"
},
"groups" : [
{
"layers" : [
{
"image-name" : "LumenDark.png",
"name" : "LumenDark",
"opacity-specializations" : [
{
"value" : 0
},
{
"appearance" : "dark",
"value" : 1
},
{
"appearance" : "tinted",
"value" : 0
}
]
},
{
"image-name" : "LumenLight.png",
"name" : "LumenLight"
}
],
"name" : "Lumen Artwork",
"shadow" : {
"kind" : "neutral",
"opacity" : 0.5
},
"translucency" : {
"enabled" : false,
"value" : 0.5
}
}
],
"supported-platforms" : {
"circles" : [
"watchOS"
],
"squares" : "shared"
}
}
Binary file removed Resources/MammothLogo.icon/Assets/Image.png
Binary file not shown.
Binary file removed Resources/MammothLogo.icon/Assets/mammoth_blue.png
Binary file not shown.
Binary file removed Resources/MammothLogo.icon/Assets/mammoth_lime.png
Binary file not shown.
Binary file removed Resources/MammothLogo.icon/Assets/mammoth_teal.png
Binary file not shown.
Binary file not shown.
119 changes: 0 additions & 119 deletions Resources/MammothLogo.icon/icon.json

This file was deleted.

5 changes: 3 additions & 2 deletions Resources/README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
# Resources

This directory contains first-party Bare Browser app assets.
This directory contains first-party Lumen Browser app assets.

Current assets:

- `MammothLogo.icon`: app icon source consumed by `script/build_and_run.sh`.
- `LumenLogo.icon`: native Liquid Glass app icon source consumed by `script/build_and_run.sh`.
- `LumenIconSources/`: byte-identical light and dark source artwork used by Icon Composer.

Unless a file in this directory says otherwise, these assets are distributed under the repository license.

Expand Down
4 changes: 2 additions & 2 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Security Policy

Bare Browser is an early-stage macOS browser project. Security reports are welcome and should be handled privately before public disclosure.
Lumen Browser is an early-stage macOS browser project. Security reports are welcome and should be handled privately before public disclosure.

## Supported Versions

Expand Down Expand Up @@ -37,7 +37,7 @@ In scope:
Out of scope:

- Vulnerabilities solely in websites loaded by the browser.
- Issues requiring malicious local code execution outside Bare Browser.
- Issues requiring malicious local code execution outside Lumen Browser.
- Denial-of-service reports without a security or privacy impact.

## Disclosure
Expand Down
2 changes: 1 addition & 1 deletion SUPPORT.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Support

Bare Browser is an early-stage open-source project, not a supported release product.
Lumen Browser is an early-stage open-source project, not a supported release product.

Use GitHub issues for reproducible bugs, feature requests, documentation problems, and build failures. Include your macOS, Xcode, and Swift versions when reporting build or runtime issues.

Expand Down
Loading