<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>toonstrip changelog</title>
  <id>https://toonstrip.danielkimdev.com/changelog/</id>
  <link href="https://toonstrip.danielkimdev.com/changelog/"/>
  <link rel="self" href="https://toonstrip.danielkimdev.com/changelog.xml"/>
  <updated>2026-09-02T00:00:00Z</updated>
  <author><name>Daniel Kim</name></author>
  <entry>
    <title>toonstrip 0.8.9</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#089--2026-09-02</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#089--2026-09-02"/>
    <updated>2026-09-02T00:00:00Z</updated>
    <summary>`@toonstrip/core` 0.1.7, `@toonstrip/element` 0.1.8, `@toonstrip/astro` 0.1.11,</summary>
    <content type="text">**Packages:** `@toonstrip/core` 0.1.7, `@toonstrip/element` 0.1.8, `@toonstrip/astro` 0.1.11,
`@toonstrip/cli` 0.2.1 (all published)

### Fixed

- Korean balloon text rendered in a brush script on Windows (Gungseo) and in arbitrary
  fallbacks elsewhere. The comic font stack now names Noto Sans KR, then the platform
  Korean sans faces, ahead of the generic; Latin text is unchanged.
- The element now waits for `document.fonts` before first paint and repaints when a
  face finishes loading late, so a page-declared webfont reaches the canvas.

### Added

- `toonstrip render --font &lt;file&gt;` registers a font file (for example Noto Sans KR)
  before drawing. `COMIC_FONT_FAMILY` and `TITLE_FONT` exported from `@toonstrip/core`.
- The site declares Noto Sans KR (Korean subset, fetched only when drawn) and the
  kitchen sink has a Korean strip check.</content>
  </entry>
  <entry>
    <title>toonstrip 0.8.8</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#088--2026-09-02</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#088--2026-09-02"/>
    <updated>2026-09-02T00:00:00Z</updated>
    <summary>`@toonstrip/cli` 0.2.0 (published)</summary>
    <content type="text">**Packages:** `@toonstrip/cli` 0.2.0 (published)

### Added

- The site is live at [toonstrip.danielkimdev.com](https://toonstrip.danielkimdev.com):
  intro, docs, playground, and this changelog. Every `@toonstrip/*` README links to it.</content>
  </entry>
  <entry>
    <title>toonstrip 0.8.7</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#087--2026-09-02</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#087--2026-09-02"/>
    <updated>2026-09-02T00:00:00Z</updated>
    <summary>`@toonstrip/cli` 0.2.0 (published 2026-09-02 with 0.8.8)</summary>
    <content type="text">**Packages:** `@toonstrip/cli` 0.2.0 (published 2026-09-02 with 0.8.8)

### Added

- `toonstrip render &lt;doc.json&gt; --out strip.png`: render a Comic Strip Document to one PNG
  in Node, with the element's column policy and figure selection. `--width`, `--scale`,
  `--pack &lt;dir&gt;` (repeatable), `--transparent`, `--background`. Also exported as
  `renderDocument()`.

### Changed

- `@toonstrip/cli` now depends on `@toonstrip/core`, `@toonstrip/schema`, and
  `@napi-rs/canvas`.</content>
  </entry>
  <entry>
    <title>toonstrip 0.8.6</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#086--2026-09-02</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#086--2026-09-02"/>
    <updated>2026-09-02T00:00:00Z</updated>
    <summary>no npm release (site only)</summary>
    <content type="text">**Packages:** no npm release (site only)

### Added

- Per-route JavaScript budgets enforced in CI, an Open Graph image rendered from the hero
  strip, and the site's end-to-end tests running in CI.</content>
  </entry>
  <entry>
    <title>toonstrip 0.8.5</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#085--2026-09-02</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#085--2026-09-02"/>
    <updated>2026-09-02T00:00:00Z</updated>
    <summary>no npm release (site only)</summary>
    <content type="text">**Packages:** no npm release (site only)

### Added

- Public changelog at `/changelog` with an Atom feed, generated from this file.</content>
  </entry>
  <entry>
    <title>toonstrip 0.8.4</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#084--2026-09-02</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#084--2026-09-02"/>
    <updated>2026-09-02T00:00:00Z</updated>
    <summary>no npm release (site only)</summary>
    <content type="text">**Packages:** no npm release (site only)

### Added

- The playground: edit a strip as a form, as JSON, or by watching the result. Emotion
  wheel, camera presets, character and backdrop pickers, undo/redo, presets, share by
  URL, PNG export, and copy-out Astro and HTML snippets.</content>
  </entry>
  <entry>
    <title>toonstrip 0.8.3</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#083--2026-09-02</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#083--2026-09-02"/>
    <updated>2026-09-02T00:00:00Z</updated>
    <summary>no npm release (site only)</summary>
    <content type="text">**Packages:** no npm release (site only)

### Added

- Documentation site: twelve pages from install to schema reference, every example shown
  as code beside the strip it renders, plus `/llms.txt` for agents.</content>
  </entry>
  <entry>
    <title>toonstrip 0.8.2</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#082--2026-09-02</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#082--2026-09-02"/>
    <updated>2026-09-02T00:00:00Z</updated>
    <summary>no npm release (site only)</summary>
    <content type="text">**Packages:** no npm release (site only)

### Added

- The introduction page for toonstrip.danielkimdev.com: live hero strip with a width
  control, 30-second install, six use-case strips, the character roster.</content>
  </entry>
  <entry>
    <title>toonstrip 0.8.1</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#081--2026-09-02</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#081--2026-09-02"/>
    <updated>2026-09-02T00:00:00Z</updated>
    <summary>no npm release (site only)</summary>
    <content type="text">**Packages:** no npm release (site only)

### Added

- Site component library and the `CodeAndStrip` block used throughout the docs.</content>
  </entry>
  <entry>
    <title>toonstrip 0.8.0</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#080--2026-09-02</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#080--2026-09-02"/>
    <updated>2026-09-02T00:00:00Z</updated>
    <summary>no npm release (site only)</summary>
    <content type="text">**Packages:** no npm release (site only)

### Added

- `site/`: the source of toonstrip.danielkimdev.com, an Astro site that dogfoods
  `@toonstrip/astro`. Deployed by Cloudflare Pages from this repository.

### Fixed

- CI now builds the workspace before running tests. Every run since 0.4.0 had failed on
  a clean runner because the packages resolve each other through built `dist/` entry
  points.</content>
  </entry>
  <entry>
    <title>toonstrip 0.7.11</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#0711--2026-09-02</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#0711--2026-09-02"/>
    <updated>2026-09-02T00:00:00Z</updated>
    <summary>`@toonstrip/core` 0.1.6, `@toonstrip/element` 0.1.7, `@toonstrip/astro` 0.1.10</summary>
    <content type="text">**Packages:** `@toonstrip/core` 0.1.6, `@toonstrip/element` 0.1.7, `@toonstrip/astro` 0.1.10

### Fixed

- Balloon text, padding, margins, and tail geometry now scale with the panel's actual
  size instead of being fixed pixel values computed for a 400 px panel. Narrow embeds
  (blog columns, phones) no longer read as cramped, and two-speaker panels fit their
  balloons side by side from 400 px down to 260 px.</content>
  </entry>
  <entry>
    <title>toonstrip 0.7.10</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#0710--2026-09-02</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#0710--2026-09-02"/>
    <updated>2026-09-02T00:00:00Z</updated>
    <summary>shipped with 0.7.11</summary>
    <content type="text">**Packages:** shipped with 0.7.11

### Fixed

- Two-speaker panels far too often fell back to vertically stacked balloons. The layout
  now reserves a horizontal corridor per speaker before sizing any balloon, so the first
  balloon can no longer take the room the second one needs.</content>
  </entry>
  <entry>
    <title>toonstrip 0.7.9</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#079--2026-09-02</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#079--2026-09-02"/>
    <updated>2026-09-02T00:00:00Z</updated>
    <summary>shipped with 0.7.11</summary>
    <content type="text">**Packages:** shipped with 0.7.11

### Fixed

- A stacked speech balloon could sit over the *other* character's head. Fallback layout
  now keeps a balloon within its own speaker's side of the panel.</content>
  </entry>
  <entry>
    <title>toonstrip 0.7.8</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#078--2026-09-01</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#078--2026-09-01"/>
    <updated>2026-09-01T00:00:00Z</updated>
    <summary>`@toonstrip/core` 0.1.5, `@toonstrip/element` 0.1.6, `@toonstrip/astro` 0.1.9</summary>
    <content type="text">**Packages:** `@toonstrip/core` 0.1.5, `@toonstrip/element` 0.1.6, `@toonstrip/astro` 0.1.9

### Fixed

- Stacked balloons in multi-balloon panels were capped at two-thirds of the panel width
  for no layout reason; they now use the full width, so text wraps to fewer lines at
  real embed sizes.</content>
  </entry>
  <entry>
    <title>toonstrip 0.7.7</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#077--2026-09-01</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#077--2026-09-01"/>
    <updated>2026-09-01T00:00:00Z</updated>
    <summary>`@toonstrip/core` 0.1.4, `@toonstrip/element` 0.1.5, `@toonstrip/astro` 0.1.8</summary>
    <content type="text">**Packages:** `@toonstrip/core` 0.1.4, `@toonstrip/element` 0.1.5, `@toonstrip/astro` 0.1.8

### Fixed

- Panel seeding used a plain space to join speaker and text, which could make two
  different panels lay out identically. Restored the collision-proof delimiter.</content>
  </entry>
  <entry>
    <title>toonstrip 0.7.6</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#076--2026-09-01</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#076--2026-09-01"/>
    <updated>2026-09-01T00:00:00Z</updated>
    <summary>`@toonstrip/core` 0.1.3, `@toonstrip/element` 0.1.4, `@toonstrip/astro` 0.1.7</summary>
    <content type="text">**Packages:** `@toonstrip/core` 0.1.3, `@toonstrip/element` 0.1.4, `@toonstrip/astro` 0.1.7

### Fixed

- A speaker's first balloon was often needlessly narrow, wrapping to extra lines and
  pushing its neighbour's balloon into a head. Balloons now prefer the available width.</content>
  </entry>
  <entry>
    <title>toonstrip 0.7.5</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#075--2026-09-01</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#075--2026-09-01"/>
    <updated>2026-09-01T00:00:00Z</updated>
    <summary>`@toonstrip/element` 0.1.3, `@toonstrip/astro` 0.1.6</summary>
    <content type="text">**Packages:** `@toonstrip/element` 0.1.3, `@toonstrip/astro` 0.1.6

### Fixed

- `@toonstrip/element` and `@toonstrip/astro` were still pinned to the schema version
  from before 0.7.4's fix. Installing `@toonstrip/astro` alone now gets the CSP-safe
  validator.</content>
  </entry>
  <entry>
    <title>toonstrip 0.7.4</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#074--2026-09-01</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#074--2026-09-01"/>
    <updated>2026-09-01T00:00:00Z</updated>
    <summary>`@toonstrip/schema` 0.1.3, `@toonstrip/astro` 0.1.5</summary>
    <content type="text">**Packages:** `@toonstrip/schema` 0.1.3, `@toonstrip/astro` 0.1.5

### Fixed

- Strips were blank on sites with a strict Content Security Policy because the
  validator compiled the JSON Schema at runtime with `new Function`. The validator is
  now precompiled at build time; no `unsafe-eval` needed.

### Changed

- `@toonstrip/astro` no longer injects `ajv` into Vite's `optimizeDeps`.</content>
  </entry>
  <entry>
    <title>toonstrip 0.7.3</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#073--2026-09-01</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#073--2026-09-01"/>
    <updated>2026-09-01T00:00:00Z</updated>
    <summary>`@toonstrip/schema` 0.1.2, `@toonstrip/astro` 0.1.4</summary>
    <content type="text">**Packages:** `@toonstrip/schema` 0.1.2, `@toonstrip/astro` 0.1.4

### Fixed

- Published the 0.7.2 fixes.</content>
  </entry>
  <entry>
    <title>toonstrip 0.7.2</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#072--2026-09-01</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#072--2026-09-01"/>
    <updated>2026-09-01T00:00:00Z</updated>
    <summary>shipped in 0.7.3</summary>
    <content type="text">**Packages:** shipped in 0.7.3

### Fixed

- `&lt;ComicStrip client:visible /&gt;` never hydrated: the server-rendered placeholder had
  zero height, so the browser never reported it as visible. The placeholder now
  reserves space.
- The bundled validator failed to import `ajv` under Vite.</content>
  </entry>
  <entry>
    <title>toonstrip 0.7.1</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#071--2026-09-01</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#071--2026-09-01"/>
    <updated>2026-09-01T00:00:00Z</updated>
    <summary>all seven `@toonstrip/*` packages at 0.1.0</summary>
    <content type="text">**Packages:** all seven `@toonstrip/*` packages at 0.1.0

### Added

- First npm release: `@toonstrip/schema`, `@toonstrip/core`, `@toonstrip/element`,
  `@toonstrip/astro`, `@toonstrip/pack-comic-chat`, `@toonstrip/pack-example`,
  `@toonstrip/cli`.</content>
  </entry>
  <entry>
    <title>toonstrip 0.7.0</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#070--2026-09-01</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#070--2026-09-01"/>
    <updated>2026-09-01T00:00:00Z</updated>
    <summary>unreleased</summary>
    <content type="text">**Packages:** unreleased

### Added

- Documentation: the document format, the asset pack contract with a worked walkthrough
  for adding a character, and embedding in Astro. Root README and contributing guide.
- `@toonstrip/pack-example`: a second, wholly original one-character pack proving the
  pack contract is not tied to the default art.</content>
  </entry>
  <entry>
    <title>toonstrip 0.6.0</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#060--2026-09-01</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#060--2026-09-01"/>
    <updated>2026-09-01T00:00:00Z</updated>
    <summary>unreleased</summary>
    <content type="text">**Packages:** unreleased

### Added

- `@toonstrip/astro`: the `toonstrip()` integration (copies packs into `public/`) and
  the `&lt;ComicStrip&gt;` component, with `client:visible` deferring all JavaScript and
  fetches until the strip scrolls into view.
- `examples/astro-blog`: a minimal Astro site embedding a strip in a post.</content>
  </entry>
  <entry>
    <title>toonstrip 0.5.0</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#050--2026-09-01</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#050--2026-09-01"/>
    <updated>2026-09-01T00:00:00Z</updated>
    <summary>unreleased</summary>
    <content type="text">**Packages:** unreleased

### Added

- `@toonstrip/element`: the `&lt;comic-strip&gt;` custom element. One canvas per panel,
  responsive column layout, device-pixel-ratio-aware, off-screen panels released,
  Shadow DOM isolation, and a generated `aria-label` per panel.</content>
  </entry>
  <entry>
    <title>toonstrip 0.4.0</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#040--2026-09-01</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#040--2026-09-01"/>
    <updated>2026-09-01T00:00:00Z</updated>
    <summary>unreleased</summary>
    <content type="text">**Packages:** unreleased

### Added

- `@toonstrip/pack-comic-chat`: the default asset pack. Fifteen characters and three
  backdrops from the original Microsoft Comic Chat, redistributed under MIT with
  attribution.
- `@toonstrip/cli`: `toonstrip pack validate &lt;dir&gt;`.</content>
  </entry>
  <entry>
    <title>toonstrip 0.3.0</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#030--2026-09-01</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#030--2026-09-01"/>
    <updated>2026-09-01T00:00:00Z</updated>
    <summary>unreleased</summary>
    <content type="text">**Packages:** unreleased

### Added

- `@toonstrip/core`: the rendering engine. Figures composited from face and torso
  sprites, emotion-wheel nearest-neighbour pose selection, six camera presets, speech,
  thought, and caption balloons with placement, and the responsive column policy.
  Framework-agnostic; runs in the browser and in Node.</content>
  </entry>
  <entry>
    <title>toonstrip 0.2.0</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#020--2026-09-01</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#020--2026-09-01"/>
    <updated>2026-09-01T00:00:00Z</updated>
    <summary>unreleased</summary>
    <content type="text">**Packages:** unreleased

### Added

- `@toonstrip/schema`: the `ComicStripDocument` v1 types, JSON Schema, and validator.
- pnpm workspace, MIT licence, CI.</content>
  </entry>
  <entry>
    <title>toonstrip 0.1.0</title>
    <id>https://toonstrip.danielkimdev.com/changelog/#010--2026-09-01</id>
    <link href="https://toonstrip.danielkimdev.com/changelog/#010--2026-09-01"/>
    <updated>2026-09-01T00:00:00Z</updated>
    <summary>unreleased</summary>
    <content type="text">**Packages:** unreleased

### Added

- Repository created from the `grues-in-comic` comic renderer, with the game, chat, and
  AI-inference halves left behind.</content>
  </entry>
</feed>
