All notable changes to Hakushi are documented in this file.

The format follows Keep a Changelog, and Hakushi follows Semantic Versioning.

0.1.0 - 2026-10-21

The first release.

Added

  • Hakushi.Components.canvas/1: a canvas for LiveView, with nodes drawn by :node slots of your HEEx, sent as LiveView streams; edges drawn in SVG (bezier, smooth, step, straight; arrows, dots, labels, animated); paper of dots, lines or crosses; pan and zoom by wheel, trackpad, touch and keys; a minimap and controls.
  • handle/1: where edges start and end, on any element of a node, with type, accepts and max; several handles with one id, of which an edge takes the nearest.
  • Selection by click and box, dragging with helper lines and snapping, resizing, copy and paste, duplicate, delete, labels, and undo and redo of each person's own changes, checked on the server.
  • Hakushi.Graph, Hakushi.Node, Hakushi.Edge and Hakushi.Change: the data of a canvas, and changes with their inverses.
  • Hakushi.Rules: loops, duplicates and cycles, the same in the browser and on the server.
  • on_change, the app's check of every change, where it saves it; a refused change taken back in the browser, with its reason.
  • canvas_item/1 and new_node: nodes dragged onto the canvas, or made with a double click; in a group, when dropped on one.
  • Groups (group on a :node slot, a node's parent): nodes that hold others, which move, copy and go with them; a drop on a group puts a node in it, a drag off takes it out, in one :move change.
  • Edges whose ends people drag to other handles: the :reconnect change, checked by the rules.
  • A tidy up (⇧L, the controls, Hakushi.Live.layout/2): a layered layout of the selection or of every node, left to right or top to bottom, as one change.
  • The canvas as an image: a PNG or an SVG of every node and edge (the controls, Hakushi.Live.export/2, exportImage() in JavaScript).
  • mix hakushi.install: the hook in app.js and the style sheet in app.css.
  • Shared canvases (live={{MyApp.Issho, topic}}) on Issho: each canvas of a topic is a session of one Issho room, whose document is the graph (Hakushi.Issho), with one process in the cluster that orders, checks and sends the changes; on_change once for each change; an Issho policy for who may open, read and change each canvas; people with their avatars, cursors, selections and drags.
  • Hakushi.Live: the on_mount hook of a shared canvas (Issho's), and the app's own changes (Hakushi.Live.change/2, Hakushi.Issho.change/3, Hakushi.Issho.graph/2).
  • The keyboard: Tab between nodes, Alt and an arrow to the nearest node, the arrows to move, C to connect, Enter into a node; a live region for screen readers.
  • Culling of the nodes and edges far from the screen.
  • Hakushi.Graph.Type, a canvas in one column of the database.
  • Hakushi.Test, for Phoenix.LiveViewTest.
  • Hakushi.Messages, in English, Portuguese, Spanish, French, German and Japanese.
  • hakushi.css and the Sumi theme, hakushi-sumi.css.