Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
122 commits
Select commit Hold shift + click to select a range
7cacf3d
docs: refocus README on public architecture
turinglambdaai Sep 17, 2026
5616ecf
docs: add architecture boundaries
turinglambdaai Sep 17, 2026
39b3c0d
docs: add focused roadmap
turinglambdaai Sep 17, 2026
3a4bac3
docs: mark glaze main as public facade
turinglambdaai Sep 17, 2026
b1d2aaa
test: cover public glaze facade
turinglambdaai Sep 17, 2026
2c52e75
examples: add focused tray example
turinglambdaai Sep 17, 2026
d4f49de
examples: add focused events example
turinglambdaai Sep 17, 2026
f3edd05
examples: add events frontend
turinglambdaai Sep 17, 2026
4d59d9f
docs: organize examples by recommended learning path
turinglambdaai Sep 17, 2026
2dfe517
test: gate macOS menu e2e to macOS
turinglambdaai Sep 17, 2026
3fabee2
fix: make app shutdown idempotent and cleanup on errors
turinglambdaai Sep 17, 2026
b24169c
fix: dispatch tray operations by handle backend
turinglambdaai Sep 17, 2026
ada1599
fix: retain single-instance locks for process lifetime
turinglambdaai Sep 17, 2026
fc0f310
test: cover idempotent app shutdown
turinglambdaai Sep 17, 2026
a322189
security: confine static files and fix loopback host parsing
turinglambdaai Sep 17, 2026
f4f86b6
test: cover host guard and static path confinement
turinglambdaai Sep 17, 2026
0c70b24
fix: resolve packaged public assets without wrapper cwd
turinglambdaai Sep 17, 2026
7a950a3
fix: compile application entry directly
turinglambdaai Sep 18, 2026
8cac26e
fix: resolve packaged assets and validate server inputs
turinglambdaai Sep 18, 2026
59b5716
fix: modernize scaffold and repair build option parsing
turinglambdaai Sep 18, 2026
f531318
test: execute packaged module+ main entry
turinglambdaai Sep 18, 2026
ab5bb8f
ci: execute packaged entry on every platform
turinglambdaai Sep 18, 2026
1a29823
ci: enforce formatting and cover Racket 9.3 packaging
turinglambdaai Sep 18, 2026
50009fc
fix: harden update manifest fetching
turinglambdaai Sep 18, 2026
a52c170
security: stop leaking handler exceptions to clients
turinglambdaai Sep 18, 2026
cc2ede0
test: cover update hashing and safe 500 responses
turinglambdaai Sep 18, 2026
5209af1
fix: generate safe JavaScript API bindings
turinglambdaai Sep 18, 2026
9a945e0
test: cover safe generated API JavaScript
turinglambdaai Sep 18, 2026
ed3bb4f
fix: make CLI fail fast and protect existing projects
turinglambdaai Sep 18, 2026
a4900b8
security: enable API token by default and validate lifecycle inputs
turinglambdaai Sep 18, 2026
65b8d3f
test: cover run-app argument contracts
turinglambdaai Sep 18, 2026
21d5389
docs: document secure defaults and hardened runtime contracts
turinglambdaai Sep 18, 2026
f2c3c7a
docs: record stabilization fixes
turinglambdaai Sep 18, 2026
7085b05
feat: expose background-active webview mode
turinglambdaai Sep 18, 2026
3864006
feat: accept portable background-active webview option
turinglambdaai Sep 18, 2026
62488a8
feat: accept portable background-active webview option
turinglambdaai Sep 18, 2026
3c64dd4
feat: accept portable background-active webview option
turinglambdaai Sep 18, 2026
d4af0f7
feat: keep macOS monitoring webviews active with public APIs
turinglambdaai Sep 18, 2026
a758476
feat: pass background-active mode through run-app
turinglambdaai Sep 18, 2026
554e99e
fix: isolate build intermediates and verify notarization staple
turinglambdaai Sep 18, 2026
9beec49
fix: repair update checker syntax
turinglambdaai Sep 18, 2026
ef2d121
fix: classify listener startup races as network errors
turinglambdaai Sep 18, 2026
5889fbd
docs: document background-active webview mode
turinglambdaai Sep 18, 2026
17f12e2
fix: use real Windows folder picker and correct kdialog argv
turinglambdaai Sep 18, 2026
0c09144
fix: use correct macOS SMAppService registration API
turinglambdaai Sep 18, 2026
7d3913b
fix: harden license canonicalization and claim validation
turinglambdaai Sep 18, 2026
5096f4a
test: cover license control characters and invalid dates
turinglambdaai Sep 18, 2026
5e5a58b
fix: harden Linux deep-link registration contract
turinglambdaai Sep 18, 2026
d1a2034
security: escape Linux desktop entries and validate autolaunch inputs
turinglambdaai Sep 18, 2026
5fca17d
test: cover Linux deep-link contract and escaping
turinglambdaai Sep 18, 2026
c0ed47a
security: open browser without shell command construction
turinglambdaai Sep 18, 2026
22c9a0e
security: validate SSE event names and payloads
turinglambdaai Sep 18, 2026
86e4ae0
fix: make asset helpers robust for nested directories
turinglambdaai Sep 18, 2026
f72970c
fix: use real GDK clipboard atom and correct Linux helpers
turinglambdaai Sep 18, 2026
7cf6478
security: pass macOS notification content as argv
turinglambdaai Sep 18, 2026
d5d2aaf
fix: preserve Unicode and memory ownership in Windows clipboard
turinglambdaai Sep 18, 2026
4b944c9
fix: make installer builds fail-safe and assemble Linux AppDir
turinglambdaai Sep 18, 2026
443e630
security: escape packaging metadata and shell boundaries
turinglambdaai Sep 18, 2026
efb0d3b
fix: repair packaging helper source quoting
turinglambdaai Sep 18, 2026
a48f4a1
ci: cancel stale runs for superseded PR commits
turinglambdaai Sep 18, 2026
6442ff8
fix: fail closed for signing and bundle metadata
turinglambdaai Sep 18, 2026
1ffd840
ci: only request signing where credentials are available
turinglambdaai Sep 18, 2026
6f2bfb4
fix: repair SHA verifier parentheses
turinglambdaai Sep 18, 2026
960c701
fix: validate app names without unsupported regex escapes
turinglambdaai Sep 18, 2026
2dcf234
fix: remove stale glaze-lib CLI dependency
turinglambdaai Sep 18, 2026
1efb8d6
chore: keep runnable examples out of package setup compilation
turinglambdaai Sep 18, 2026
523e698
chore: exclude executable CI scripts from package setup
turinglambdaai Sep 18, 2026
c154a2d
security: make bootstrap single-use and protect SSE/origin boundaries
turinglambdaai Sep 18, 2026
af09637
security: use a distinct one-time browser bootstrap nonce
turinglambdaai Sep 18, 2026
39a71fe
test: lock down bootstrap, origin, and SSE authentication
turinglambdaai Sep 18, 2026
f50a377
test: cover SSE protocol input validation
turinglambdaai Sep 18, 2026
debca81
test: restore environment portably
turinglambdaai Sep 18, 2026
87cd65c
test: align generated client assertions with safe JS
turinglambdaai Sep 18, 2026
abf0f69
ci: use supported Windows installer toolchain
turinglambdaai Sep 18, 2026
7771166
fix: restore AppImage environment portably
turinglambdaai Sep 18, 2026
a1cbbac
fix: resolve Windows root-relative asset paths
turinglambdaai Sep 18, 2026
9bd8152
ci: replace unavailable formatter with compile gate
turinglambdaai Sep 18, 2026
bc71001
api: validate WebView facade arguments consistently
turinglambdaai Sep 18, 2026
69d1640
test: cover WebView facade contracts
turinglambdaai Sep 18, 2026
9595956
fix: fail loudly when browser fallback cannot launch
turinglambdaai Sep 18, 2026
2f49934
api: validate routes and response helpers early
turinglambdaai Sep 18, 2026
e0ac40f
test: cover API route and response contracts
turinglambdaai Sep 18, 2026
c06a4dc
docs: add security reporting policy
turinglambdaai Sep 18, 2026
f7fb875
docs: align contributor workflow with architecture boundaries
turinglambdaai Sep 18, 2026
d660b72
fix: make Windows dialog buffers memory-safe and parse multi-select
turinglambdaai Sep 18, 2026
b8b5da1
test: cover Windows dialog multi-string parsing and contracts
turinglambdaai Sep 18, 2026
9139a75
api: validate menu protocol before native dispatch
turinglambdaai Sep 18, 2026
406eb83
test: cover menu protocol contracts
turinglambdaai Sep 18, 2026
fb95e47
api: validate tray facade arguments consistently
turinglambdaai Sep 18, 2026
b97dbb3
test: cover tray facade contracts
turinglambdaai Sep 18, 2026
1a207e0
api: separate sys argument errors from platform failures
turinglambdaai Sep 18, 2026
6357a63
test: cover sys public argument contracts
turinglambdaai Sep 18, 2026
751b652
ci: verify installable source package archive
turinglambdaai Sep 18, 2026
6527030
docs: align Chinese README with current architecture
turinglambdaai Sep 18, 2026
dc17b3e
docs: add repeatable release checklist
turinglambdaai Sep 18, 2026
ff5fadb
fix: report Windows autolaunch removal failures
turinglambdaai Sep 18, 2026
c7fa748
pkg: separate runtime and build dependencies
turinglambdaai Sep 18, 2026
2f771da
cli: fail fast on invalid arguments and partial key generation
turinglambdaai Sep 18, 2026
f8036d7
test: cover CLI fail-fast behavior and scaffold
turinglambdaai Sep 18, 2026
2a18b7c
fix: validate and fully read update manifests
turinglambdaai Sep 18, 2026
152c8b3
test: cover update manifest and version contracts
turinglambdaai Sep 18, 2026
95e117c
Add Dependabot for GitHub Actions
turinglambdaai Sep 20, 2026
1334300
Add pull request checklist
turinglambdaai Sep 20, 2026
6e05ccb
Add cross-platform bug report template
turinglambdaai Sep 20, 2026
c0c2a76
Configure issue templates
turinglambdaai Sep 20, 2026
bdc3a92
Harden CI permissions and timeouts
turinglambdaai Sep 20, 2026
350adce
Pin CI actions to reviewed commits
turinglambdaai Sep 20, 2026
018099d
Avoid mutable AppImage tool in CI
turinglambdaai Sep 20, 2026
97cbacb
Upgrade setup-racket to Node 24 runtime
turinglambdaai Sep 20, 2026
3260378
Upgrade GitHub Actions to Node 24 releases
turinglambdaai Sep 20, 2026
4f89308
Protect generated private keys on macOS
turinglambdaai Sep 20, 2026
8e80ae7
Document supported installer toolchains
turinglambdaai Sep 20, 2026
15e7358
Detect supported WiX version before packaging
turinglambdaai Sep 20, 2026
bfb4120
Add cross-platform editor defaults
turinglambdaai Sep 20, 2026
9747908
Normalize text files across platforms
turinglambdaai Sep 20, 2026
c4e0e72
Ignore generated installers and private key material
turinglambdaai Sep 20, 2026
59abdfe
Add large static asset regression test
turinglambdaai Sep 20, 2026
a5e57a0
Stream static assets instead of buffering whole files
turinglambdaai Sep 20, 2026
796558a
test: cover macOS WebView full occlusion
Sep 20, 2026
9ef120e
test: make macOS occlusion probe robust
Sep 20, 2026
9388d4e
docs: record macOS occlusion CI limitation
Sep 20, 2026
91a645c
Merge remote-tracking branch 'origin/main' into chore/architecture-bo…
Sep 21, 2026
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
14 changes: 14 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

[*.rkt]
indent_style = space
indent_size = 2

[*.md]
trim_trailing_whitespace = false
15 changes: 15 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
* text=auto eol=lf

*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.icns binary
*.dll binary
*.exe binary
*.msi binary
*.dmg binary
*.zip binary
*.gz binary
*.AppImage binary
72 changes: 72 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: Bug report
description: Report a reproducible Glaze runtime, native integration, or packaging problem
title: "[bug] "
body:
- type: markdown
attributes:
value: |
Thanks for reporting a Glaze bug. Native and packaging behavior is platform-sensitive, so exact environment details are important.
- type: textarea
id: problem
attributes:
label: What happened?
description: Describe the observed behavior and what you expected instead.
validations:
required: true
- type: textarea
id: reproduce
attributes:
label: Minimal reproduction
description: Include the smallest Racket code or repository/commands that reproduce the problem.
placeholder: |
raco glaze init repro
cd repro
...
validations:
required: true
- type: dropdown
id: os
attributes:
label: Operating system
options:
- Windows
- macOS
- Linux
- Other
validations:
required: true
- type: input
id: os-version
attributes:
label: OS version / architecture
placeholder: "macOS 15 arm64, Windows 11 x64, Ubuntu 24.04 x86_64"
validations:
required: true
- type: input
id: racket
attributes:
label: Racket version
placeholder: "8.12 CS / 9.3 CS"
validations:
required: true
- type: input
id: glaze
attributes:
label: Glaze version or commit
placeholder: "0.7 or commit SHA"
validations:
required: true
- type: textarea
id: logs
attributes:
label: Relevant logs / output
render: text
- type: checkboxes
id: checks
attributes:
label: Checks
options:
- label: I searched existing issues for the same problem.
required: true
- label: I removed secrets, license private keys, tokens, and customer data from the report.
required: true
5 changes: 5 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
blank_issues_enabled: true
contact_links:
- name: Security vulnerability
url: https://github.com/turinglambdaai/glaze/security/policy
about: Please use the private security reporting path described in SECURITY.md instead of a public issue.
9 changes: 9 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
version: 2
updates:
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
open-pull-requests-limit: 5
labels:
- dependencies
16 changes: 16 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
## Summary

Describe the user-visible or maintenance problem this PR solves.

## Validation

- [ ] `raco make glaze/main.rkt glaze-cli/cli.rkt`
- [ ] `raco test glaze-test/`
- [ ] Public API changes are documented, or this PR does not change the public API
- [ ] Platform-specific behavior is behind the existing dispatcher boundary
- [ ] Packaging changes were exercised on the affected platform(s)
- [ ] Security-sensitive changes avoid shell interpolation and keep loopback capability boundaries intact

## Compatibility

Call out any behavior change that existing Glaze applications may observe. Prefer additive changes during the 0.x stabilization period.
123 changes: 102 additions & 21 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,51 +6,95 @@ on:
pull_request:
branches: [main]

# CI only needs to read the repository. Keep the default GITHUB_TOKEN surface
# minimal so third-party actions and native packaging steps cannot write back.
permissions:
contents: read

# A PR can receive many small stabilization commits. Only the newest SHA is
# useful; cancel stale runs so they do not consume the cross-platform runners
# or delay feedback for the current head.
concurrency:
group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
test:
runs-on: ${{ matrix.os }}
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest]
racket-version: ['8.12']

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0

- name: Install Racket
uses: Bogdanp/setup-racket@v1.11
uses: Bogdanp/setup-racket@2466913449df77df2bad149d1f2fc4e1ea4795dd # v1.15
with:
version: ${{ matrix.racket-version }}

- name: Install Glaze package
shell: bash
run: raco pkg install --auto --no-docs --link "$PWD"

- name: Compile public entrypoints
run: raco make glaze/main.rkt glaze-cli/cli.rkt scripts/package-entry-smoke.rkt

- name: Run tests
run: raco test glaze-test/

- name: Check formatting
run: raco fmt --check glaze/ glaze-cli/ glaze-test/
continue-on-error: true
source-package:
# Release hygiene: prove the filtered source archive is independently
# installable. This job intentionally does not link the checkout first.
runs-on: ubuntu-latest
timeout-minutes: 20

steps:
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0

- name: Install Racket
uses: Bogdanp/setup-racket@2466913449df77df2bad149d1f2fc4e1ea4795dd # v1.15
with:
version: '8.12'

- name: Create source package
shell: bash
run: |
cd ..
raco pkg create --source --format zip glaze
test -s glaze.zip

- name: Install source package archive
shell: bash
run: raco pkg install --auto --no-docs ../glaze.zip

- name: Verify installed facade and CLI
shell: bash
run: |
racket -e '(require glaze) (unless (procedure? run-app) (error "missing run-app"))'
raco glaze help

webview-e2e:
# Real-window WebView end-to-end on each OS: open -> load (title
# commits) -> capture -> navigate -> close -> on-close. Windows needs
# nothing extra (WebView2 runtime is preinstalled); Linux runs under
# Xvfb with the WebKitGTK packages.
runs-on: ${{ matrix.os }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest]
racket-version: ['8.12']

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0

- name: Install Racket
uses: Bogdanp/setup-racket@v1.11
uses: Bogdanp/setup-racket@2466913449df77df2bad149d1f2fc4e1ea4795dd # v1.15
with:
version: ${{ matrix.racket-version }}

Expand Down Expand Up @@ -83,57 +127,72 @@ jobs:
# Build a sample app with `raco glaze build --installer` on each platform
# and upload the resulting distribution + installer as artifacts.
runs-on: ${{ matrix.os }}
timeout-minutes: 45
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest]
racket-version: ['8.12']

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0

- name: Install Racket
uses: Bogdanp/setup-racket@v1.11
uses: Bogdanp/setup-racket@2466913449df77df2bad149d1f2fc4e1ea4795dd # v1.15
with:
version: ${{ matrix.racket-version }}

- name: Install Glaze package
shell: bash
run: raco pkg install --auto --no-docs --link "$PWD"

- name: Install installer toolchain (Linux)
- name: Install packaging dependencies (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y libayatana-appindicator3-dev libgtk-3-dev
# AppImage tooling (optional; build falls back to tar.gz if missing)
sudo wget -q https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage -O /usr/local/bin/appimagetool
sudo chmod +x /usr/local/bin/appimagetool
# Do not download and execute AppImageKit's mutable `continuous`
# release in CI. With no AppImage tool installed, Glaze deliberately
# exercises its portable tar.gz installer fallback instead.

- name: Install installer toolchain (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
# WiX Toolset v4 (build falls back to zip if missing)
dotnet tool install --global wix
echo "$HOME/.dotnet/tools" >> $GITHUB_PATH
# Glaze supports WiX v4 syntax, but GitHub's latest global `wix`
# tool is now v7 and requires an additional OSMF license flow.
# NSIS is the other supported native Windows installer backend.
choco install nsis -y --no-progress
$nsis = "C:\Program Files (x86)\NSIS"
if (Test-Path $nsis) { $nsis | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append }

- name: Verify packaged entry executes
run: racket scripts/package-entry-smoke.rkt

- name: Scaffold and build a sample app
shell: bash
run: |
raco glaze init sampleapp
cd sampleapp
# --sign - exercises the signing pipeline everywhere: macOS signs
# the bundle ad-hoc (verifiable without a cert); Windows/Linux
# degrade with a loud warning when no signing toolchain exists.
raco glaze build --name sampleapp --version 0.0.1 --out dist --installer --sign -
# Exercise signing where CI can do it without secrets. On macOS,
# ad-hoc signing is verifiable; Windows signing correctly requires a
# real certificate and is covered by argument/tool failure behavior.
if [ "$RUNNER_OS" = "macOS" ]; then
raco glaze build --name sampleapp --version 0.0.1 --out dist --installer --sign -
else
raco glaze build --name sampleapp --version 0.0.1 --out dist --installer
fi
if [ "$RUNNER_OS" = "Linux" ]; then
test -s dist.tar.gz
fi
- name: Verify macOS bundle signature
if: runner.os == 'macOS'
run: |
codesign --verify --strict sampleapp/dist/sampleapp.app
/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" sampleapp/dist/sampleapp.app/Contents/Info.plist | grep -qx "0.0.1"

- name: Upload distribution
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: glaze-${{ runner.os }}-dist
path: |
Expand All @@ -143,3 +202,25 @@ jobs:
sampleapp/dist/*.msi
sampleapp/dist/*.dmg
sampleapp/dist/*.AppImage

package-racket-9-3-macos:
# Regression coverage for the macOS/Racket 9.3 launcher failure reported
# in issue #1. This job executes the final packaged binary, not merely the
# build command.
runs-on: macOS-latest
timeout-minutes: 30

steps:
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0

- name: Install Racket
uses: Bogdanp/setup-racket@2466913449df77df2bad149d1f2fc4e1ea4795dd # v1.15
with:
version: '9.3'

- name: Install Glaze package
shell: bash
run: raco pkg install --auto --no-docs --link "$PWD"

- name: Verify packaged entry executes
run: racket scripts/package-entry-smoke.rkt
11 changes: 11 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,17 @@ dist/

# Build output
build/
dist.zip
dist.tar.gz
*.msi
*.dmg
*.AppImage
*-setup.exe

# Local signing / license secrets
keys/private.pem
*.p12
*.pfx

# showcase runtime artifacts (generated at startup / by self-check)
examples/showcase/public/manifest.json
Expand Down
Loading
Loading