Skip to content

Latest commit

 

History

History
71 lines (56 loc) · 6.47 KB

File metadata and controls

71 lines (56 loc) · 6.47 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

Added

  • Plugin system (Phase 6): Dynamic loading of .so/.dylib/.dll extensions at runtime
    • src/interface/ffi/src/plugin.zig: GossamerVtable (9-function restricted API), dlopen/dlsym/dlclose lifecycle, 64-slot plugin registry
    • gossamer_plugin_load(handle, path) → plugin_id, gossamer_plugin_unload(plugin_id), gossamer_plugin_list() → JSON
    • Each plugin exports gossamer_plugin_init(handle, channel, vtable) and receives a restricted vtable (no GTK/WebKit internals — only eval/emit/channel_bind/cap_grant family)
    • BindingEntry.plugin_id field + liveness check in webview_gtk.zig IPC dispatch path prevents use-after-free when handlers are called after plugin unload
    • prim__pluginLoad/prim__pluginUnload/prim__pluginList added to Foreign.idr with safe wrappers
    • Linux/BSD builds now link libdl for dlopen support
    • 9 new integration tests covering null handle, empty path, nonexistent library, double-unload, idempotent unload, and empty-list JSON
    • Sandboxing model: API restriction via vtable + RTLD_LOCAL (Phase 6a). Subprocess isolation (Phase 6b) deferred — plugins currently share process privileges, appropriate for developer tooling

[0.3.1] — 2026-04-03

Added

  • Integration test suite expanded: 39 → 173 tests (+134 new), covering guard mode, window registry, window groups lifecycle, z-order management, broadcast/send_to, arrange strategies, transmute, activity tracking, debug drawer, typed Groove, async IPC, platform queries, CSP module, filesystem (cap-gating + round-trip), SSG (md_to_html, template substitution, front matter/body extraction), Groove module, and cross-cutting invariants
  • Package distribution recipes: Debian .deb (dpkg-buildpackage + dh), RPM .spec (rpmbuild), Flatpak JSON manifest, macOS universal binary + DMG (lipo + hdiutil), Windows WiX 4 installer with PATH registration
  • Justfile packaging recipes: package-deb, package-rpm, package-flatpak, package-macos, package-windows, package-all

Fixed

  • iOS screen dimensions: webview_ios.zig now queries UIScreen.mainScreen.bounds via objc_msgSend cast to *const fn → CGRect; hardcoded 390×844 replaced with real device dimensions stored in WebviewState.screen_width/height
  • Android JNI constructor: registerIPCHandler was calling jni_CallObjectMethod (instance method) on a class reference with <init> — fundamentally wrong. Replaced with jni_NewObject(env, bridge_cls, bridge_init, native_ptr) with correct jni_NewObject extern declaration. nativeInit now accepts and caches screen_width/screen_height params
  • .zig-cache/ gitignore too narrow: Changed .zig-cache/ (root-only) and zig-out/ to **/.zig-cache/ and **/zig-out/ to catch nested build artifact directories (cli/.zig-cache/, src/interface/ffi/.zig-cache/, etc.)

[0.3.0] — 2026-03-29

Added

  • Cross-platform support: v0.3.0 is the cross-platform desktop release
  • Windows WebView2 COM callbacks: Full async COM callback chain for WebView2 initialisation — EnvCompletedHandler creates environment, ControllerCompletedHandler extracts ICoreWebView2 and sets bounds, synchronised via Windows event object with 10s timeout
  • Windows IPC handler: WebMessageHandler COM object implements ICoreWebView2WebMessageReceivedEventHandler — receives chrome.webview.postMessage(), dispatches to bindings map, sends responses via ExecuteScript
  • Platform detection query API: 6 new exported functions (gossamer_platform, gossamer_arch, gossamer_webview_engine, gossamer_is_desktop, gossamer_platform_json) — compile-time evaluated, zero-cost, queryable from JS/Ephapax/Idris2
  • Idris2 ABI declarations: platform, arch, webviewEngine, isDesktop, platformJson in Foreign.idr with safe wrappers
  • Cross-compilation Justfile recipes: build-macos-x64, build-macos-arm, build-windows, build-linux-arm, build-linux-riscv, build-freebsd, build-all-platforms, platforms (show supported targets)
  • 7 new unit tests for platform detection API
  • SSG docs site: 3 new pages (getting-started, ephapax-primer, platform-support)
  • Updated nav template with 5 navigation links
  • AWK SSG pipeline verified — all pages build from site/src/content/

Changed

  • Version bumped from 0.1.0 to 0.3.0 (main.zig + build.zig)
  • Windows registerIPCHandler now creates a real COM event handler instead of passing null
  • IPC JS bridge already supports all three transport paths: webkit.messageHandlers (GTK/Cocoa), chrome.webview (Win32), GossamerBridge (Android)

Fixed

  • Windows WebView2 was previously stub-only (window created but no webview attached) — now performs full async initialisation via COM callbacks

[0.2.0] — 2026-03-23

Added

  • Async IPC: gossamer_channel_bind_async() spawns callback on worker thread with g_idle_add posting response back to GTK main thread; 256-slot inflight tracker with std.Thread.Mutex; Rust binding app.command_async(); ReScript already Promise-based
  • CSP enforcement: gossamer_set_csp(handle, csp_string) export; CLI auto-applies CSP from gossamer.conf.json security.csp; Rust app.set_csp(); ReScript Gossamer.Security.setCsp()
  • Streaming IPC (backend-to-frontend push): gossamer_emit(handle, event_name, payload) export; thread-safe via g_idle_add; JS window.__gossamer_on(name, callback) returns unsubscribe; Rust app.emit(name, payload); ReScript Gossamer.Event.on(name, callback)
  • Hot reload: gossamer dev now watches build.watch.paths (or frontendDist fallback) for file changes and auto-reloads the webview via g_idle_add + gossamer_eval("location.reload(true)"); configurable extensions, debounce, and poll interval; separate file_watcher.zig module with polling thread
  • 13 new unit tests (7 async IPC, 6 streaming IPC)

Fixed

  • Thread-local error strings: added clearError() at top of all 16+ exported functions to prevent stale error leakage
  • Capability registry: improved overflow error message to specify "256 slots" limit
  • Revocation set: verified FIFO eviction already correctly implemented
  • Dialog allocator: verified c_allocator consistency across all paths