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:nodeslots 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, withtype,acceptsandmax; 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.EdgeandHakushi.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/1andnew_node: nodes dragged onto the canvas, or made with a double click; in a group, when dropped on one.- Groups (
groupon a:nodeslot, a node'sparent): 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:movechange. - Edges whose ends people drag to other handles: the
:reconnectchange, 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 inapp.jsand the style sheet inapp.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_changeonce 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: theon_mounthook 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, forPhoenix.LiveViewTest.Hakushi.Messages, in English, Portuguese, Spanish, French, German and Japanese.hakushi.cssand the Sumi theme,hakushi-sumi.css.