Repository navigation
Tags
Tags
feat(build): per-CPU macOS builds (--arch), docs + skill refresh — v0… ….42.0 - tinyjs build/publish/notarize --arch arm64|x86_64: an .app for that CPU from any Mac (the other CPU's txiki.js is fetched from the same release and cached). Artifacts are named -macos-<arch>; per-arch dmgs survive rebuilds, and two `publish --arch` runs merge into one manifest with a per-CPU "mac" block (arm64 also fills the top-level url for older apps). - update.js picks this Mac's build from the "mac" block (hw.optional.arm64, so an Intel build under Rosetta moves to arm64); no entry = no update. - Follow-ups to tarwin#6/tarwin#7: `file` reads archs, lipo only when merging/thinning and never pops the CLT dialog; tjs signed before the launcher; a fat checkout launcher stays fat; the arch report says how to reach Intel. - onLocale is wired into the generated entry; Windows capabilities() lists proxyURL/setAllSpaces as unsupported. - skill/references/release.md ships (the RELEASE.md ignore rule matched it case-insensitively); skill + docs refreshed against the code; macOS 15+ floor documented; launcher size corrected. - Site: OS icons on the platform tabs, one shared footer, Apple Silicon / Intel download buttons. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fail fast and loud when no display can show the webview; document the… … tjs-async/sqlite-sync footguns Tester feedback: a sandbox that couldn't open the WebKit window failed opaquely (misdiagnosed as an npm cache issue), and the missing-await + better-sqlite3-shaped assumptions around tjs:sqlite cost real debugging. - All three launchers now check for a usable display BEFORE connecting the backend socket/pipe and exit 3 with a two-line tinyjs:-prefixed explanation: Linux DISPLAY/WAYLAND_DISPLAY + gtk_init_check, macOS window-server session (CGSessionCopyCurrentDictionary), Windows visible window station. Early exit means bridge.js's existing race reports "launcher exited before connecting" instead of hanging. macOS verified (sandbox-exec denying WindowServer + clean smoke run); Linux/Windows checks logged in TODO-verify.md. - Docs (README, docs.html, skill): sqlite examples now await tjs.makeDir first; async-fs vs sync-sqlite in every gotcha list; no get(), run() returns void, RETURNING id / last_insert_rowid() idioms verified against the shipped runtime. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
fix(macos): frameless secondary windows lose their titlebar container
`windowControls` rides the wire as a token ('' keep · 'all' · 'none' · a
comma list) so the array form survives, but apply_chrome_fields derived
req_traffic_off by comparing it to "0" — never true. Every secondary
window opened frameless with windowControls:false kept a live
NSTitlebarContainerView: invisible, but its rounded top edge drew over
the page and it swallowed the top strip's mouse events. Main windows
derive the same bit from g_chrome_traffic and were unaffected.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
feat(macos): { role: 'app' } reaches the application menu — Settings……
… at last
The one slot in the bar setMenu could not touch, and the one macOS reserves
for Settings… (⌘,). Items in an `app` role block land between About and Quit
and behave like any other: ids, key equivalents, ticks, menu.update /
menu.get, clicks through tiny.menu.on. Windows and Linux have no application
menu, so the role stays unknown there and its items are dropped rather than
landing somewhere arbitrary — both launchers already ignore role slots and
their item lines safely (win flushes them into the skipped spec, linux's
build_top() returns null), so declare the item in a menu of your own there.
The id→item registry now empties at the top of the bar build instead of just
before the custom menus: the application menu is built first, and the old
order threw its registrations away — an item that clicked perfectly well (the
id rides on representedObject) but that menu.get and MENUUPD could not see.
Docs: README, the site changelog, the skill's api reference, and tiny.d.ts's
role union. Tested on macOS; the other two are unchanged by inspection.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
docs: teach the skill, the types and the site about site wrappers skill/ and template/ ship INSIDE the release tarballs, so this had to land before the tag or 0.38.0 would have shipped documentation that predates its own headline feature — and, worse, one piece that is now actively wrong. - skill/references/recipes.md's "Wrapping a hosted web app" told agents to wrap with `frontend.devUrl` and said nothing about gating the origin. devUrl is DEV-ONLY by construction, so a packaged app built that way has no page at all, and an agent following the recipe would hand a third-party site a backend with full filesystem access. Rewritten around "url" + "api", with the hooks, downloads/popups, and a pointer to the per-engine caveats. - skill/SKILL.md's tinyjs.json schema gains url/inject/downloads/popups/api (the schema block is what an agent reads before writing a manifest). - skill/references/api.md gains the wrapper surface: tiny.win.find, the navigate/download/popup page events, the onNavigate/onDownload/ onWindowOpen backend hooks with what a 'policy' call may return, and meta.origin. - skill/references/platforms.md gains the structural per-engine caveats under the existing Windows/Linux notes. - template/types/tiny.d.ts: capabilities() was typed Record<string, boolean | string> but now returns an `api` OBJECT — my own change broke the type. Also drops three "macOS today" notes that Windows and Linux have since made false. - docs/docs.html: the wrapper keys in both tinyjs.json samples, plus a "wrapping a hosted site" section (gate first, then find/capabilities and the backend hooks) and its TOC entry. docs/index.html gets a feature tile. All three pages re-parsed clean.
PreviousNext