v0.5.0 (Apr 26, 2026)
Breaking
visit now takes a %Hologram.Session{} as its first arg. This allows for
setting cookie and session data.
Added
use Mirage.Page— extension module that imports Mirage and sets up an ExUnitsetupblock providing%{server: %Hologram.Server{}}in test context.use Mirage.Component— extension module that imports Mirage andsigil_HOLOfor component-level tests.- Init lifecycle drain —
visit/3now drainsnext_command,next_action(recursive), andnext_pageset duringinit/3, matching Hologram's runtime behaviour. fill_in_hidden/3— fill in a hidden input by itsnameattribute. Validates the input is actually hidden and not disabled or readonly. Triggers$changeon both the input and its enclosing form.
v0.0.7 (Apr 21, 2026)
Fixed
- Server state now persists across client-side navigation (link clicks and action redirects no longer reset the server).
- Shorthand event syntax now supports
target:option (e.g.$click={:my_action, target: "cid"}).
Changed
assert_hasandrefute_hasnow trim whitespace (including newlines) when comparing:textand:valueoptions.
v0.0.6 (Apr 21, 2026)
Changed
- Form-level
$changenow receives all named field values in the event data, matching Hologram's runtime behaviour. - Form
$submitnow includes all named field values in the event data (e.g. hidden inputs, filled text fields, checked radios). open_browser's:wrapis now used to control the minimal layout wrapped around components.:centeris now used to center the component in the viewport.
Added
filled_inputsbookkeeping — tracks values set viafill_inso form data collection works even for inputs without avaluebinding in the template.
v0.0.5 (Apr 20, 2026)
Added
:countoption forassert_has: assert exact number of matching elements (e.g.assert_has(session, "li", count: 3)).:labeloption forassert_hasandrefute_has: filter elements by their associated<label>text (e.g.assert_has(session, "input", label: "Email", value: "foo@bar.com")).click/click_buttonnow finds submit buttons outside a<form>that reference it via the HTMLformattribute.open_browsernow centres mounted components by default. Disable per-call withopen_browser(session, wrap: false)or globally withconfig :mirage, open_browser: [wrap: false].
Fixes
~HOLOsigil was not being exported fromMirage.
v0.0.4 (Apr 20, 2026)
Added
assert_page/3— optional keyword list of expected params to assert against after navigation.
Changed
mount/2redesigned around~HOLOtemplates. Props, cid, and slot content are declared in markup; context is the only argument tomount. Accepts a single{Namespace, key: value}tuple or a list of tuples for multiple namespaces.visit/2now takes a keyword list instead of a map.
v0.0.3 (Apr 18, 2026)
Added
:atoption forassert_hasandrefute_has— match by 1-based position among all elements matching the selector.- Option validation — all functions that accept options now raise
ArgumentErrorfor unknown keys (viaKeyword.validate!/2). open_browser/1wraps mounted components in a bare HTML layout with your app's stylesheets.
v0.0.2 (Apr 18, 2026)
Added
mount/4— mount a component in isolation for testing, without a page or layout. Accepts:propsand:contextoptions; context values populatefrom_contextprops.reload/1— revisit the current page with the current params, resetting all client-side state.within_section/4— accepts an optional CSS selector argument to scope to elements other than<section>(e.g.div[role=article]).- Target support — event attributes with
target: "cid"now dispatch actions and commands to stateful child components identified by theircid.
Changed
fill_in,choose,check,uncheck,select, andselect_textnow raise when the matched input is hidden (hiddenattribute ortype="hidden"), disabled, or readonly.
v0.0.1 (Apr 18, 2026)
Initial release.