Skip to content

1.0 release notes November 2026 ​

Arclace 1.0: connected, and staying that way. A diagram drawn by Arclace: 0.3.0, the API review, leads to 1.0.0, stable, with the label same code; a dashed line labelled no breaking changes leads on to 2.0.0, the next major.

These notes cover everything that changed between the 0.x releases, including @phun-ky/connect-the-things 0.1, and 1.0. For the code changes, before and after, see the upgrading guide. Questions? See getting help.

Overview ​

1.0 is a promise more than a feature: from 1.0 on, the public API only breaks in a major release. Every export, option, error and class name you use today keeps working through every 1.x release. The code is the same as 0.3.0's.

To make that promise, the API had a review in November 2026, with the findings and decisions recorded in #20. It didn't add much surface; it made what was there dependable:

  • Nothing fails silently. Options are checked before anything is drawn, and a mistake throws straight away with a message that names the option.
  • One error class. ArclaceError for every failure that isn't a wrong type or a value out of range, with the underlying error as its cause.
  • One word for each end. A line goes from start to end, in the options, the geometry, the classes and the data attributes.

If you're on 0.3, there's nothing to change. If you're on 0.2 or still on connect-the-things, the upgrading guide has a checklist.

What's new ​

A new name ​

connect-the-things is now Arclace: @phun-ky/arclace on npm, the Arclace class, Arc types and arc- classes: an arc for the curve of a line, a lace for what joins two things. The background and why Arclace pages tell the story.

Options are checked ​

Every option is checked before a connection is added. A wrong type throws a TypeError, a value out of range a RangeError, and nothing is added:

ts
arclace.connect('#a', '#b', { type: 'wavy' }); // throws RangeError

The message says what to change: arclace: options.type must be one of "bezier", "straight", "orthogonal", not "wavy".

connectAll() checks every definition first, so either all of them are added or none.

ArclaceError ​

Failures throw ArclaceError, exported, so you can match on the type instead of the message:

ts
import { ArclaceError } from '@phun-ky/arclace';

try {
  arclace.connect('#a', '#b', { id: 'a-to-b' });
  arclace.connect('#b', '#c', { id: 'a-to-b' }); // the id is taken
} catch (error) {
  if (error instanceof ArclaceError) console.warn(error.message);
  // arclace: a connection with id "a-to-b" exists
}

An invalid selector throws an ArclaceError with the browser's SyntaxError as its cause.

start and end ​

stopElement and stopSide are now endElement and endSide, matching arrow: 'end', and the same goes for the geometry, .arc-anchor-end and data-end-side.

Smaller changes ​

  • find() returns [] for a selector that matches nothing.
  • disconnect() throws a TypeError for a target that can't be a connection, an id, an element or a selector.
  • setOptions() throws once the connection is removed, and can't change the id.
  • DEFAULT_CONNECTION_OPTIONS and connection.geometry are frozen.
  • The path builders check their points, so they never return NaN in path data.

Documentation ​

  • A docs site at phun-ky.net/arclace, with a playground, guides and the API reference, with text that meets WCAG AA contrast.
  • Accessibility: what the lines are to assistive technology, and how to put what they show in the page's own HTML.
  • A logo, the Bow: a tied lace with two loops and two tails.

Trust and quality ​

  • Published with provenance from GitHub Actions with npm trusted publishing, from 0.3.0 on, with a CycloneDX SBOM attached to every GitHub release. Check what you installed with npm audit signatures.
  • Every tarball is checked before it's published: packed, linted with publint and @arethetypeswrong/cli, installed and imported.
  • Tests at 99% of lines, 95% of branches and every function, enforced in CI, with property-based tests for the geometry.
  • The OpenSSF Best Practices passing badge, and most of silver.

What's not changing ​

  • What it does. Three line types (bezier, straight and orthogonal), automatic sides, spreading, arrows, labels, anchors, dashed and animated lines, and keeping in sync with the page.
  • No dependencies, no framework. Your HTML for the boxes, Arclace for the lines.
  • The options, apart from stop becoming end, and the classes and custom properties from 0.2.
  • The packaging: ES modules with types, a UMD build for script tags, and style.css. require() needs Node.js 22.12 or later, as before.

Deprecated ​

Nothing. 1.0 is the first release with a deprecation policy: from now on, deprecated APIs keep working through one full major. See deprecations.

Removed ​

Nothing that was documented. Two types that only described internals, ArcConnectionParamsType and ArcOptionalKeysType, stopped being exported in 0.3.0, and the Connection constructor became private in the types.

FAQ ​

What do I get from 1.0? ​

Stability. Within 1.x, npm update never needs a change to your code, and the security policy supports 1.x as a whole.

Do I need to upgrade right away? ​

0.x gets no more releases now that 1.0 is out, including security fixes. From 0.3, upgrading is only bumping the version.

How big is the upgrade? ​

From 0.3: none. From 0.2: rename stop to end, and fix any option the new checks reject. From connect-the-things: rename the package, the class, the types and the ctt- classes first. The checklist has every step.

What happens to @phun-ky/connect-the-things? ​

It's deprecated on npm, pointing to @phun-ky/arclace, and gets no more releases.

Will the lines be accessible to screen readers? ​

They're decorative, and the accessibility guide shows how to describe what they show in your own HTML. An opt-in mode with described or focusable lines is under "Considered" in the roadmap.

Getting help ​

  • Questions and ideas: open an issue.
  • A bug in 1.0: open an issue with the version and a small example.
  • A security problem: report it privately, as the security policy describes.

Released under the MIT License.