Rename PrintCraft to PdfCraft (#174)

The app, crates, binaries, bundle id, packaging, icons, screenshots and docs are now
PdfCraft / pdfcraft (repo storytold/pdfcraft). On first launch the desktop app moves the
PrintCraft settings and crash-recovery folders to the new name, and both apps read settings
saved under the old storage key, so upgrades keep recent files, preferences and unsaved work.
The signing test fixtures keep their PrintCraft subject names (they are binary).

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Brandon Thomas
2026-10-07 16:03:57 -04:00
committed by GitHub
co-authored by Claude Opus 5.5
parent 1c78ff479c
commit d3db99818f
351 changed files with 3218 additions and 3216 deletions
@@ -1,14 +1,14 @@
[Desktop Entry]
Type=Application
Name=PrintCraft
Name=PdfCraft
GenericName=PDF Editor
Comment=Read, organize, combine, split and secure PDFs
Exec=printcraft %F
TryExec=printcraft
Icon=ai.storyteller.printcraft
Exec=pdfcraft %F
TryExec=pdfcraft
Icon=ai.storyteller.pdfcraft
Terminal=false
StartupNotify=true
StartupWMClass=printcraft
StartupWMClass=pdfcraft
Categories=Office;Viewer;Graphics;
Keywords=pdf;viewer;editor;annotate;sign;forms;merge;split;
MimeType=application/pdf;
@@ -2,26 +2,26 @@
<!-- AppStream metadata (software centres, Flathub). Template: package.sh and the Flatpak
manifest substitute @VERSION@ and @DATE@ from Cargo.toml and the build date. -->
<component type="desktop-application">
<id>ai.storyteller.printcraft</id>
<id>ai.storyteller.pdfcraft</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>MIT OR Apache-2.0</project_license>
<name>PrintCraft</name>
<name>PdfCraft</name>
<summary>Read, organize, combine, split and secure PDFs</summary>
<developer id="ai.storyteller">
<name>Learning Machines LLC</name>
</developer>
<description>
<p>
PrintCraft is an open-source PDF workbench. Read, comment on, fill in and sign PDFs;
PdfCraft is an open-source PDF workbench. Read, comment on, fill in and sign PDFs;
organize, combine and split pages; edit, redact, protect and export documents.
</p>
</description>
<launchable type="desktop-id">ai.storyteller.printcraft.desktop</launchable>
<icon type="stock">ai.storyteller.printcraft</icon>
<launchable type="desktop-id">ai.storyteller.pdfcraft.desktop</launchable>
<icon type="stock">ai.storyteller.pdfcraft</icon>
<!-- Only url types known to appstream 0.15 (Ubuntu 22.04, where CI validates): no vcs-browser. -->
<url type="homepage">https://getartcraft.com/apps/printcraft</url>
<url type="bugtracker">https://github.com/storytold/printcraft/issues</url>
<url type="help">https://github.com/storytold/printcraft</url>
<url type="homepage">https://getartcraft.com/apps/pdfcraft</url>
<url type="bugtracker">https://github.com/storytold/pdfcraft/issues</url>
<url type="help">https://github.com/storytold/pdfcraft</url>
<url type="contact">https://discord.gg/artcraft</url>
<categories>
<category>Office</category>
@@ -36,7 +36,7 @@
<screenshots>
<screenshot type="default">
<caption>A PDF open with its threaded comments</caption>
<image>https://raw.githubusercontent.com/storytold/printcraft/main/docs/images/printcraft-viewer.png</image>
<image>https://raw.githubusercontent.com/storytold/pdfcraft/main/docs/images/pdfcraft-viewer.png</image>
</screenshot>
</screenshots>
<branding>
@@ -52,7 +52,7 @@
<control>tablet</control>
</supports>
<provides>
<binary>printcraft</binary>
<binary>pdfcraft</binary>
<mediatype>application/pdf</mediatype>
</provides>
<content_rating type="oars-1.1"/>
@@ -1,20 +1,20 @@
# Flatpak manifest for PrintCraft, ready for a Flathub submission.
# Flatpak manifest for PdfCraft, ready for a Flathub submission.
#
# Flatpak builds run offline, so the crate sources must be vendored first. From the repo root:
#
# curl -fsSLO https://raw.githubusercontent.com/flatpak/flatpak-builder-tools/master/cargo/flatpak-cargo-generator.py
# python3 flatpak-cargo-generator.py Cargo.lock -o packaging/linux/flatpak/cargo-sources.json
# flatpak-builder --user --install --force-clean build-flatpak packaging/linux/flatpak/ai.storyteller.printcraft.yml
# flatpak run ai.storyteller.printcraft
# flatpak-builder --user --install --force-clean build-flatpak packaging/linux/flatpak/ai.storyteller.pdfcraft.yml
# flatpak run ai.storyteller.pdfcraft
#
# For Flathub, replace the `dir` source with a `git` source pinned to a release tag and commit.
id: ai.storyteller.printcraft
id: ai.storyteller.pdfcraft
runtime: org.freedesktop.Platform
runtime-version: '25.08'
sdk: org.freedesktop.Sdk
sdk-extensions:
- org.freedesktop.Sdk.Extension.rust-stable
command: printcraft
command: pdfcraft
finish-args:
- --share=ipc
- --socket=wayland
@@ -27,23 +27,23 @@ finish-args:
build-options:
append-path: /usr/lib/sdk/rust-stable/bin
modules:
- name: printcraft
- name: pdfcraft
buildsystem: simple
build-options:
env:
CARGO_HOME: /run/build/printcraft/cargo
CARGO_HOME: /run/build/pdfcraft/cargo
CARGO_NET_OFFLINE: 'true'
build-commands:
- cargo --offline build --release --locked -p printcraft
- install -Dm755 target/release/printcraft /app/bin/printcraft
- install -Dm644 packaging/linux/ai.storyteller.printcraft.desktop /app/share/applications/ai.storyteller.printcraft.desktop
- install -Dm644 packaging/linux/ai.storyteller.printcraft.mime.xml /app/share/mime/packages/ai.storyteller.printcraft.xml
- cargo --offline build --release --locked -p pdfcraft
- install -Dm755 target/release/pdfcraft /app/bin/pdfcraft
- install -Dm644 packaging/linux/ai.storyteller.pdfcraft.desktop /app/share/applications/ai.storyteller.pdfcraft.desktop
- install -Dm644 packaging/linux/ai.storyteller.pdfcraft.mime.xml /app/share/mime/packages/ai.storyteller.pdfcraft.xml
- mkdir -p /app/share/icons && cp -R assets/app-icon/hicolor /app/share/icons/
- >-
version=$(awk '/^\[/{p=($0=="[workspace.package]");next} p&&$1=="version"{gsub(/[" ]/,"",$3);print $3;exit}' Cargo.toml);
install -d /app/share/metainfo;
sed -e "s/@VERSION@/$version/" -e "s/@DATE@/$(date -u +%Y-%m-%d)/"
packaging/linux/ai.storyteller.printcraft.metainfo.xml.in > /app/share/metainfo/ai.storyteller.printcraft.metainfo.xml
packaging/linux/ai.storyteller.pdfcraft.metainfo.xml.in > /app/share/metainfo/ai.storyteller.pdfcraft.metainfo.xml
sources:
- type: dir
path: ../../..
+8 -8
View File
@@ -3,7 +3,7 @@
# exports VERSION and NFPM_ARCH.
#
# nfpm package -f packaging/linux/nfpm.yaml -p deb -t dist/release/
name: printcraft
name: pdfcraft
arch: ${NFPM_ARCH}
platform: linux
version: ${VERSION}
@@ -12,14 +12,14 @@ version_schema: semver
release: 1
section: graphics
priority: optional
maintainer: ${PRINTCRAFT_MAINTAINER}
maintainer: ${PDFCRAFT_MAINTAINER}
vendor: Learning Machines LLC
homepage: https://getartcraft.com/apps/printcraft
homepage: https://getartcraft.com/apps/pdfcraft
license: MIT OR Apache-2.0
description: |-
Open-source, native PDF workbench: read, comment, fill and sign forms,
organize, combine, split, edit, redact, protect and export PDFs.
Includes printcraft-cli, a headless command runner and opt-in MCP server.
Includes pdfcraft-cli, a headless command runner and opt-in MCP server.
# The binaries link only glibc and libgcc_s directly. Windowing (X11/Wayland, xkbcommon) and the
# GPU (Vulkan, EGL/GL) are loaded at runtime, so they are dependencies/recommendations here
@@ -54,11 +54,11 @@ overrides:
- xdg-desktop-portal
contents:
- src: ${STAGE}/usr/bin/printcraft
dst: /usr/bin/printcraft
- src: ${STAGE}/usr/bin/pdfcraft
dst: /usr/bin/pdfcraft
file_info: { mode: 0755 }
- src: ${STAGE}/usr/bin/printcraft-cli
dst: /usr/bin/printcraft-cli
- src: ${STAGE}/usr/bin/pdfcraft-cli
dst: /usr/bin/pdfcraft-cli
file_info: { mode: 0755 }
- src: ${STAGE}/usr/share/
dst: /usr/share/
+19 -19
View File
@@ -1,10 +1,10 @@
#!/usr/bin/env bash
# Build and package PrintCraft for Linux (<arch> is x86_64 or aarch64):
# Build and package PdfCraft for Linux (<arch> is x86_64 or aarch64):
#
# $DIST/printcraft-<version>-linux-<arch>.AppImage any distro with glibc >= the build host's
# $DIST/printcraft-<version>-linux-<arch>.deb Debian, Ubuntu, Mint, Pop!_OS, ...
# $DIST/printcraft-<version>-linux-<arch>.rpm Fedora, openSUSE, RHEL, ...
# $DIST/printcraft-<version>-linux-<arch>.tar.gz plain FHS-style tree (bin/, share/)
# $DIST/pdfcraft-<version>-linux-<arch>.AppImage any distro with glibc >= the build host's
# $DIST/pdfcraft-<version>-linux-<arch>.deb Debian, Ubuntu, Mint, Pop!_OS, ...
# $DIST/pdfcraft-<version>-linux-<arch>.rpm Fedora, openSUSE, RHEL, ...
# $DIST/pdfcraft-<version>-linux-<arch>.tar.gz plain FHS-style tree (bin/, share/)
#
# Usage: packaging/linux/package.sh [--skip-build] [--formats "appimage deb rpm tar"]
#
@@ -15,7 +15,7 @@ set -euo pipefail
# shellcheck source=../env.sh
. "$(dirname "${BASH_SOURCE[0]}")/../env.sh"
HERE="$ROOT/packaging/linux"
APP_ID=ai.storyteller.printcraft
APP_ID=ai.storyteller.pdfcraft
SKIP_BUILD=0
FORMATS="appimage deb rpm tar"
@@ -34,13 +34,13 @@ case "$ARCH" in
aarch64 | arm64) ARCH=aarch64; DEB_ARCH=arm64 ;;
*) echo "unsupported architecture $ARCH" >&2; exit 2 ;;
esac
export PRINTCRAFT_MAINTAINER="${PRINTCRAFT_MAINTAINER:-PrintCraft maintainers <printcraft@storyteller.ai>}"
BASENAME="printcraft-$VERSION-linux-$ARCH"
export PDFCRAFT_MAINTAINER="${PDFCRAFT_MAINTAINER:-PdfCraft maintainers <pdfcraft@storyteller.ai>}"
BASENAME="pdfcraft-$VERSION-linux-$ARCH"
echo "==> PrintCraft $VERSION for Linux $ARCH ($FORMATS)"
echo "==> PdfCraft $VERSION for Linux $ARCH ($FORMATS)"
if [ "$SKIP_BUILD" = 0 ]; then
(cd "$ROOT" && cargo build --release --locked -p printcraft -p printcraft-cli)
(cd "$ROOT" && cargo build --release --locked -p pdfcraft -p pdfcraft-cli)
fi
BIN="$CARGO_TARGET_DIR/release"
WORK="$CARGO_TARGET_DIR/linux-package"
@@ -48,18 +48,18 @@ STAGE="$WORK/root"
rm -rf "$WORK"
# ---- stage an FHS tree (shared by every format) -------------------------------------------------
install -Dm755 "$BIN/printcraft" "$STAGE/usr/bin/printcraft"
install -Dm755 "$BIN/printcraft-cli" "$STAGE/usr/bin/printcraft-cli"
strip "$STAGE/usr/bin/printcraft" "$STAGE/usr/bin/printcraft-cli" 2>/dev/null || true
install -Dm755 "$BIN/pdfcraft" "$STAGE/usr/bin/pdfcraft"
install -Dm755 "$BIN/pdfcraft-cli" "$STAGE/usr/bin/pdfcraft-cli"
strip "$STAGE/usr/bin/pdfcraft" "$STAGE/usr/bin/pdfcraft-cli" 2>/dev/null || true
install -Dm644 "$HERE/$APP_ID.desktop" "$STAGE/usr/share/applications/$APP_ID.desktop"
install -Dm644 "$HERE/$APP_ID.mime.xml" "$STAGE/usr/share/mime/packages/$APP_ID.xml"
mkdir -p "$STAGE/usr/share/metainfo"
sed -e "s/@VERSION@/$VERSION/g" -e "s/@DATE@/$PRINTCRAFT_BUILD_DATE/g" \
sed -e "s/@VERSION@/$VERSION/g" -e "s/@DATE@/$PDFCRAFT_BUILD_DATE/g" \
"$HERE/$APP_ID.metainfo.xml.in" >"$STAGE/usr/share/metainfo/$APP_ID.metainfo.xml"
mkdir -p "$STAGE/usr/share/icons"
cp -R "$ROOT/assets/app-icon/hicolor" "$STAGE/usr/share/icons/"
mkdir -p "$STAGE/usr/share/doc/printcraft"
copy_docs "$STAGE/usr/share/doc/printcraft"
mkdir -p "$STAGE/usr/share/doc/pdfcraft"
copy_docs "$STAGE/usr/share/doc/pdfcraft"
if command -v desktop-file-validate >/dev/null; then
desktop-file-validate "$STAGE/usr/share/applications/$APP_ID.desktop"
@@ -92,10 +92,10 @@ fi
# ---- AppImage -----------------------------------------------------------------------------------
if has appimage; then
APPDIR="$WORK/PrintCraft.AppDir"
APPDIR="$WORK/PdfCraft.AppDir"
cp -R "$STAGE" "$APPDIR"
mv "$APPDIR/usr/share/doc" "$WORK/doc-unused"
ln -s usr/bin/printcraft "$APPDIR/AppRun"
ln -s usr/bin/pdfcraft "$APPDIR/AppRun"
cp "$HERE/$APP_ID.desktop" "$APPDIR/$APP_ID.desktop"
cp "$ROOT/assets/app-icon/hicolor/256x256/apps/$APP_ID.png" "$APPDIR/$APP_ID.png"
ln -s "$APP_ID.png" "$APPDIR/.DirIcon"
@@ -115,6 +115,6 @@ if has appimage; then
echo "wrote $OUT"
fi
"$STAGE/usr/bin/printcraft-cli" --version
"$STAGE/usr/bin/pdfcraft-cli" --version
echo "==> done"
ls -lh "$DIST"