Skip to content

Releases

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 23 Oct 13:15

Full Changelog: v0.5.0...v0.5.1

paintboard 0.5.0

Choose a tag to compare

@0xPD33 0xPD33 released this 22 Oct 22:38

Agents

  • add_graph lays out nodes, edges, and groups and draws them as one undo step. rank pins a node's position along the flow, a group becomes a dashed container, and an edge that closes a cycle routes around the graph.
  • Items keep an id in the board file. update_items and delete_items take ids without a revision. replace_items swaps the whole board.
  • Items take caption, parent, wrap, dashed, elbow, and waypoint points on lines and arrows. A new table item sizes its rows to its text.
  • While Collaborate is off, an agent call asks in the window: Allow once, Allow for this session, or Deny.
  • paintboard-bridge --file board.pb runs tool calls on a board file with no window. --call repeats, and --args @FILE reads arguments from a file.

Drawing

  • A label belongs to its shape, line, or arrow and moves with it. Double-click a shape or an arrow to type one.
  • Linked ends stop at the real outline of a diamond, an ellipse, a triangle, or a star.
  • Panel Dash and Elbow draw dashed strokes and right-angle arrows.
  • A container moves what it holds. Ctrl+G puts the selection in a dashed container.
  • The panel greys out controls that do nothing for the current tool and the selection.

Files

  • A tab reloads its board when another program saves the file, and Undo brings back the version before. A tab with unsaved changes asks first.
  • Save does not replace a file that changed since the tab read it without asking. save_board needs overwrite: true, and an MCP session that ends refuses too.

Compatibility

  • Boards now save as PB05. Boards saved by 0.5.0 do not open in 0.4.0 or older. PB02, PB03, and PB04 boards still load.
  • A shape's label is now a field of the shape, not a separate text item, so add_items returns different indices.
  • An id must be unique on the board. Edits that use a board index need the revision.

paintboard 0.4.0

Choose a tag to compare

@0xPD33 0xPD33 released this 22 Oct 18:57

Tabs and files

  • Open several boards in tabs. Ctrl+N makes a new board, Ctrl+W closes a tab, and Ctrl+Tab, Ctrl+PgUp/PgDn, and Ctrl+1 to Ctrl+9 switch tabs.
  • New, Open (Ctrl+O), Save, and Save As (Ctrl+Shift+S) use a built-in file dialog.
  • A dot on a tab marks unsaved changes. Closing a tab or the window asks to save, discard, or cancel.
  • With no file arguments, Paintboard reopens the tabs of the last session. paintboard a.pb b.pb opens each board in its own tab.
  • Copy and paste work between tabs.

Drawing

  • Lines and arrows that start or end on an item stay linked to it when it moves or resizes. Drag an end handle onto an item to link it.

Export

  • Ctrl+Shift+E exports the whole board to SVG.
  • paintboard --render FILE [OUT.png|OUT.svg] draws a board with no window.

Agents

  • New MCP tools: list_tabs, switch_tab, new_board, open_board, close_tab, export_svg, and measure_text. save_board takes a path for Save As.
  • add_items takes an id, a label centered on a shape, and arrows with from/to that link to items.
  • Headless get_canvas and export_png render every item through EGL, with no display server.
  • A guide for agents ships as the paintboard://guide resource and the paintboard_guide prompt.

Compatibility

  • Boards now save as PB04. Boards saved by 0.4.0 do not open in 0.3.0 or older. PB02 and PB03 boards still load.
  • The build now needs the egl pkg-config module, which Mesa or libglvnd provides.

paintboard 0.3.0

Choose a tag to compare

@0xPD33 0xPD33 released this 03 Oct 20:02

Tools

  • Eraser (E): drag over items to remove them. An empty shape erases only at its outline, so you can clear the inside of a frame and keep the frame. One drag is one undo step.
  • Reset button and Ctrl+Shift+Del: clear the board and reset the view. Undo brings the items back.
  • New shapes: diamond (D), triangle (I), and star (S), with fills.
  • Marker (H): a translucent highlighter. Overlaps inside one stroke do not get darker.
  • The panel shows the twelve tools in two columns.

Text and pen

  • Each tool keeps its own width, so text size is separate from stroke width.
  • S, M, L, and XL size presets with a preview. The panel labels the control as text size, stroke width, or marker width.
  • The arrow keys, Home, and End move the text caret. Del deletes forward and Ctrl+V pastes.
  • Double-click text with Select to edit it.
  • A panel click while you type selects the text, so a color or size click applies to it.
  • Pen and marker strokes are smoothed when they end.

Agents

  • MCP accepts diamond, triangle, star, and highlight items.

Compatibility

  • Boards that use the new item types do not open in 0.2.0 or older. Older boards still load.

paintboard 0.2.0

Choose a tag to compare

@0xPD33 0xPD33 released this 11 Sep 16:31

Agents

  • MCP stdio server (paintboard --mcp, --headless) with get/add/update/delete, undo/redo, view, save, and PNG tools.
  • paintboard-bridge attaches chat clients to an open window over a private Unix socket: codex mcp add paintboard -- paintboard-bridge --mcp.
  • Collaborate toggle: pause while drawing and Codex, Claude Code, OpenCode, or a custom command/ACP agent replies on the canvas. Each reply is one undo step.

UI

  • Panel scales with monitor DPI (X11 DPI, Wayland/macOS scale, or physical size for 4K at scale 1). PAINTBOARD_UI_SCALE overrides.
  • Panel scrolls with the wheel when the window is short.
  • Hint bar, hand cursor over buttons, Ctrl+= / Ctrl+- zoom, window opens at 85% of the work area, 400x300 minimum.

Files

  • Saves go through a temporary file and rename; a failed save leaves the old file intact.
  • PB02 boards still load and are written back as PB03.
  • Export never overwrites a board named *.png.

Build

  • Needs cJSON and Python 3 in addition to GLFW 3.4 and OpenGL. make test runs the C self-test and three Python suites.

paintboard 0.1.0

Choose a tag to compare

@0xPD33 0xPD33 released this 28 Aug 15:33

First release. Paintboard is a local, offline drawing board in one C file. It draws through GLFW and OpenGL, stores a board in a single binary file, and never touches the network.

What it does

  • Pen, line, arrow, rectangle, ellipse, and text.
  • Select one item, shift click to add more, or drag a box around a group.
  • Move a selection, and resize it with corner handles.
  • Copy, cut, paste, duplicate, undo, and redo.
  • Eight stroke colors and eight fill colors.
  • Dot grid with optional snapping, plus pan and zoom on an infinite canvas.
  • Export the visible canvas to PNG.
  • Inter and Excalifont are compiled into the binary, so there is no font setup.

Install

nix run github:0xPD33/paintboard
nix profile install github:0xPD33/paintboard

From source you need GLFW 3.4 or newer, an OpenGL library, pkg-config, and a compiler with C23 #embed. GCC 15 or Clang 19 are new enough.

make
sudo make install

make install also writes the desktop entry and the icons.

See the README for the full key list and ARCHITECTURE.md for the design notes.