- @holocron.so/vite ^0.33.0 -> ^0.35.2 (pulls @holocron.so/cli 0.22.2)
- Quote icon values in hermes and solid guide frontmatter
(lucide:cpu, lucide:layers) so the colon parses as a plain string
Session: ses_f3238af87ffeubEN1y4DWf4FL1
The dark sky pixel disappears on the video. The dots now use #a1cef8,
a light sky pixel from the left edge of the hero image.
Session: ses_f354b12f6ffecM3jsw9hX59RHp
#6490bc was an average of bright sky pixels, so it looked pale. The open
sky at the top left of the hero is one flat color, #234e9d. Use that for
the docs primary color and the hero dots.
Session: ses_f354b12f6ffecM3jsw9hX59RHp
The site accent was orange. The new README image is a light blue sky, so
the Holocron primary color is now #6490bc, the average of the bright
saturated sky pixels.
Session: ses_f354b12f6ffecM3jsw9hX59RHp
Add website/src/guides/solid.mdx covering install, preload, render,
primitives, motion, Select, testing, and automation. Link it from
the Guides nav and from the README Solid section.
The Solid AnimatePresence test now wraps the exiting motion.div in
Show. A boolean && child is not a tracked hole, so the previous
test never actually unmounted.
Session: ses_f3c074549ffe2jtrJMYbbLhqMx
https://gpuix.dev/chat-example/ stayed on the loader for two reasons.
The error overlay read process.platform at module load. A browser has
no process, so that threw before Wasm started. OVERLAY_MONO is now a
CSS font stack. readMacCpuThrottle() treats a missing process as no
THROTTLE. render() only calls process.exit when process exists.
createRoot() also called setWindowKeyEvents before GPUI finished
opening the web window, which threw GPUIX web window is not ready.
The wasm renderer now queues those listeners the same way it already
queues the debug overlay, then applies them when start_web_app builds
GpuixView.
The production chat bundle copies examples/web.css, and the website
serves it as /chat-example/web.css so the loader styles load.
Session: ses_f64d18bc8ffeysXOZPWSnfTQWv
The Holocron title, docs.json description, and README lead now say GPUI
and React for native apps, not only native React on the GPU. The hero
tagline is GPUI and React / for native apps. Keywords on the homepage
frontmatter are GPUI, GPUI React, GPUI TypeScript, and native GPUI app.
The shader overlay uses a 0.7 alpha multiplier instead of a dark/light
opacity class, so the flare stays visible behind the new copy.
Session: ses_f64f287b1ffeD0rCw6d52oXfHk
The docs index used to open on the README heading. Put an Above
block on the homepage like Holocron: one H1, GitHub and browser
buttons, and VideoBackgroundShader behind it.
Tagline is native React on the GPU. That is the product: React
and TypeScript paint through GPUI to Metal, DirectX, or Vulkan.
No Electron. No web view.
The heading uses Arizona Flare from mintlify.com/data. The shader
uses Holocron's hero-bg.mp4, cropped into the ring so the dots
fill the page-width banner. Color is a light orange at low
opacity. The canvas stays inside --grid-max-width; w-screen was
what spilled past the page.
Session: ses_f64f287b1ffeD0rCw6d52oXfHk
The hermes-node guide now covers three extra ship steps:
1. Shrink the sidecar. napi build --platform --release already uses LTO.
It does not pass --strip. strip -x drops the macOS arm64 addon from
22 MB to 17 MB. Bare strip fails because NAPI / AppKit imports must
stay. Dropping test-support and more LTO do not move the needle. The
remaining 17 MB is GPUI. CI still ships the 22 MB published binary.
2. Wrap gpuix-hermes and the .node in a .app with cargo-packager. List
the addon as a second binary so it lands in Contents/MacOS, where
dlopen looks. Measured .app size is 34 MB. A Bun chat .app with no
sidecar was 82 MB on the same machine.
3. hermes-node has no global fetch. node-fetch@2 over Node http works
for plain HTTP. HTTPS throws because TLS is not implemented. Do not
install node-fetch v3. It is ESM and Hermes cannot parse it.
Also link tmikov/hermes-node#11 for the macOS -dead_strip napi_* drop.
Update the docs-hermes-runtime changeset to mention packager, strip,
and the 34 MB .app.
Session: ses_f8427a2d6ffeLODe2UB6Cw8300
Add a Holocron guide at website/src/guides/hermes.mdx and link it from the
README. The page covers rebuilding hermes-node on macOS (the published
tarball dead-strips napi_*), bundling React to CJS with bun build, and the
measured ship set: 12 MB executable plus a 22 MB native sidecar.
A hermes/ prototype sits next to the docs so the same path can be rerun.
Session: ses_f84b88b16ffePB3X7Fqzot47OY
Document element and renderer keyboard callbacks, action dispatch order, and imperative focus traversal as part of the public API contract.
Update the documentation site to Holocron 0.33.0 and refresh its lockfile. The website typecheck and lint pass with the new dependency graph.
Session: ses_fa3b8830cffeGdTgarIef6r2Kn
Use Holocron compact mode so the GPUIX documentation keeps its navigation and content closer together on wide screens.
Session: ses_fb1f5cd3fffeAe9VxtTeynTdjA
Build the browser chat entry as part of the documentation website's production
build. The web build now emits a minified `chat.js` bundle and its Wasm asset
into the website's ignored public directory, after rebuilding the native Wasm
and React package so deployed output cannot use stale generated code.
Keep the production destination fixed at `website/public/chat-example` rather
than accepting a caller-controlled directory. The build clears that generated
directory before bundling without allowing a malformed command to remove an
arbitrary repository path.
Serve the shared example HTML at `/chat-example/`, redirect the non-trailing
slash form, and set COOP and COEP on the document. Those headers make the page
cross-origin isolated, which the shared WebAssembly memory requires. Static
JavaScript and Wasm stay same-origin under the same route prefix.
Add an accessible loading screen while the browser downloads and initializes
the renderer, then remove it after GPUIX mounts. The same shell remains usable
for local browser development, while the production route swaps its TypeScript
entry for the generated JavaScript asset.
Ignore the generated website bundle and add a minor changeset for the new live
example at https://gpuix.dev/chat-example/.
Session: ses_fc04fcb1dffeooxK1KAopXSTAY
Replace the single docs sidebar with a tabbed navigation that separates the
main documentation from generated release notes. Keep GitHub and npm as
link-only tabs so all top-level destinations use one consistent navigation
model and icon set.
Add introductory content for the changelog tab. It explains that native and
React packages ship together from one commit and points readers to the
prebuilt chat binaries attached to each release. Holocron uses this page as
the stable introduction before the release entries fetched from GitHub.
This commit restores the website-only work that was deliberately left in the
working tree by a906cf9 after it was accidentally included in an unrelated CI
commit.
Session: ses_fc04fcb1dffeooxK1KAopXSTAY
My previous commit used `git add -A` and swept in `website/docs.json`
and `website/src/changelog/intro.mdx`, which another session wrote
while I was working. They are not part of the CI change.
This restores both to their state before that commit and leaves the
work on disk, untouched: docs.json is a modified working tree file
again and intro.mdx is untracked again, so whoever wrote them can
commit them with their own message.
Session: ses_fc073cf53ffem2NBtBXPFaCgyF
Three changes to the release pipeline, all found while cutting 0.5.0.
**One target per OS.** The matrix built six targets; it now builds the
architecture each OS is mostly used on and nothing else:
| OS | Target | Renderer |
|---------|---------------------------|---------------|
| macOS | aarch64-apple-darwin | Metal |
| Linux | x86_64-unknown-linux-gnu | Vulkan / wgpu |
| Windows | x86_64-pc-windows-msvc | Direct3D |
Every extra target is a full gpui build, and gpui is most of the wall
clock of this workflow, so a release was paying twice over for platforms
almost nobody installs. Intel macOS, arm64 Linux and arm64 Windows lose
their prebuilt binary. `napi.targets` is trimmed to match; the two lists
must stay identical or the published loader looks for a platform package
CI never built. Both test jobs already pull targets that stay.
**The chat example gets an extension.** A GitHub release asset is served
as raw bytes, so a download lost the executable bit and, on macOS and
Linux, arrived with no extension at all. The build job now packs those
two into `example-chat-<target>.tar.gz`, which keeps the mode and names
itself. Windows keeps its `.exe`. Verified end to end with the real
0.5.0 macOS binary: pack, drop the mode to 644 like a browser download,
`tar -xzf`, and the extracted file is `-rwxr-xr-x` and opens its window.
The download also drops from 83 MB to 33 MB.
**Create the GitHub release before CI reaches the publish job.** The
upload step exits 0 when no release exists for the tag, so a release
created afterwards gets no binaries, and the only way to add them later
is to move ~100 MB through a laptop. There is no API that attaches an
artifact to a release: the assets endpoint wants the raw bytes in the
request body, and `gh release upload` cannot read stdin (cli/cli#5820).
AGENTS.md now spells out the order, and what to do about the tags when
CI fails and you push fixes.
Session: ses_fc073cf53ffem2NBtBXPFaCgyF
A Holocron site under `website/`, deployed to Cloudflare Workers. The
README is the only page for now, so the source of truth stays in the
repository root instead of drifting into a second copy.
Session: ses_fc1c6df4bffewVGSCAfO0JZ4nT