diff --git a/README.md b/README.md index 234ff31..1c59e4c 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,36 @@ Loader loses the CDP injection path it requires when Millennium runs normally. > layer, normal Millennium and stock CSS Loader conflict over the external CDP > mechanism, so CSS Loader does not function correctly in the first place. +## Version 1.0 + +Version 1.0 is the first stable release of the complete CSS Loader for +Millennium experience: the desktop manager, compatibility backend, direct +runtime publisher, and official Millennium companion. + +Its defining advantage is fidelity. Existing CSS Loader themes remain in their +native format and are resolved by CSS Loader's own theme engine. The resulting +styles are delivered directly to Steam without flattening them into converted +Millennium bundles or rewriting valid CSS constructs. + +### Main highlights + +- Full CSS Loader configuration model: themes, profiles, dependencies, patch + controls, colors, generated variables, enable state, and cascade order. +- Direct CSS delivery that preserves inline SVG, data URLs, animations, local + assets, and advanced CSS exactly as authored. +- Desktop, Big Picture, Quick Access, Main Menu, notification, and popup target + routing through Millennium's supported in-process interfaces. +- Normal Millennium operation with no Steam `-dev` mode, external debugging + port, or `.cef-enable-remote-debugging` marker. +- Overlay behavior that keeps Fluenty, SpaceTheme, Pebble, or another selected + Millennium theme active underneath CSS Loader. +- Desktop management for installed themes, profiles, settings, store browsing, + downloads, updates, and the always-on Windows backend. +- Atomic runtime updates: the companion accepts new state only when its revision + and content hash match. +- Compatibility regression coverage for real-world themes, including nested + inline-SVG filters and `/themes_custom` images and fonts. + ## How this resolves the conflict CSS Loader for Millennium replaces the incompatible injection path while @@ -36,7 +66,7 @@ colors, components, class translations, and activation order. | Stock CSS Loader path | Millennium-compatible replacement | | --- | --- | | Creates `.cef-enable-remote-debugging` | Does not create or depend on the marker | -| Requires an externally reachable CDP port | Compiles the selected state into persistent CSS bundles | +| Requires an externally reachable CDP port | Publishes resolved injects to the Millennium companion | | Needs Millennium's `-dev` mode to expose that port | Works with Millennium's normal runtime mode | | Injects every Steam document through external CDP | Uses an in-process Millennium overlay plus its controlled per-plugin CDP proxy for isolated BrowserViews | @@ -49,27 +79,27 @@ separate browser bridge. Eliminating the delayed theming flash is an additional benefit of this design, not the entire purpose of the project. The compatibility runtime persists the -last compiled configuration on disk, and its companion starts as part of -Millennium instead of waiting for a late external standalone injection pass. +latest resolved injection state on disk, and its companion starts as part of +Millennium instead of waiting for an external standalone CDP connection. ## Highlights -- Replaces CSS Loader's external CDP injection path with a Millennium-compatible - generated-theme runtime. +- Replaces CSS Loader's external CDP injection path with ordered, direct style + injection inside Millennium. - Requires neither Millennium `-dev` mode nor `.cef-enable-remote-debugging`. - Uses existing themes from `~/homebrew/themes`; no manual conversion required. - Preserves profiles, dependencies, patch options, colors, CSS variables, local images/fonts, class translations, and CSS cascade order. - Defaults to overlay mode, keeping Fluenty, SpaceTheme, Pebble, or another selected Millennium theme active beneath CSS Loader. -- Produces **CSS Loader (Standalone)** as an optional CSS Loader-only theme and - as the internal host for generated CSS and assets. +- Preserves each resolved inject as CSS text instead of flattening it into a + rewritten bundle. - Bundles the backend and the separately maintained [CSS Loader Companion for Millennium](https://github.com/DevsNate/CSSLoader-Companion-Millennium) inside one desktop installer. - Bootstraps a new `%USERPROFILE%\homebrew\themes` library automatically; Decky or a pre-existing CSS Loader installation is not required. -- Reloads the generated theme when settings or watched CSS files change. +- Republishes direct runtime state when settings or watched CSS files change. - Keeps Desktop, Big Picture, Quick Access, Main Menu, and notification targets separate, matching CSS Loader's real document routing. @@ -96,20 +126,19 @@ reference warning in [Compatibility verification](docs/verification.md). 1. Install Millennium and start Steam once so Millennium creates its config. 2. Download and install the latest MSI from this repository's Releases page. 3. Open **CSS Loader for Millennium**. First-run setup creates the theme library, - installs the backend and companion, and generates a valid empty overlay. -4. Leave your preferred Millennium theme selected. The generated **CSS Loader - (Standalone)** entry is optional and is only needed for CSS Loader-only mode. + installs the backend and companion, and publishes a valid empty state. +4. Leave your preferred Millennium theme selected; CSS Loader is layered over it. 5. Restart Steam once, then manage themes, profiles, and every patch option from the desktop app. The installer places the backend in the current user's Windows Startup folder, copies and enables the companion in Steam, and creates -`%USERPROFILE%\homebrew\themes` when it does not exist. Your generated -configuration stays active at Steam startup even while the desktop app and -backend are closed. +`%USERPROFILE%\homebrew\themes` when it does not exist. The backend publishes +the app's resolved state and the companion applies it inside Steam. The local `Steam\millennium\themes\CSS Loader` folder is generated uniquely for -each user. It is an asset host, not a separately published Marketplace theme. +each user. It is a runtime-state mailbox, not a separately published Marketplace +theme. See [Clean installation](docs/clean-installation.md) for the complete first-run contract and migration behavior. @@ -144,7 +173,7 @@ available for `build:backend`, `build:plugin`, and `sync:desktop`. | Path | Purpose | | --- | --- | -| `runtime/backend` | CSS Loader compatibility logic and generated-theme compiler | +| `runtime/backend` | CSS Loader compatibility logic and direct-state publisher | | `plugins/millennium` | Pinned [CSS Loader Companion for Millennium](https://github.com/DevsNate/CSSLoader-Companion-Millennium) submodule used for MSI builds | | `apps/desktop` | Tauri theme manager and bundled installer | | `tools/audit` | Reference capture, parity, and Steam class-map auditing | @@ -168,8 +197,8 @@ runtime and desktop projects; see [Attribution and provenance](NOTICE.md). | Repository | Purpose | | --- | --- | -| [`CSSLoader-Millennium`](https://github.com/DevsNate/CSSLoader-Millennium) | Desktop app, CSS Loader-compatible backend, installer, compiler, and verification | -| [`CSSLoader-Companion-Millennium`](https://github.com/DevsNate/CSSLoader-Companion-Millennium) | Millennium Marketplace plugin that applies the generated output inside Steam | +| [`CSSLoader-Millennium`](https://github.com/DevsNate/CSSLoader-Millennium) | Desktop app, CSS Loader-compatible backend, installer, runtime publisher, and verification | +| [`CSSLoader-Companion-Millennium`](https://github.com/DevsNate/CSSLoader-Companion-Millennium) | Millennium Marketplace plugin that applies resolved CSS Loader injects inside Steam | ## License diff --git a/apps/desktop/package-lock.json b/apps/desktop/package-lock.json index daff726..92eeafb 100644 --- a/apps/desktop/package-lock.json +++ b/apps/desktop/package-lock.json @@ -1,12 +1,12 @@ { "name": "@css-loader-for-millennium/desktop", - "version": "0.2.0", + "version": "1.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@css-loader-for-millennium/desktop", - "version": "0.2.0", + "version": "1.0.0", "license": "GPL-3.0-only", "dependencies": { "@radix-ui/react-alert-dialog": "^1.0.4", diff --git a/apps/desktop/package.json b/apps/desktop/package.json index fbf9ebe..0231119 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -1,6 +1,6 @@ { "name": "@css-loader-for-millennium/desktop", - "version": "0.2.0", + "version": "1.0.0", "private": true, "description": "Desktop theme manager and installer for CSS Loader on Millennium.", "author": "Nate and contributors", diff --git a/apps/desktop/src-tauri/Cargo.lock b/apps/desktop/src-tauri/Cargo.lock index 405a125..c913d89 100644 --- a/apps/desktop/src-tauri/Cargo.lock +++ b/apps/desktop/src-tauri/Cargo.lock @@ -452,7 +452,7 @@ dependencies = [ [[package]] name = "css-loader-for-millennium" -version = "0.2.0" +version = "1.0.0" dependencies = [ "directories", "home", diff --git a/apps/desktop/src-tauri/Cargo.toml b/apps/desktop/src-tauri/Cargo.toml index b546860..cf7b247 100644 --- a/apps/desktop/src-tauri/Cargo.toml +++ b/apps/desktop/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "css-loader-for-millennium" -version = "0.2.0" +version = "1.0.0" description = "Desktop theme manager and installer for CSS Loader on Millennium" authors = ["Nate and contributors"] license = "GPL-3.0-only" diff --git a/docs/architecture.md b/docs/architecture.md index 943c033..4a9a1a3 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -15,8 +15,8 @@ flowchart LR T["Existing CSS Loader themes"] --> R["Python compatibility runtime"] C["Profiles and patch settings"] --> R M["Steam class translations"] --> R - R --> G["Generated CSS bundles and asset host"] - G --> P["Millennium overlay companion"] + R --> G["Ordered direct-injection state"] + G --> P["Millennium companion"] P --> D["Desktop and Big Picture"] P --> I["Quick Access, Main Menu, notifications"] S["Selected Millennium theme"] --> D @@ -24,34 +24,38 @@ flowchart LR A["Desktop manager"] --> R ``` -## Runtime compiler +## Runtime publisher `runtime/backend` retains CSS Loader's manifest reader, dependency handling, patch components, profiles, class translation, and theme-store integration. It -compiles enabled payloads in activation order, rewrites local asset URLs, and -writes a Millennium-served asset host whose optional selector entry is named -**CSS Loader (Standalone)**. +publishes every enabled payload in activation order without flattening bundles, +rewriting asset URLs, or parsing nested CSS constructs. File-backed injects are +read from their original source so legacy JavaScript-string escaping cannot +leak into the direct protocol. -The generated bundles are persisted on disk, so the desktop manager does not -need to be running when Steam starts. Overlay mode leaves the user's selected -Millennium theme untouched and layers the last compiled CSS Loader state over -it. Selecting **CSS Loader (Standalone)** remains available for a CSS -Loader-only presentation. +CSS Loader's existing `/themes_custom/...` contract is preserved. When Steam's +`themes_custom` path is not linked to the homebrew library, the publisher mirrors +active theme files there without modifying their CSS. + +The publisher atomically writes `runtime-state.json` followed by a small +`build-report.json` revision. The companion accepts a state only when both +content hashes match. The user's selected Millennium theme remains untouched, +and CSS Loader's ordered style elements are layered over it. ## Millennium companion The separately maintained [CSS Loader Companion for Millennium](https://github.com/DevsNate/CSSLoader-Companion-Millennium), pinned into this repository at `plugins/millennium` for release builds, is the -primary overlay runtime. It synchronizes Desktop -and Big Picture directly inside Steam, then reaches Quick Access, Main Menu, -and notification toasts through Millennium's per-plugin Chrome DevTools -Protocol proxy because those targets live in isolated BrowserViews. +primary runtime. It reconciles individual `