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
93 changes: 93 additions & 0 deletions .github/workflows/checks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
name: Checks

# Compile and test on every desktop platform, on every push and PR.
#
# build.yml already compiles all three, but only as part of a release-profile
# installer build with llama.cpp and bundling behind it — so a Windows-only
# compile error surfaces late and expensive. This job is dev-profile, no bundle,
# and exists purely to answer "does it build and pass everywhere" quickly.
#
# It earns its keep on the per-platform FFI in src/content_blocking/ and
# src/browsing_data/, where each platform is a separate implementation against a
# different native API and two of the three cannot be compiled on a Mac.
on:
workflow_dispatch:
pull_request:
push:
branches:
- '**'

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
CARGO_HTTP_MULTIPLEXING: 'false'
CARGO_NET_RETRY: '10'
CARGO_TERM_COLOR: always

jobs:
web:
name: Lint and typecheck
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
- run: bun install --frozen-lockfile
- run: bun run lint
- run: bun run typecheck:web

rust:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
strategy:
# Never cancel the other two on one platform's failure: when the platform
# implementations diverge, knowing which ones broke is the whole point.
fail-fast: false
matrix:
include:
- name: macOS
os: macos-latest
- name: Linux
os: ubuntu-latest
- name: Windows
os: windows-latest
steps:
- uses: actions/checkout@v4

- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: swatinem/rust-cache@v2
with:
workspaces: src-tauri

- name: Install Linux build dependencies
if: matrix.os == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev \
librsvg2-dev libssl-dev pkg-config

- name: Set libclang path
if: matrix.os == 'windows-latest'
shell: bash
run: echo 'LIBCLANG_PATH=C:\Program Files\LLVM\bin' >> "$GITHUB_ENV"

# clippy compiles everything cargo check would, so it stands in for both.
- name: cargo clippy
working-directory: src-tauri
run: cargo clippy --all-targets -- -D warnings

- name: cargo test
working-directory: src-tauri
run: cargo test --lib

# Only WebKit can say whether the rule file compiles, and a rejected list
# disables blocking silently at runtime. The unit tests check the rules
# against what the documentation claims; this checks them against WebKit.
- name: Verify content blocking rules compile
if: matrix.os == 'macos-latest'
working-directory: src-tauri
run: cargo run --example verify_content_rules
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ src-tauri/gen/*
src-tauri/gen/schemas/
src-tauri/target
src-tauri/target-linux-*
# scripts/check-platforms.sh
src-tauri/target-platform-check
src-tauri/target-platform-check-windows
aether-models/
.DS_Store
.eslintcache
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
status: resolved
trigger: "iCE card clicks teleport cards to the top-left instead of centering with a slight zoom; Ordered Topics centers without zoom; crystallization intermittently fails for Quantum; percentage labels and Open in Library should be removed."
trigger: 'iCE card clicks teleport cards to the top-left instead of centering with a slight zoom; Ordered Topics centers without zoom; crystallization intermittently fails for Quantum; percentage labels and Open in Library should be removed.'
created: 2026-07-25T20:55:39+0200
updated: 2026-07-25T21:38:00+0200
---
Expand Down
28 changes: 14 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,12 @@
Download the latest build for your platform from
**[Releases](https://github.com/CanPixel/aether/releases/latest)**:

| Platform | File |
|---|---|
| macOS (Apple Silicon, 11+) | `AETHER_macOS.dmg` |
| Windows (x86_64) | `AETHER_x64-setup.exe` |
| Linux (x86_64) | `AETHER_amd64.deb` · `AETHER_amd64.AppImage` |
| Linux (ARM64) | `AETHER_arm64.deb` |
| Platform | File |
| -------------------------- | -------------------------------------------- |
| macOS (Apple Silicon, 11+) | `AETHER_macOS.dmg` |
| Windows (x86_64) | `AETHER_x64-setup.exe` |
| Linux (x86_64) | `AETHER_amd64.deb` · `AETHER_amd64.AppImage` |
| Linux (ARM64) | `AETHER_arm64.deb` |

> [!NOTE]
> **Intel Macs are not supported.** Releases are built `arm64` only, and Rosetta
Expand All @@ -58,17 +58,17 @@ Download the latest build for your platform from
> is in [docs/SIGNING.md](docs/SIGNING.md).

**macOS.** The `.dmg` is unsigned and un-notarized, so macOS quarantines it and
reports *"ÆTHER is damaged and can't be opened"*. It is not damaged. Drag the app to
reports _"ÆTHER is damaged and can't be opened"_. It is not damaged. Drag the app to
`/Applications`, then clear the quarantine flag:

```bash
xattr -dr com.apple.quarantine /Applications/ÆTHER.app
```

Then open it normally. (Right-click → *Open* alone does not work for un-notarized
Then open it normally. (Right-click → _Open_ alone does not work for un-notarized
apps on current macOS.)

**Windows.** SmartScreen shows *"Windows protected your PC"*. Click **More info**,
**Windows.** SmartScreen shows _"Windows protected your PC"_. Click **More info**,
then **Run anyway**.

**Linux.** No workaround needed.
Expand Down Expand Up @@ -134,11 +134,11 @@ The privacy boundary applies to ÆTHER's indexing and intelligence pipeline, not

Fresh installs use **AiON Launch**, the in-app setup flow for downloading local models into the app-data model directory. The same setup flow is available later from Settings for repair or manual installation.

| Model | Role | Official source | Size |
| ------------- | ------------------------------------------------------------- | ------------------------------------- | -------: |
| **AiON MiST** | Required embedding model for search, capture, and retrieval | `Qwen/Qwen3-Embedding-0.6B-GGUF` | ~0.64 GB |
| **AiON LiTE** | Optional chat model for everyday answers and summaries | `google/gemma-4-E2B-it-qat-q4_0-gguf` | ~3.35 GB |
| **AiON WiSE** | Optional chat model for richer synthesis and iCE maps | `google/gemma-4-E4B-it-qat-q4_0-gguf` | ~5.15 GB |
| Model | Role | Official source | Size |
| ------------- | ----------------------------------------------------------- | ------------------------------------- | -------: |
| **AiON MiST** | Required embedding model for search, capture, and retrieval | `Qwen/Qwen3-Embedding-0.6B-GGUF` | ~0.64 GB |
| **AiON LiTE** | Optional chat model for everyday answers and summaries | `google/gemma-4-E2B-it-qat-q4_0-gguf` | ~3.35 GB |
| **AiON WiSE** | Optional chat model for richer synthesis and iCE maps | `google/gemma-4-E4B-it-qat-q4_0-gguf` | ~5.15 GB |

Install choices:

Expand Down
18 changes: 10 additions & 8 deletions THIRD_PARTY_LICENSES.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ All three models Æther uses are licensed under the **Apache License, Version
2.0** (full text at the bottom of this file).

### Gemma 4 — E2B and E4B (chat / generation)

- Publisher: Google DeepMind
- Project: https://ai.google.dev/gemma
- License: Apache License 2.0
Expand All @@ -23,6 +24,7 @@ All three models Æther uses are licensed under the **Apache License, Version
file here if one is present in the release you ship.

### Qwen3-Embedding-0.6B (text embeddings)

- Publisher: Qwen Team, Alibaba Group
- Project: https://huggingface.co/Qwen/Qwen3-Embedding-0.6B
- License: Apache License 2.0
Expand All @@ -38,15 +40,15 @@ All three models Æther uses are licensed under the **Apache License, Version
The desktop application links or bundles open-source libraries, including
(non-exhaustive):

| Component | License |
|---|---|
| llama.cpp / ggml | MIT |
| Tauri (and tauri-plugin-opener) | MIT OR Apache-2.0 |
| candle, candle-nn, candle-transformers | MIT OR Apache-2.0 |
| tokenizers | Apache-2.0 |
| Component | License |
| -------------------------------------------------------------------------- | ----------------- |
| llama.cpp / ggml | MIT |
| Tauri (and tauri-plugin-opener) | MIT OR Apache-2.0 |
| candle, candle-nn, candle-transformers | MIT OR Apache-2.0 |
| tokenizers | Apache-2.0 |
| reqwest, serde, serde_json, tokio, url, uuid, scraper, chrono, encoding_rs | MIT OR Apache-2.0 |
| framer-motion | MIT |
| lucide-react | ISC |
| framer-motion | MIT |
| lucide-react | ISC |

This table is a summary. Regenerate the authoritative, complete list with full
license texts from the dependency tree:
Expand Down
10 changes: 5 additions & 5 deletions docs/LICENSING.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ These are true today and worth fixing **whatever licence is chosen**.

### 1. Even local modification is not permitted

PolyForm Strict grants everything *"other than distributing the software **or making
changes or new works based on the software**."*
PolyForm Strict grants everything _"other than distributing the software **or making
changes or new works based on the software**."_

That second clause is stricter than it usually reads. It means:

Expand Down Expand Up @@ -85,7 +85,7 @@ it ships.

Real OSI open source, with a commercial licence sold to anyone who cannot comply.

- Weak here. The copyleft trigger is *conveying* or *network use*; a local desktop
- Weak here. The copyleft trigger is _conveying_ or _network use_; a local desktop
app with no server rarely trips either, so the commercial pressure that makes
dual-licensing work mostly is not there.
- A competitor could fork commercially provided they publish source.
Expand All @@ -108,8 +108,8 @@ contact.

## A correction to the audit that prompted this

The audit said the current setup has *"the costs of proprietary and the revenue of
open source."* That is unfair as written. PolyForm Strict **does** establish the
The audit said the current setup has _"the costs of proprietary and the revenue of
open source."_ That is unfair as written. PolyForm Strict **does** establish the
legal basis for a commercial story — every commercial right is retained. What is
missing is everything on the other side of it: no price, no tier, no contact. Gap 3
above is the real finding; the licence family is a secondary question.
Expand Down
Loading
Loading