Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
540c9cd
fix/openlink suggestion (#6)
yonaries Sep 4, 2025
bc44686
feat: auto updater
kenenisa Sep 4, 2025
7de64a5
chore: reorganize build artifacts and update release scripts
kenenisa Sep 4, 2025
56e408b
chore: enhance build and release scripts for DSA key management and a…
kenenisa Sep 4, 2025
8d2d89c
Add automatic GitHub Pages deployment to release script
kenenisa Sep 4, 2025
082dd0b
Deploy appcast v0.0.16
kenenisa Sep 4, 2025
8cf4b74
Fix GitHub Pages deployment logic
kenenisa Sep 4, 2025
3f5528c
Deploy appcast v0.0.17
kenenisa Sep 4, 2025
f484194
Fix GitHub repository URLs in appcast.xml and SUFeedURL
kenenisa Sep 4, 2025
bd8fc73
Update project version to 0.0.18 and adjust SUFeedURL for appcast.xml
kenenisa Sep 4, 2025
fe17fbd
Deploy appcast v0.0.20
kenenisa Sep 4, 2025
55dd0b7
Deploy appcast v0.0.20
kenenisa Sep 4, 2025
abab47f
Deploy appcast v0.0.21
kenenisa Sep 4, 2025
39ec2b5
Update project version to 0.0.21 and enhance release scripts for auto…
kenenisa Sep 4, 2025
a8d3b96
Deploy appcast v0.0.22
kenenisa Sep 5, 2025
b4e707d
Fix appcast backup in create-release.sh
kenenisa Sep 5, 2025
791f135
Deploy appcast v0.0.23
kenenisa Sep 5, 2025
48b62ee
Update to v0.0.24
kenenisa Sep 5, 2025
c602495
Update to v0.0.25
kenenisa Sep 5, 2025
ed3c328
Update to v0.0.25
kenenisa Sep 5, 2025
2fc2af8
Update to v0.0.26
kenenisa Sep 5, 2025
b42ed78
Update to v0.0.27
kenenisa Sep 5, 2025
b9208b1
Update to v0.0.28
kenenisa Sep 5, 2025
c2646ab
Update to v0.0.29
kenenisa Sep 5, 2025
6405d27
Update to v0.0.30
kenenisa Sep 5, 2025
9de261f
Fix appcast signature for v0.0.30
kenenisa Sep 5, 2025
8088a07
Update to v0.0.31
kenenisa Sep 5, 2025
6f1e44c
Update to v0.0.32
kenenisa Sep 5, 2025
bb1a8c4
Fix appcast signature for v0.0.32
kenenisa Sep 5, 2025
107c598
Fix update system with signature validation and auto-versioning
kenenisa Sep 5, 2025
c272020
Format Swift files with swiftformat
kenenisa Sep 5, 2025
fc40e2b
Update to v0.0.33
kenenisa Sep 5, 2025
7957455
Update to v0.0.34
kenenisa Sep 5, 2025
da88f18
Update to v0.0.35
kenenisa Sep 5, 2025
2fc59f1
Update project version to v0.0.35 and increment current project versi…
kenenisa Sep 5, 2025
9429630
Add comprehensive logging to UpdateService for debugging
kenenisa Sep 5, 2025
af93106
Fix Sparkle API compatibility issues in UpdateService
kenenisa Sep 5, 2025
5c1abab
Remove non-existent Sparkle API properties
kenenisa Sep 5, 2025
5febb06
Fix update signature validation
kenenisa Sep 5, 2025
a6c4557
Update EdDSA public key for proper signature validation
kenenisa Sep 5, 2025
ae8b48c
Update appcast with correct file size and signature
kenenisa Sep 5, 2025
8aaf050
Update create-release.sh for better key management
kenenisa Sep 5, 2025
b5870ef
Add key management documentation
kenenisa Sep 5, 2025
644edd1
Fix private key file cleanup issue
kenenisa Sep 5, 2025
81cb046
Update to v0.0.39
kenenisa Sep 5, 2025
6ee50a1
Update to v0.0.43
kenenisa Sep 5, 2025
98dbc0b
Update to v0.0.44
kenenisa Sep 5, 2025
0791804
Update to v0.0.45
kenenisa Sep 5, 2025
255e8d9
Update to v0.0.47
kenenisa Sep 5, 2025
a3761ce
Update to v0.0.48
kenenisa Sep 5, 2025
97081cf
Update to v0.0.49
kenenisa Sep 5, 2025
9744e67
Update to v0.0.52
kenenisa Sep 5, 2025
ec8191c
Update to v0.0.53
kenenisa Sep 5, 2025
f2c950e
Update to v0.0.54
kenenisa Sep 5, 2025
0f71e93
chore: readme fix (#7)
yonaries Sep 5, 2025
45497df
Update to v0.0.54 and modify SUPublicEDKey handling in create-release.sh
kenenisa Sep 5, 2025
56dc94e
Merge branch 'main' of https://github.com/the-ora/browser
kenenisa Sep 5, 2025
de5e191
Merge branch 'main' into release
kenenisa Sep 5, 2025
a9cdff6
Refactor DMG naming and path handling in build-release.sh and create-…
kenenisa Sep 5, 2025
407e2c2
Update to v0.0.56
kenenisa Sep 5, 2025
8bc0444
Update to v0.0.57
kenenisa Sep 5, 2025
2519a8f
Update to v0.0.58
kenenisa Sep 5, 2025
d049ab3
Update to v0.0.60
kenenisa Sep 5, 2025
d49acd2
Update to v0.0.61
kenenisa Sep 5, 2025
0220e9b
Update to v0.0.62
kenenisa Sep 5, 2025
c9f5f20
Update build-release.sh for DMG creation and bump version to v0.0.62 …
kenenisa Sep 6, 2025
d7e6cc9
Buy me coffee (#18)
yonaries Sep 6, 2025
7be1930
chore: add keyboard shortcut URL bar focus (#12)
qisthidev Sep 6, 2025
8d60677
feat: implement color theme selection and notification system
danperks Sep 6, 2025
d6f7ee6
refactor: streamline model context usage and enhance theme animation
danperks Sep 6, 2025
3c8f7fc
refactor: centralize theme constants and improve animation handling
danperks Sep 6, 2025
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
8 changes: 8 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Ora Browser Private Key
# This file contains sensitive cryptographic keys - NEVER commit to git!
# Copy this file to .env and add your actual private key

ORA_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----
# Paste your Ed25519 private key here
# This key is used to sign app updates for security
-----END PRIVATE KEY-----
32 changes: 32 additions & 0 deletions .github/workflows/deploy-appcast.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Deploy Appcast

on:
workflow_dispatch:
inputs:
version:
description: 'Version to deploy'
required: true
type: string

jobs:
deploy-appcast:
runs-on: macos-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Download appcast from release
run: |
# Download the appcast.xml from the latest release
curl -L -o appcast.xml "https://raw.githubusercontent.com/${{ github.repository }}/release/appcast.xml"

- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: .
publish_branch: gh-pages
keep_files: true
exclude_assets: 'build/**,*.sh,*.yml,*.md,*.json,*.xcodeproj/**,ora/**,docs/**,SECURITY.md,check-security.sh,.github/**,.gitignore,README.md,LICENSE.md'
destination_dir: .
44 changes: 42 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -44,5 +44,45 @@ Temporary Items
.vscode/
.idea/

# App specific
*.app
# Build directory (allow directory but ignore contents)
build/*
!build/
!build/.gitkeep

# Build artifacts and releases
*.app
*.dmg
*.pkg
*.zip
*.tar.gz
appcast.xml
appcast.xml.bak
dsa_priv.pem
dsa_pub.pem
exportOptions.plist
Ora-Browser.dmg
rw.*.Ora-Browser.dmg

# Sparkle and signing (SECURITY: Never commit private keys!)
*_private.pem
*_public.pem
*.pem
dsa_priv.pem # CRITICAL: Never commit this file!
dsa_pub.pem # Public key (safe to commit if needed)

# Environment files (contains private keys!)
.env
.env.local
.env.*.local

# Archives and temporary files
*.xcarchive
*.xctimeline
*.trace
*.log

# Release artifacts (keep in build/ folder)
# Uncomment these if you want to commit release artifacts:
# !build/*.dmg
# !build/appcast.xml
# !build/dsa_pub.pem
61 changes: 49 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
Ora is a fast, secure, and beautiful browser built for macOS. Inspired by Safari and Arc, Ora delivers a clean, native experience that feels at home on macOS — without unnecessary bloat.

> **⚠️ Disclaimer**
> Ora is currently in active development and **not yet ready for day-to-day use**.
> An alpha version with core features will be released soon. Use at your own discretion.
Ora is currently in early stages of development and **not yet ready for day-to-day use**. An alpha version with core functionalities will be released soon.

If you would like to support the project, please consider donating via [Buy Me A Coffee](https://buymeacoffee.com/orabrowser).
[!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://buymeacoffee.com/orabrowser)

## Features

Expand Down Expand Up @@ -47,6 +49,33 @@ Ora is a fast, secure, and beautiful browser built for macOS. Inspired by Safari
- Tools: `xcodegen`, `swiftlint`, `swiftformat` (installed by the setup script)
- Optional: `xcbeautify` (for prettier CLI build output)

## Key Management for Updates

Ora Browser uses Ed25519 cryptographic keys to sign and verify app updates for security:

### Public Key (Committed to Git)
- **File**: `ora_public_key.pem`
- **Purpose**: Verifies update signatures in the app
- **Status**: Committed to git repository
- **Safety**: Public keys are safe to share

### Private Key (Never Commit!)
- **File**: `.env` (contains `ORA_PRIVATE_KEY`)
- **Purpose**: Signs app updates during release
- **Status**: Never committed to git
- **Safety**: Keep secure and private

### Setup Process
1. **First machine**: Keys auto-generated and saved appropriately
2. **Additional machines**: Copy `.env` file from first machine
3. **Release process**: `./create-release.sh` handles key management automatically

### Security Notes
- `.env` is in `.gitignore` - it will never be committed
- Public key is committed - this is safe and required
- Never share your private key with anyone
- If private key is lost, you'll need to regenerate keys (breaks update chain)

## Installation

1. Clone the repository.
Expand Down Expand Up @@ -126,37 +155,39 @@ rm -f "$(getconf DARWIN_USER_DIR 2>/dev/null || echo "$HOME/Library/Application

### Releases and Updates

Ora uses [Sparkle](https://sparkle-project.org/) for automatic updates. To set up releases:
Ora uses [Sparkle](https://sparkle-project.org/) for automatic updates. All build artifacts are organized in the `build/` directory.

1. **Add Sparkle dependency:**
- Open `Ora.xcodeproj` in Xcode
- Go to File > Add Packages...
- Go to File Add Packages...
- Add `https://github.com/sparkle-project/Sparkle` (version 2.6.3+)
- Add Sparkle to your target

2. **Setup Sparkle keys:**
2. **Setup Sparkle tools:**
```bash
brew install --cask sparkle
./setup-sparkle-tools.sh
./setup-sparkle.sh
```
This generates DSA keys for signing releases.
This generates DSA keys in `build/` directory.

3. **Configure signing:**
- Copy the public key from `dsa_pub.pem` to your `Info.plist` as `SUPublicEDKey`
- Keep `dsa_priv.pem` secure for signing releases
- Copy the public key from `build/dsa_pub.pem` to your `Info.plist` as `SUPublicEDKey`
- Keep `build/dsa_priv.pem` secure for signing releases
- Add `SUFeedURL` to Info.plist pointing to your appcast.xml URL

4. **Create a release:**
```bash
./create-release.sh 0.0.2 dsa_priv.pem
./create-release.sh 0.0.2 build/dsa_priv.pem
```
This builds, signs, and prepares the release files.
This builds, signs, and prepares release files in `build/`.

5. **Host appcast.xml:**
- Upload `appcast.xml` to a public URL (e.g., GitHub Pages)
- Upload `build/appcast.xml` to a public URL (e.g., GitHub Pages)
- Update `SUFeedURL` in `Info.plist` to point to your appcast.xml

6. **Publish release:**
- Upload `Ora-Browser.dmg` to GitHub releases
- Upload `build/Ora-Browser.dmg` to GitHub releases
- Users will automatically receive update notifications

The app includes automatic update checking in Settings > General.
Expand All @@ -178,6 +209,12 @@ The app includes automatic update checking in Settings > General.

Keyboard shortcuts: see `ora/Common/Constants/KeyboardShortcuts.swift`.

## Documentation

- **[Quick Start Guide](docs/QUICK_START.md)** - 5-minute setup for hosting and updates
- **[Hosting Setup Guide](docs/HOSTING_SETUP.md)** - Complete guide for update hosting and deployment
- **[Documentation Index](docs/README.md)** - All documentation organized by topic

## Contributing

Contributions are welcome! To propose changes:
Expand Down
43 changes: 43 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Ora Browser Security Guide

## 🔐 DSA Key Management

### Private Key Security
- **NEVER** commit `build/dsa_priv.pem` to version control
- **NEVER** share the private key with anyone
- **NEVER** delete the private key once you've published releases with it

### Key Generation & Reuse
- Generate DSA keys **once** when setting up Sparkle updates
- **Reuse the same keys** for all future releases
- Deleting and regenerating keys will break the update chain for existing users

### Security Checks
Run `./check-security.sh` to verify:
- Private key exists but is not tracked by git
- Public key is available for app integration
- `.gitignore` properly excludes sensitive files

### Release Process
1. Run `./create-release.sh <version>` - reuses existing keys automatically
2. Upload `build/Ora-Browser.dmg` to GitHub releases
3. Host `build/appcast.xml` at a public URL
4. Add `build/dsa_pub.pem` content to app's `SUPublicEDKey` in Info.plist

### Files to Keep Secure
- `build/dsa_priv.pem` - **KEEP PRIVATE, NEVER COMMIT**
- `build/dsa_pub.pem` - Safe to commit if needed for CI/CD
- `build/appcast.xml` - Contains signatures, safe to host publicly

### Emergency Key Regeneration
If private key is compromised:
1. Delete `build/dsa_priv.pem` and `build/dsa_pub.pem`
2. Run `./create-release.sh <new-version>` to generate fresh keys
3. Update app's `SUPublicEDKey` with new public key
4. Existing users will need to download fresh installers

## 🚨 Security Violations
If you see any of these, stop immediately:
- `dsa_priv.pem` appears in `git status`
- Private key is committed to repository
- Private key is shared or transmitted insecurely
57 changes: 28 additions & 29 deletions appcast.xml
Original file line number Diff line number Diff line change
@@ -1,31 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>Ora Browser Changelog</title>
<description>Most recent changes with links to updates.</description>
<language>en</language>
<item>
<title>Ora Browser 0.0.1</title>
<description>
<![CDATA[
<h2>Initial Release</h2>
<p>Ora Browser is a fast, secure, and beautiful browser built for macOS.</p>
<ul>
<li>Native macOS UI built with SwiftUI</li>
<li>Fast browsing powered by WebKit</li>
<li>Privacy-first with built-in content blocker</li>
<li>Multiple search engine support</li>
<li>Developer tools and extensions support</li>
</ul>
]]>
</description>
<pubDate>Mon, 04 Sep 2025 12:00:00 +0000</pubDate>
<enclosure url="https://github.com/the-ora/browser/releases/download/v0.0.1/Ora-Browser.dmg"
sparkle:version="1"
sparkle:shortVersionString="0.0.1"
length="0"
type="application/octet-stream"
sparkle:dsaSignature="YOUR_DSA_SIGNATURE_HERE"/>
</item>
</channel>
</rss>
<channel>
<title>Ora Browser Changelog</title>
<description>Most recent changes with links to updates.</description>
<language>en</language>
<item>
<title>Version 0.0.62</title>
<description><![CDATA[
<h2>Ora Browser v0.0.62</h2>
<p>Latest release of Ora Browser with the following features:</p>
<ul>
<li>Modern web browsing experience</li>
<li>Tabbed interface with sidebar</li>
<li>Built-in ad blocking</li>
<li>Privacy-focused design</li>
<li>Automatic update system</li>
</ul>
<p>This release includes bug fixes and performance improvements. Enjoy browsing with Ora!</p>
]]></description>
<pubDate>Fri, 05 Sep 2025 14:54:35 +0000</pubDate>
<enclosure url="https://github.com/the-ora/browser/releases/download/v0.0.62/Ora-Browser-0.0.62.dmg"
sparkle:version="0.0.62"
sparkle:shortVersionString="0.0.62"
length="3873849"
type="application/octet-stream"
sparkle:edSignature="SfCKAcVQmxuvZHH8Ll2P3acmZEuJ1RAuiVeLFN32G/DxlsPc0kMvSrdcakMlwI9PlPPAUT+OKCgrv4liPSTtDw=="/>
</item>
</channel>
</rss>
30 changes: 30 additions & 0 deletions appcast.xml.backup
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>Ora Browser Changelog</title>
<description>Most recent changes with links to updates.</description>
<language>en</language>
<item>
<title>Version 0.0.30</title>
<description><![CDATA[
<h2>Ora Browser v0.0.30</h2>
<p>Latest release of Ora Browser with the following features:</p>
<ul>
<li>Modern web browsing experience</li>
<li>Tabbed interface with sidebar</li>
<li>Built-in ad blocking</li>
<li>Privacy-focused design</li>
<li>Automatic update system</li>
</ul>
<p>This release includes bug fixes and performance improvements. Enjoy browsing with Ora!</p>
]]></description>
<pubDate>Fri, 05 Sep 2025 08:19:17 +0000</pubDate>
<enclosure url="https://github.com/the-ora/browser/releases/download/v0.0.30/Ora-Browser.dmg"
sparkle:version="0.0.30"
sparkle:shortVersionString="0.0.30"
length="40933888"
type="application/octet-stream"
sparkle:edSignature="xgw9JY72k0tvLrqWDs++xKRrGZOGCw1jyNHVz0yqDuJ+y6i4ze8EV7Dh24tC1dSzgrBn+A6nEgzFmOlnCtpRDg=="/>
</item>
</channel>
</rss>
Loading