Skip to content

v0.12.0

Choose a tag to compare

@github-actions github-actions released this 02 Aug 20:01
· 76 commits to master since this release
c4a7048

Aspicio reads PDFs. This is the release where a DXF viewer became a drawing viewer — and the one release with a breaking change, because making room for a second format meant nothing could be named after the first.

PDF support

Vector PDFs open everywhere Aspicio works: the demo, the embeddable components, the HTTP API, the MCP server, and the in-chat widget.

Aspicio reads them itself — no external PDF engine — which is why the parser is described in terms of what it does and does not claim. It reads page geometry, vector paths and fills, text through ToUnicode and font encodings, and colour spaces including spot inks. It measures in points and invents no scale: a drawing whose real-world size lives only in its artwork is not second-guessed.

Multi-page files are fully viewable. Page 1 opens, and every later page is a named space you can switch to without reloading.

Optional-content groups become layers. A PDF's OCG layers — how packaging files separate a dieline from the artwork it cuts — appear in the layer panel and toggle like DXF layers do. Two groups that share a name stay two rows rather than silently merging, and a group the file declares but never draws on still gets a row, because the panel reports what the file says.

Damage is contained and counted, never fatal. A page that fails to decode costs that page, not the document; a truncated stream draws what it has and says so. A file that isn't structurally a PDF fails with a readable message instead of a stack trace.

For agents

The HTTP API and the MCP server both grew a six-tool matrix: describe and render, in DXF-specific, PDF-specific, and format-agnostic flavours — the last detecting the format from the bytes.

Both surfaces now generate their tool definitions from one shared table, so the two can't drift apart in what they claim to accept.

Demo

  • Open a drawing from a URL. One dialog gathers both paths — a dropzone and a URL field, no tabs — with streaming progress, a cancel control, and a remembered list of recent URLs. Fetch failures explain themselves rather than dropping you on a generic error.
  • Remote drawings are shareable. The link carries both the source and the exact view, so a colleague opens the same drawing at the same zoom.

Upgrading from 0.11.x

This release has a breaking change. Two things moved.

1. Import a format explicitly. The root entry points no longer include a parser, so an app pulls in only the format it uses:

import { DrawingViewer } from "@aspicio/core";
import { dxfParser } from "@aspicio/core/dxf";   // and/or "@aspicio/core/pdf"

new DrawingViewer(el, { parsers: [dxfParser] });

The same applies to the component packages: @aspicio/elements/formats/dxf, and the matching subpath on react, vue and svelte.

This is what keeps a PDF-only app free of DXF code and vice versa — guaranteed by module boundaries rather than bundler cleverness, and checked by a build gate.

2. Format-neutral names dropped their Dxf prefix, since they were never DXF-specific:

Before After
DxfViewer DrawingViewer
DxfDocument DrawingDocument
DxfSource DrawingSource
DxfViewerOptions DrawingViewerOptions
DxfParseError DrawingParseError
DxfTheme AspicioTheme
<DxfEmbed> <DxfPreview> <DxfLayerPanel> <AspicioEmbed> <AspicioPreview> <AspicioLayerPanel>

DXF rendering behaviour is unchanged.


What's Changed

  • Spell out the gated release workflow in the runbook by @korya in #122
  • Open DXF from a remote URL by @korya in #123
  • Fix clipped focus ring on the zoom-cluster buttons by @korya in #124
  • docs: Correct stale package count, Cloudflare refs, and MCP tools by @korya in #126
  • feat(demo): Merge the Open-DXF dialog into one tabless view by @korya in #127
  • feat(core)!: Put format parsers behind their own entry points by @korya in #128
  • feat(core): Add the PDF object layer by @korya in #133
  • feat(core): Add the PDF strict gate by @korya in #134
  • feat(core): Add the PDF content interpreter by @korya in #135
  • feat(core): Extract PDF text through ToUnicode and font encodings by @korya in #136
  • feat(core): Assemble PDF pages into a drawing document by @korya in #137
  • feat(core): Add the PDF entry points and prove format separation by @korya in #138
  • feat(demo): Open PDFs in the demo by @korya in #139
  • Expose PDF to agents: six MCP tools and four HTTP endpoints by @korya in #140
  • Open PDFs in the in-chat viewer by @korya in #142
  • Stop calling Aspicio DXF-only in the in-repo docs by @korya in #141
  • Name PDF on the demo's secondary SEO surfaces by @korya in #143
  • Describe both formats in the OpenAPI document and embed skill by @korya in #144
  • Stop advertising layers next to dielines by @korya in #145
  • Tell the registries Aspicio reads PDF by @korya in #146
  • Assert on rendered UI, not the inlined bundle by @korya in #147
  • Make INV-12's exemption a test rather than a judgement by @korya in #148
  • Specify OCG layers, from what real files actually contain by @korya in #149
  • Add the optional-content model for PDF layers by @korya in #150
  • Put marked content on its optional-content layer by @korya in #151
  • Finish OCG layers — panels, corpus tests, cross-page proof by @korya in #152
  • chore(release): 0.12.0 by @korya in #153

Full Changelog: v0.11.1...v0.12.0