Changes for version 0.31 - 2026-11-06
- xs/tray.xs: a stale stack after eval_pv in the dispatch callback, and a stray PUSHMARK
- xs/form.xs: six hash slots held the immortal undef, attach pushed a reference to the code reference
- xs/canvas.xs: flush returned nothing, a dSP in the PPCODE body shadowed the frame stack
- include/chandra/chandra_socket_hub.h: the path was freed before the croak that printed it, and a TLS listener left non-blocking could never complete a handshake
- include/webview-tray-cocoa.c: a second tray in one process reuses the delegate class
- Chandra::Table: the "All" filter option kept its value
- Chandra::Pack: save no longer warns as an unknown key, commands with spaces in their paths are quoted
- POD for every method of Component, Theme, Notify, Tabs, Nav, Breadcrumb, Table, Form::Validator and Pack
- test doors in xs/core.xs, tests t/81 to t/99, live tests under CHANDRA_LIVE_TESTS, MANIFEST.SKIP
- include/chandra/chandra_window.h: a child window made before the main window initialises GTK itself, instead of aborting the process
- the privileged-port and unwritable-directory tests skip under root, the dragdrop test tolerates a coverage runner holding its object
- t/99_pack_darwin.t: the macOS steps of Chandra::Pack on any host, with the Apple tools faked, and the other systems' arms on a Mac
- t/24_protocol_edge.t defines its mock methods once, perl 5.40 warned of a redefinition on every call
- .xs_cover: the bundled webview sources are left out of a coverage run by default (Devel::XSCover 0.08), README says how the 100% is run
- uncoverable marks: the dist is at 100% under Devel::XSCover on clang and on gcc 14 (docker/Dockerfile.xscover-gcc14-gtk, Xvfb for the live tests)
Modules
Perl bindings to webview-c for creating cross-platform GUIs
High-level application wrapper for Chandra
Asset bundling and resource loading for Chandra apps
JavaScript to Perl function binding
Breadcrumb navigation component
JavaScript bridge code for Perl communication
Register JavaScript extensions for the Chandra bridge
2D graphics for Chandra applications
System clipboard access for Chandra applications
Reactive UI components for Chandra
Context menus for Chandra applications
In-browser developer tools for Chandra applications
Native dialog boxes for Chandra applications
Drag and drop support for Chandra applications
DOM-like element construction for Chandra
Error handling with stack traces for Chandra
Event object for element handlers
Form helpers with two-way binding for Chandra applications
Form validation for Chandra::Form
File watching and hot reload for Chandra applications
Structured logging framework for Chandra applications
Custom modal dialogs
Navigation component (sidebar/topbar)
Native OS desktop notifications
Bundle Chandra apps into distributable packages
Custom URL protocol handlers for Chandra applications
Keyboard shortcuts and global hotkeys for Chandra applications
IPC client for connecting to a Chandra Hub
Wire protocol and connection wrapper for Chandra IPC
IPC server for coordinating Chandra instances
Token management with rotation and expiry
Splash screen / loading state for Chandra applications
Persistent key-value storage for Chandra apps
Sortable, filterable, paginated data grid component
Tab component
CSS theme system for Chandra apps
In-app toast notifications
System tray icon with context menu
Multi-window management for Chandra applications
Examples
- examples/assets_example.pl
- examples/assets_mount_example.pl
- examples/bind_example.pl
- examples/bridge_extension_example.pl
- examples/canvas_demo.pl
- examples/chat_hub.pl
- examples/chat_window.pl
- examples/clipboard_example.pl
- examples/contextmenu_example.pl
- examples/counter.pl
- examples/counter_app.pl
- examples/devtools_example.pl
- examples/dialog_example.pl
- examples/dragdrop_example.pl
- examples/element_example.pl
- examples/form_example.pl
- examples/hot_reload_content.html
- examples/hot_reload_example.pl
- examples/log_example.pl
- examples/modal.pl
- examples/multiwindow_example.pl
- examples/nav.pl
- examples/pack_example/app.pl
- examples/pack_example/assets/README
- examples/pack_example/lib/PackedCounter.pm
- examples/pack_example/pack.pl
- examples/routing_example.pl
- examples/shortcut_example.pl
- examples/socket_ipc_example.pl
- examples/splash_example.pl
- examples/splash_simple.pl
- examples/store_example.pl
- examples/table.pl
- examples/tray_example.pl