Skip to content
Back to skills

Designcraft

ASecurity

DesignCraft is a desktop page-layout and publishing app (clean-room reimplementation of Adobe InDesign) for macOS, Windows, Linux and the web. Trigger whenever the user mentions DesignCraft, .designcraft or .idml files, InDesign-style layout (magazines, books, brochures, flyers, posters, newsletters), threading text across frames, placed images and swatches, print/PDF output, or asks to create, convert, export, automate, script (CLI/MCP/control channel), verify or troubleshoot a page-layout d...

  • 11 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 16, 2026
ai-agentsrustgogitapibackend

Works with

  • cursor
  • cli
  • api
  • mcp

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned October 16, 2026

npx -y skills add midasmatterhorn/artcraft-skills --skill designcraft --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Designcraft?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Designcraft
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/midasmatterhorn-designcraft/badge)](https://www.skillsdirectory.com/skills/midasmatterhorn-designcraft)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: designcraft
description: DesignCraft is a desktop page-layout and publishing app (clean-room reimplementation of Adobe InDesign) for macOS, Windows, Linux and the web. Trigger whenever the user mentions DesignCraft, .designcraft or .idml files, InDesign-style layout (magazines, books, brochures, flyers, posters, newsletters), threading text across frames, placed images and swatches, print/PDF output, or asks to create, convert, export, automate, script (CLI/MCP/control channel), verify or troubleshoot a page-layout document — even when they do not name the app. Also trigger when preparing assets (images, Word/Excel/CSV) for layout, or checking whether a layout file can be opened or exported somewhere else.
---

# DesignCraft

## Overview

DesignCraft is a clean-room reimplementation of Adobe InDesign — page layout and publishing —
written in pure Rust and shipped for macOS, Windows, Linux and WebAssembly (`README.md`).
It mirrors InDesign's model: spreads and parent pages, frames and threaded stories, the Control
panel, paragraph/character/object styles, swatches, text wrap (`README.md`; `docs/architecture.md`).
Maturity is **pre-alpha**: `ROADMAP.md` says the alpha gate fails only on Primary Text Frame
autoflow adding undeletable pages (#165, ~5–7 h away); "ready for real work" is estimated at ~47%.
Source: GitHub org `storytold`, repo `designcraft` (`Cargo.toml` `repository`).
The app on the authoring machine is 0.7.1 while repo HEAD is 0.8.0 — verify against your installed version
(see `## Verification protocol`).

## Capabilities (verified)

### Core editing and layout

- Document model: spreads/pages (facing or not), parent pages with page-number markers, sections,
  layers, frames (text/graphic/unassigned), threaded stories, five style kinds with based-on chains
  and groups, swatches (process/spot/tints/gradients), corner options, text wrap, effects
  (`crates/doc`; `docs/target-app-parity.md` "Appendix: what works today").
- Text engine: Knuth–Plass paragraph composer plus single-line composer, dictionary hyphenation
  (English, Spanish), word/letter/glyph-scaling justification, keeps, baseline grid, columns,
  tabs, bullets/list numbering, drop caps, nested/GREP styles, footnotes/endnotes, tables,
  cross-references, index, TOC, text variables, text on a path, vertical/CJK text, RTL/Arabic
  basics (`crates/compose`; `docs/typography-parity.md`, `docs/cjk.md`, `docs/arabic-typography.md`).
- Threading works by hand plus commands: `text.thread`, `text.unthread`, `text.removeFromThread`
  (`crates/engine/src/cmd/thread.rs`); autoflow adds pages up to 2000 (`AUTOFLOW_MAX_PAGES`).
- Tools: Selection, Direct Selection, Type, Pen/Pencil, Rectangle/Ellipse/Polygon (+ frame
  variants), Line, Hand, Zoom, Gap, Scissors, Gradient, Eyedropper, Page tool
  (`crates/tools`; `docs/target-app-parity.md`; control channel `ui.tool.select`).
- Effects/transparency: drop/inner shadow, glows, feathers, bevel, satin, gradient feather,
  transparency flattener, separations/overprint preview, PDF output-keeping soft effects
  (`crates/engine/src/cmd/object.rs`, `docs/target-app-parity.md`).
- Data Merge from a linked CSV/TSV/text/`.xlsx` source; placeholders for text, image, QR,
  hyperlink; `data.merge` creates a new document and leaves the template unchanged
  (`crates/engine/src/cmd/datamerge`; `docs/agents.md#data-merge`).

### Import / open

- Native **`.designcraft`** documents and **`.idml`** (InDesign Markup) — `file.open` dispatches
  on `.idml`; `file.openIdml` opens IDML packages; `file.openBytes` takes base64 for either
  (`crates/engine/src/cmd/file.rs:160-234`, `crates/engine/src/cmd/interchange.rs:10-18`).
- Placed graphics: PNG, JPEG, GIF, WebP, TIFF (incl. CMYK), BMP, PSD/PSB composite, SVG, PDF (a
  chosen page, first page by default), PDF-compatible Illustrator `.ai`, EPS (shown through its
  preview only — no PostScript interpreter); media files become media frames
  (`crates/images`; `crates/engine/src/cmd/file.rs` place filters; `apps/designcraft/src/main.rs`
  `open_filters`).
- Placed text: Word `.docx` (styles by name), RTF, plain text, Markdown, `.xlsx` as a table,
  InDesign Tagged Text (`crates/textimport/src/lib.rs:93-117`; `crates/engine/src/cmd/place_text.rs`).
- Resources: `.ase` swatch exchange load/save; `.icc`/`.icm` profiles
  (`crates/color`; `docs/file-format-parity.md`).

### Save / native project format

- `.designcraft` is a zip: `mimetype` (stored) `application/vnd.designcraft+zip`, `meta.json`
  (format version), `document.json` (pretty JSON), `assets/<id>.<ext>` byte-for-byte (one copy per
  distinct file, unreferenced assets dropped). Format `VERSION = 2`; older JSON documents still
  open and old versions are upgraded on load; a newer format version refuses to open
  (`crates/format/src/lib.rs:1-144`; save/open in `crates/engine/src/cmd/file.rs`).

### Export

- **PDF** via `file.exportPdf`: real selectable text with subset fonts, DeviceCMYK/RGB, spot
  separations, bleed/marks, spreads, tagged PDF, PDF/X-4 with output intent and built-in checks,
  PDF/A-2b, compressed images, interactive extras (links, buttons, AcroForm fields, page
  transitions, media) (`crates/pdf`; `crates/engine/src/cmd/export.rs:11-13`).
- **IDML** via `file.exportIdml` (embedded images optional; verified opening in InDesign 2026 by
  the project, no real-file corpus yet) (`crates/engine/src/cmd/interchange.rs:12-13`;
  `docs/file-format-parity.md`).
- **EPUB**: reflowable `file.exportEpub` and fixed-layout `file.exportFixedEpub`
  (`crates/epub/src/lib.rs`; fixed-layout is page images with text kept for search).
- **HTML**: `file.exportHtml` — one self-contained page in reading order (`crates/engine/src/cmd/export.rs:25-27`).
- **Text**: `file.exportText` as `txt`, `rtf` or `tagged` (`crates/engine/src/cmd/export.rs:28-30`).
- **XML**: `file.exportXml` / `file.importXml` (`crates/engine/src/cmd/xml.rs`).
- **Raster**: PNG from the UI (`app.exportPng`, ⌘E) and CLI; JPEG from the CLI only at quality 90
  (`apps/designcraft-cli/src/main.rs:297-318`; `docs/file-format-parity.md`).
- **Booklet** printer spreads as PDF (`file.printBooklet`); **Package** writes links, document
  fonts, IDML, optional PDF and a report (`crates/engine/src/cmd/package.rs`;
  `crates/engine/src/cmd/export.rs:22-24`).

### Automation surfaces (all verified in code)

- **Every user-visible action is a command**: 446 engine commands (188 placed in menus) + 99 UI
  commands; menu bar 9 menus / 49 submenus / 340 items (`crates/engine/src/cmd/mod.rs:150-211`;
  `crates/ui-egui/src/menus.rs` `UI_COMMANDS` & `MENUS`; `docs/target-app-parity.md` measured).
  Discover them at runtime: `designcraft-cli commands [FILTER]` and
  `designcraft-cli describe <id>` (label, menu, shortcut, params).
- **CLI** `designcraft-cli`: `run`, `commands`, `describe`, `script`, `app`, `mcp`, `perf`,
  `bench`, `validate-pdf`, `links`, `--version` (`apps/designcraft-cli/src/main.rs:38-39`).
  Scripts support `$N.path` references to earlier step results (`docs/agents.md`).
- **MCP server**: `designcraft-cli mcp [--connect PORT] [--sample]`, newline-delimited JSON-RPC
  on stdio; tools include `list_commands`, `execute`, `batch`, `inspect_document`, `get_story`,
  `set_story_text`, `new_document`, `open_document`, `save_document`, `place_image`,
  `render_page`, `export_png`, `screenshot`, `select_tool`, `pointer`, `key`, `type_text`,
  `click`, `drag`, `menu_list`, `ui_inspect`, `ui_set`, `dialog_set/confirm/cancel`
  (`crates/mcp`; `docs/mcp.md`).
- **Control channel**: desktop app with `--control <port>` (or `DESIGNCRAFT_CONTROL_PORT`)
  speaks JSON lines on `127.0.0.1` — `engine.execute`, `engine.commands`,
  `document.inspect`, `ui.inspect`, `ui.pointer`, `ui.key`, `ui.text`, `ui.click`, `ui.drag`,
  `ui.screenshot`, `ui.render`, `ui.dialog.*`, `ui.menu.invoke`, `app.open/save/export/quit`
  (`apps/designcraft/src/control_server.rs`; `crates/ui-egui/src/control.rs`; `docs/control-protocol.md`).
  No authentication; malformed lines close the connection.
- **Web build**: same UI in WASM via trunk, WebGPU with WebGL2 fallback; open/place through the
  browser picker or drag-and-drop; **no control channel** (`apps/designcraft-web`; `README.md`).

### Platform notes

- macOS is the primary, best-tested platform; Windows/Linux work but have known failures
  (`docs/hardware-parity.md`). Canvas rasterizes on CPU (vello_cpu, multithreaded); GPU only
  presents (wgpu: Metal/DX12/Vulkan/OpenGL) (`docs/architecture.md`).
- Localization partial: e.g. Japanese 95%, most others 83–85%, pt-BR 61%; Hindi/Indonesian/
  Korean/Vietnamese none (`ROADMAP.md`; `docs/localization-parity.md`).
- Crash recovery: unsaved documents written every 30 s (default `recovery_minutes: 0.5`) into a
  per-run locked folder and reopened after a crash (`crates/ui-egui/src/lib.rs:909-916`;
  `crates/engine/src/recovery.rs`; `apps/designcraft/src/profile.rs`).

## Known limitations and not-implemented

- **Not InDesign parity; pre-alpha.** Alpha gate fails on Primary Text Frame autoflow (#165);
  expect missing depth across areas (`ROADMAP.md`; `docs/gaps.md`).
- **`.indd` cannot be opened** (nor `.indt`, `.indb`, `.indl`, `.idms`, `.icml`, QuarkXPress,
  PageMaker). No INDD-reading code exists; only IDML is exchanged (`docs/gaps.md` #2;
  `docs/file-format-parity.md`; grep confirms no `.indd` reader).
- **No ExtendScript/UXP compatibility**: InDesign scripts do not run; only DesignCraft's own
  command/script/MCP API. No plug-in model (`docs/gaps.md` #22–23).
- **PDF/print gaps:** no PDF/X-1a or X-3, no `.joboptions`/PDF presets, no PDF/UA validation, no
  PostScript import or export; printing is PDF → CUPS (macOS/Linux) / Windows spooler, physical
  print output unvalidated (`docs/file-format-parity.md`; `docs/gaps.md` #9–10).
- **Editing bugs on Windows/Linux:** object copy/paste and right-click context menus fail for
  several users; Paste in Place can land on page 1; caret formatting can be discarded
  (`docs/gaps.md` #1; `docs/ui-parity.md`). macOS does not have these copy/paste failures.
- **No canvas IME** for Chinese/Japanese/Korean (#322) (`docs/gaps.md` #8).
- **Typography fidelity unmeasured:** no comparison against InDesign's line breaks; optical
  kerning falls back to metrics; a frame goes overset where InDesign only needs the baseline;
  hyphenation only English/Spanish; spelling English only (`docs/typography-parity.md`;
  `docs/gaps.md` #4, #13).
- **Startup can crash on some GPUs** (Intel Mac Metal, some Windows drivers) despite a backend
  fallback via `gpu.json` (`docs/gaps.md` #5; `README.md` “Graphics backend”).
- **Installed fonts not always found** (user font folders, font managers, Adobe Fonts) — text can
  fall back to Source Sans 3 (`docs/gaps.md` #6).
- **Web build** has no control channel, no folder-based document fonts (`docs/control-protocol.md`;
  `README.md`).
- **Long documents shallow:** Books basic; no book-wide TOC/index (`docs/gaps.md` #15).
- **No in-app media playback**; placed video/audio are poster/placeholder plus PDF/EPUB embedding
  (`docs/target-app-parity.md`).
- **macOS bundle quirk (verified):** `packaging/macos/Info.plist.in` declares the document UTI
  with extension **`pcraft`** (a leftover from the sibling app's template) and the bundle has no
  `CFBundleDocumentTypes` — confirmed identical in the installed 0.7.1 bundle. Do not rely on
  Finder double-click or drag-on-icon to open `.designcraft` files (also open bug #211 for IDML);
  open from inside the app or pass the path on the command line instead.
- Claimed but unverified by this review: real IDML round-trip fixtures, line-break identity with
  InDesign for specific documents, and print fidelity — `docs/file-format-parity.md` labels these
  `~` / open (`#193, #338, #339, #340`).

## How to operate

### Launch on macOS

- Launch the app: `open -a "DesignCraft"` (bundle `/Applications/DesignCraft.app`,
  id `ai.storyteller.designcraft`, installed 0.7.1).
- Open documents at launch by passing paths (and flags) to the executable:
  `/Applications/DesignCraft.app/Contents/MacOS/DesignCraft [--sample] [--control PORT] [FILE…]`
  — positional files are opened with `file.open`; `--sample` opens the built-in magazine;
  `--version` prints and exits (`apps/designcraft/src/main.rs:242-260,343-350`).
- Prefer the **CLI/headless** route for automation; the macOS `.app` ships only the desktop
  binary, the CLI is a separate release asset (`docs/mcp.md`).
- A locked/unfocused screen still renders offscreen: use `ui.render` or
  `designcraft-cli run --sample --all-pages DIR` (`docs/control-protocol.md`;
  `apps/designcraft-cli/src/main.rs:283-290`).

### Environment variables (verified)

| Variable | Effect |
|---|---|
| `DESIGNCRAFT_CONTROL_PORT` | starts the control channel like `--control` (`apps/designcraft/src/main.rs:246`) |
| `DESIGNCRAFT_CONFIG_DIR` | isolates settings/recovery in a directory (`apps/designcraft/src/profile.rs:10-33`; `docs/control-protocol.md`) |
| `DESIGNCRAFT_NO_PREFS` | reads/writes no preference files (`apps/designcraft/src/main.rs:95`) |
| `WGPU_BACKEND` | forces `metal`/`dx12`/`vulkan`/`gl` for the compositing window (`README.md`) |
| `RUST_LOG` | log levels; logs also go to `logs/designcraft.log` in the settings dir (`README.md`) |

### Files and settings (macOS)

- Settings dir: `~/Library/Application Support/DesignCraft/` — `ui.json`, `prefs.json`,
  `gpu.json`, `logs/designcraft.log` (rotated, capped 16 MiB), `Recovery/` (`README.md`).
- Coordinates in commands/scripts are **points (1/72 in), y down, in spread space**: a single
  page’s top-left is (0,0); on a facing spread the right page starts at x = page width
  (`docs/mcp.md` “Coordinates”). Text positions are **UTF-8 byte offsets**, not character counts
  (`docs/mcp.md` “Text offsets”).

### Core workflow concepts

- Multiple documents open at once in tabs (`file.activate`/`file.close` in
  `crates/engine/src/cmd/file.rs:55-63`; ⌘F6 cycles in `crates/ui-egui/src/menus.rs`).
- A frame is drawn with the Rectangle/Ellipse/Polygon Frame tools or `frame.create`; a story
  lives on one or more frames via threads; the loaded text cursor is what the port-click gesture
  uses (`README.md`; `crates/engine/src/cmd/thread.rs`).
- Parent pages hold repeated items; ⌘⇧-click a parent item to override it on a page
  (`docs/target-app-parity.md`).
- Undo is one step per gesture; commands are journaled and replayable as scripts
  (`docs/architecture.md`).

### Open / save / export flows

```sh
# GUI: File → Open (⌘O), Save (⌘S), Save As (⌘⇧S); File → Export PDF…, Export EPUB…, Export IDML…
# Headless CLI (from a checkout or the CLI release asset):
designcraft-cli run --sample --all-pages out/                    # one PNG per page
designcraft-cli run --in doc.designcraft --export out.pdf
designcraft-cli run --in doc.idml --export out.designcraft       # IDML → native
designcraft-cli script page.dcs --in template.designcraft --save merged.designcraft --export page.pdf
designcraft-cli app --method ui.screenshot '{"path": "/tmp/w.png"}'   # running app, port 7979
```

- `run` applies `--page`, `--scale`, `--pdf-options` to the exports that follow them; `.jpg`
  selects JPEG, anything else raster is PNG; `.designcraft` writes native, `.idml` IDML,
  `.pdf` PDF, `.epub` EPUB (`apps/designcraft-cli/src/main.rs:220-318`).
- Every command is callable in the running app: `designcraft-cli app <command.id> '<json>'`,
  or directly JSON-lines on the control port (`docs/agents.md`).
- Frequently used verified shortcuts: ⌘N New, ⌘O Open, ⌘S Save, ⌘⇧S Save As, ⌘W Close,
  ⌘D Place, ⌘Z/⌘⇧Z Undo/Redo, ⌘C/⌘X/⌘V clipboard, ⌘⇧V Paste without Formatting, ⌘F Find/Change,
  ⌘K Preferences, ⌘E Export Page as PNG, ⌘Return Quick Apply, ⌘J Go to Page, Tab/⇧Tab hide/show
  panels (`crates/engine/src/cmd/*.rs` shortcut fields;
  `crates/ui-egui/src/menus.rs` UI_COMMANDS). Do not assume other InDesign shortcuts exist —
  query `designcraft-cli describe <id>`.

## Working with an AI agent

Legitimate, evidence-backed jobs:

- **Preferred integration: headless CLI or MCP in headless mode** (`designcraft-cli mcp`), which
  needs no window and returns page images as PNG (`docs/mcp.md`). Connected mode
  (`--connect PORT`) drives the live app and the change is visible in the window.
- **Compose whole documents from commands**: `file.new` → `frame.create` → `text.insert`/
  `story.setText` → `type.*`/`style.*` → `file.place` → `file.exportPdf`, all documented by
  `designcraft-cli describe` and `docs/mcp.md`.
- **Prepare importable assets:** rasterize/convert images to PNG/JPEG/TIFF/WebP, keep CMYK
  TIFF/JPEG when ink fidelity matters (`docs/file-format-parity.md`); convert text sources to
  `.docx`/`.rtf`/`.txt` or CSV/TSV/`.xlsx` for Data Merge; unsupported inputs (HEIC, `.xls`,
  `.indd`, `.doc`, `.qxd`) must be converted elsewhere first.
- **Interpret/repair native projects:** `.designcraft` is zip + `document.json` (serde model in
  `designcraft-doc`), assets under `assets/<id>.<ext>`, `meta.json.format/version`
  (`crates/format/src/lib.rs`); format ≤ 2 loads, > 2 errors with “update DesignCraft”. Repair by
  editing JSON only in a copy, then reopen with `file.open` in a throwaway session.
- **Verify exports:** check the command result (`file.exportPdf` returns `pages`, `bytes`,
  `warnings`), run `designcraft-cli validate-pdf out.pdf` for PDF/X-4, reopen IDML/EPUB/HTML
  outputs, and render pages with `ui.render`/`render_page` for visual checks.
- **Batch at scale:** `script` files and MCP `batch` with `$N.path` references; run one
  `$CARGO_TARGET_DIR` per parallel agent in a checkout (`docs/agents.md`; `AGENTS.md`).

Must NOT / cautions:

- Do not drive the **GUI blind**: keyboard/menu state depends on focus and platform; prefer
  commands, CLI, MCP or the control channel, and look at `ui.screenshot` before and after UI
  gestures (`docs/control-protocol.md`).
- Do not assume `.indd`, ExtendScript/UXP, `.joboptions`, PDF/X-1a/X-3, IME input or live
  HTML animation exist (see limitations).
- Do not use `app.quit` to close the app when unsaved work matters — `app.quit` quits without
  asking, unlike the ⌘Q/menu command (`docs/control-protocol.md` method table).
- Do not rely on Finder double-click opening `.designcraft` (macOS bundle declares `pcraft`).
- Do not use the control port on untrusted networks: it is loopback-only but unauthenticated
  (`docs/control-protocol.md`).

## Verification protocol

1. **Throwaway round-trip before real work:** new → add content → save `.designcraft` → export
   PDF/PNG → reopen the saved file and an exported IDML in a fresh session; confirm page count,
   story lengths (`document.inspect`) and bytes before trusting an output.
2. **Never trust a silent export:** read the returned `warnings` array (PDF export, `file.open`
   font warnings) and open the artifact elsewhere; PDF conformance for X-4 via
   `designcraft-cli validate-pdf`.
3. **Version and back up project files per session:** recovery autosaves every 30 s but is not a
   backup; save explicit copies (`file.saveACopy`) before large edits, and remember HEAD (0.8.0)
   may be newer than the installed app (0.7.1) — features in this skill can be absent or
   different in your install.
4. **Update the app only between projects**, never mid-layout; older documents open (format 1/2
   upgrade on load) but newer-than-install files refuse with “please update”.
5. **Exercise the alpha blocker:** long stories in a Primary Text Frame document can gain pages
   that cannot be deleted (#165) — thread manually (`text.thread`) or keep primary-text-frame
   autoflow out of test documents.

## Sources & evidence

- Repo: https://github.com/storytold/designcraft (org `storytold`), inspected at HEAD
  `11a51d5b665aec8d6e675bd107a8a01514f10d00` (“Release 0.8.0”), on 2026-10-14.
- Installed app: `/Applications/DesignCraft.app` 0.7.1 (`CFBundleShortVersionString`,
  `DesignCraftBuildCommit` 3624f488192a8eeade11bd27609c9e5056214e75) — **verify against your
  installed version**.
- Key files read: `README.md`, `Cargo.toml`, `ROADMAP.md`, `AGENTS.md`,
  `docs/agents.md`, `docs/mcp.md`, `docs/control-protocol.md`, `docs/architecture.md`,
  `docs/gaps.md`, `docs/target-app-parity.md`, `docs/typography-parity.md`,
  `docs/file-format-parity.md`, `docs/ui-parity.md`, `docs/hardware-parity.md`, `docs/roadmap.md`,
  `apps/designcraft/src/main.rs`, `apps/designcraft/src/profile.rs`,
  `apps/designcraft-cli/src/main.rs`, `crates/engine/src/cmd/mod.rs`, `file.rs`, `export.rs`,
  `interchange.rs`, `thread.rs`, `crates/format/src/lib.rs`, `crates/textimport/src/lib.rs`,
  `crates/ui-egui/src/menus.rs`, `crates/ui-egui/src/control.rs`,
  `packaging/macos/Info.plist.in`.
- Deeper surface reference: `references/agent-surfaces.md` (CLI, MCP, control channel, script
  syntax at a glance). Ground truth is always the running app itself:
  `designcraft-cli commands` / `describe`.

Files in this skill

  • SKILL.md20.7 KB
  • agents/openai.yaml146 B
  • evidence.md6.9 KB
  • references/agent-surfaces.md8.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.