Version lockstep
hibiki_rails ships in two halves: the Ruby gem, and the
hibiki-rails npm package,
which is the same JavaScript module the gem’s engine vendors. The two are
released together under matching version numbers — every gem release
publishes an npm release, even when the client did not change — so an app
that installs from npm follows one rule: pin both halves to the same
version. An importmap app gets this for free, because it serves the copy
vendored inside the gem.
hibiki_rails gem |
hibiki-rails npm |
notes |
|---|---|---|
| 0.14.0 | 0.14.0 | no client change (on the gem side, the scaffold’s infinite-scroll Load-more control is split: a visible-only sentinel wrapper and a fallback link inside it with a real ?page=N href, so the control works without JavaScript; see CRUD notes) |
| 0.13.0 | 0.13.0 | no client change (on the gem side, the scaffold’s query object moves to app/queries; add-ons find it in either place) |
| 0.12.0 | 0.12.0 | no client change (on the gem side, the island block helper: the ERB form of the island root, which folds the cid, hibiki_island, and the channel’s turbo_stream_from into one call; see The JS client) |
| 0.11.0 | 0.11.0 | the client takes its Action Cable consumer from @hotwired/turbo-rails (cable.getConsumer()) instead of importing @rails/actioncable: islands and turbo_stream_from share one websocket, bundler apps shed a second copy of the library, importmap apps need no @rails/actioncable pin. npm peer: @hotwired/turbo-rails >= 8.0 replaces @rails/actioncable |
| 0.10.0 | 0.10.0 | no client change (on the gem side, hibiki:rails:upload_field — attachments on both edit surfaces, --accept, --many galleries) |
| 0.9.1 | 0.9.1 | no client change (on the gem side, hibiki:rails:nested creates a missing child model from its field list) |
| 0.9.0 | 0.9.0 | perform on the island controller becomes public API, with a performOn export — drive an island from your own JavaScript. Also fixes perform claiming success (a truthy seq) for an action dropped during an offline gap |
| 0.8.0 | 0.8.0 | fallback: — a control’s native href/action as its degraded path (stand-aside off-ready, dead-socket fallthrough, CSRF freshening) — and history.replaceState for the channel’s transmit_url |
| 0.7.0 | 0.7.0 | a []-suffixed field name collects all its FormData entries as an array — a multi-select’s full selection reaches the channel |
| 0.6.0 | 0.6.0 | no client change (the AR-equality release on the gem side) |
| 0.5.0 | 0.5.0 | no client change: @rails/actioncable becomes a peer dependency (it was double-bundled), and the gem’s Rails floor moves to 8.0 |
| 0.4.0 | 0.4.0 | loading and connection state: data-hibiki-busy, aria-busy, data-hibiki-state, the reserved hbk payload key, and actions queued until the subscription confirms |
| 0.3.0 | 0.3.0 | input + debounce, the visible sentinel, event lists, confirm:/reset:, correct checkbox and multi-select payloads, subscribe params |
| 0.2.0 | 0.2.0 | reactive values (data-hibiki-value) |
| 0.1.0 | 0.1.0 | initial release |
Upgrading
The changelog carries the per-release detail. One historical note: 0.3.0 fixed a security issue affecting Rails 7.1 and 7.2 apps only — channel lifecycle methods were client-invocable there, because the ActionCable hook the gem used to hide them exists on 8.x alone. It matters for 0.4.0 and earlier; from 0.5.0 the gem requires Rails 8.0, so those Rails versions cannot run it at all.