Rename SlideCraft to DeckCraft: crates, apps, binaries, app id, file extension (.deckcraft; .slidecraft files still open), packaging, docs; ROADMAP alpha and parity estimates

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Brandon Thomas
2026-10-06 01:46:40 -04:00
co-authored by Claude Opus 5.5
parent 49278565ea
commit ae9d525bce
216 changed files with 2021 additions and 1998 deletions
@@ -0,0 +1,14 @@
[Desktop Entry]
Type=Application
Name=DeckCraft
GenericName=Presentation
Comment=Create and present slide decks
Exec=deckcraft %F
TryExec=deckcraft
Icon=ai.storyteller.deckcraft
Terminal=false
StartupNotify=true
StartupWMClass=ai.storyteller.deckcraft
Categories=Office;Presentation;
MimeType=application/x-deckcraft;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/vnd.openxmlformats-officedocument.presentationml.template;application/vnd.openxmlformats-officedocument.presentationml.slideshow;
Keywords=presentation;slides;slide show;deck;pptx;keynote;powerpoint;
@@ -2,17 +2,17 @@
<!-- 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.slidecraft</id>
<id>ai.storyteller.deckcraft</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>MIT OR Apache-2.0</project_license>
<name>SlideCraft</name>
<name>DeckCraft</name>
<summary>Create and present slide decks</summary>
<developer id="ai.storyteller">
<name>Learning Machines LLC</name>
</developer>
<description>
<p>
SlideCraft builds presentations and slide shows: themes, layouts, shapes, pictures,
DeckCraft builds presentations and slide shows: themes, layouts, shapes, pictures,
tables, charts, transitions and animations. It opens and saves PowerPoint (.pptx) files
and presents them full screen with a presenter view.
</p>
@@ -20,12 +20,12 @@
Every action is also a command that the command line and AI agents (through MCP) can drive.
</p>
</description>
<launchable type="desktop-id">ai.storyteller.slidecraft.desktop</launchable>
<icon type="stock">ai.storyteller.slidecraft</icon>
<launchable type="desktop-id">ai.storyteller.deckcraft.desktop</launchable>
<icon type="stock">ai.storyteller.deckcraft</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/slidecraft</url>
<url type="bugtracker">https://github.com/storytold/slidecraft/issues</url>
<url type="help">https://github.com/storytold/slidecraft</url>
<url type="homepage">https://getartcraft.com/apps/deckcraft</url>
<url type="bugtracker">https://github.com/storytold/deckcraft/issues</url>
<url type="help">https://github.com/storytold/deckcraft</url>
<url type="contact">https://discord.gg/artcraft</url>
<categories>
<category>Office</category>
@@ -49,8 +49,8 @@
<control>pointing</control>
</supports>
<provides>
<binary>slidecraft</binary>
<mediatype>application/x-slidecraft</mediatype>
<binary>deckcraft</binary>
<mediatype>application/x-deckcraft</mediatype>
</provides>
<content_rating type="oars-1.1"/>
<releases>
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
<mime-type type="application/x-slidecraft">
<comment>SlideCraft presentation</comment>
<mime-type type="application/x-deckcraft">
<comment>DeckCraft presentation</comment>
<sub-class-of type="application/zip"/>
<glob pattern="*.slidecraft"/>
<icon name="ai.storyteller.slidecraft"/>
<glob pattern="*.deckcraft"/>
<icon name="ai.storyteller.deckcraft"/>
</mime-type>
</mime-info>
@@ -1,14 +0,0 @@
[Desktop Entry]
Type=Application
Name=SlideCraft
GenericName=Presentation
Comment=Create and present slide decks
Exec=slidecraft %F
TryExec=slidecraft
Icon=ai.storyteller.slidecraft
Terminal=false
StartupNotify=true
StartupWMClass=ai.storyteller.slidecraft
Categories=Office;Presentation;
MimeType=application/x-slidecraft;application/vnd.openxmlformats-officedocument.presentationml.presentation;application/vnd.openxmlformats-officedocument.presentationml.template;application/vnd.openxmlformats-officedocument.presentationml.slideshow;
Keywords=presentation;slides;slide show;deck;pptx;keynote;powerpoint;
@@ -1,20 +1,20 @@
# Flatpak manifest for SlideCraft, ready for a Flathub submission.
# Flatpak manifest for DeckCraft, 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.slidecraft.yml
# flatpak run ai.storyteller.slidecraft
# flatpak-builder --user --install --force-clean build-flatpak packaging/linux/flatpak/ai.storyteller.deckcraft.yml
# flatpak run ai.storyteller.deckcraft
#
# For Flathub, replace the `dir` source with a `git` source pinned to a release tag and commit.
id: ai.storyteller.slidecraft
id: ai.storyteller.deckcraft
runtime: org.freedesktop.Platform
runtime-version: '25.08'
sdk: org.freedesktop.Sdk
sdk-extensions:
- org.freedesktop.Sdk.Extension.rust-stable
command: slidecraft
command: deckcraft
finish-args:
- --share=ipc
- --socket=wayland
@@ -27,23 +27,23 @@ finish-args:
build-options:
append-path: /usr/lib/sdk/rust-stable/bin
modules:
- name: slidecraft
- name: deckcraft
buildsystem: simple
build-options:
env:
CARGO_HOME: /run/build/slidecraft/cargo
CARGO_HOME: /run/build/deckcraft/cargo
CARGO_NET_OFFLINE: 'true'
build-commands:
- cargo --offline build --release --locked -p slidecraft
- install -Dm755 target/release/slidecraft /app/bin/slidecraft
- install -Dm644 packaging/linux/ai.storyteller.slidecraft.desktop /app/share/applications/ai.storyteller.slidecraft.desktop
- install -Dm644 packaging/linux/ai.storyteller.slidecraft.mime.xml /app/share/mime/packages/ai.storyteller.slidecraft.xml
- cargo --offline build --release --locked -p deckcraft
- install -Dm755 target/release/deckcraft /app/bin/deckcraft
- install -Dm644 packaging/linux/ai.storyteller.deckcraft.desktop /app/share/applications/ai.storyteller.deckcraft.desktop
- install -Dm644 packaging/linux/ai.storyteller.deckcraft.mime.xml /app/share/mime/packages/ai.storyteller.deckcraft.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.slidecraft.metainfo.xml.in > /app/share/metainfo/ai.storyteller.slidecraft.metainfo.xml
packaging/linux/ai.storyteller.deckcraft.metainfo.xml.in > /app/share/metainfo/ai.storyteller.deckcraft.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: slidecraft
name: deckcraft
arch: ${NFPM_ARCH}
platform: linux
version: ${VERSION}
@@ -12,16 +12,16 @@ version_schema: semver
release: 1
section: editors
priority: optional
maintainer: ${SLIDECRAFT_MAINTAINER}
maintainer: ${DECKCRAFT_MAINTAINER}
vendor: Learning Machines LLC
homepage: https://getartcraft.com/apps/slidecraft
homepage: https://getartcraft.com/apps/deckcraft
license: MIT OR Apache-2.0
description: |-
Open-source, native presentation app that works the way PowerPoint users
expect. Themes, layouts, shapes, pictures, tables, charts, transitions and
animations; opens and saves PowerPoint (.pptx) files; full-screen slide show
with presenter view; GPU rendering (wgpu).
Includes slidecraft-cli, a headless renderer and command runner.
Includes deckcraft-cli, a headless renderer and command runner.
# 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
@@ -56,11 +56,11 @@ overrides:
- xdg-desktop-portal
contents:
- src: ${STAGE}/usr/bin/slidecraft
dst: /usr/bin/slidecraft
- src: ${STAGE}/usr/bin/deckcraft
dst: /usr/bin/deckcraft
file_info: { mode: 0755 }
- src: ${STAGE}/usr/bin/slidecraft-cli
dst: /usr/bin/slidecraft-cli
- src: ${STAGE}/usr/bin/deckcraft-cli
dst: /usr/bin/deckcraft-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 SlideCraft for Linux (<arch> is x86_64 or aarch64):
# Build and package DeckCraft for Linux (<arch> is x86_64 or aarch64):
#
# $DIST/slidecraft-<version>-linux-<arch>.AppImage any distro with glibc >= the build host's
# $DIST/slidecraft-<version>-linux-<arch>.deb Debian, Ubuntu, Mint, Pop!_OS, ...
# $DIST/slidecraft-<version>-linux-<arch>.rpm Fedora, openSUSE, RHEL, ...
# $DIST/slidecraft-<version>-linux-<arch>.tar.gz plain FHS-style tree (bin/, share/)
# $DIST/deckcraft-<version>-linux-<arch>.AppImage any distro with glibc >= the build host's
# $DIST/deckcraft-<version>-linux-<arch>.deb Debian, Ubuntu, Mint, Pop!_OS, ...
# $DIST/deckcraft-<version>-linux-<arch>.rpm Fedora, openSUSE, RHEL, ...
# $DIST/deckcraft-<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=../common.sh
. "$(dirname "${BASH_SOURCE[0]}")/../common.sh"
HERE="$ROOT/packaging/linux"
APP_ID=ai.storyteller.slidecraft
APP_ID=ai.storyteller.deckcraft
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 SLIDECRAFT_MAINTAINER="${SLIDECRAFT_MAINTAINER:-SlideCraft maintainers <slidecraft@storyteller.ai>}"
BASENAME="slidecraft-$VERSION-linux-$ARCH"
export DECKCRAFT_MAINTAINER="${DECKCRAFT_MAINTAINER:-DeckCraft maintainers <deckcraft@storyteller.ai>}"
BASENAME="deckcraft-$VERSION-linux-$ARCH"
echo "==> SlideCraft $VERSION for Linux $ARCH ($FORMATS)"
echo "==> DeckCraft $VERSION for Linux $ARCH ($FORMATS)"
if [ "$SKIP_BUILD" = 0 ]; then
(cd "$ROOT" && cargo build --release --locked -p slidecraft -p slidecraft-cli)
(cd "$ROOT" && cargo build --release --locked -p deckcraft -p deckcraft-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/slidecraft" "$STAGE/usr/bin/slidecraft"
install -Dm755 "$BIN/slidecraft-cli" "$STAGE/usr/bin/slidecraft-cli"
strip "$STAGE/usr/bin/slidecraft" "$STAGE/usr/bin/slidecraft-cli" 2>/dev/null || true
install -Dm755 "$BIN/deckcraft" "$STAGE/usr/bin/deckcraft"
install -Dm755 "$BIN/deckcraft-cli" "$STAGE/usr/bin/deckcraft-cli"
strip "$STAGE/usr/bin/deckcraft" "$STAGE/usr/bin/deckcraft-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@/$SLIDECRAFT_BUILD_DATE/g" \
sed -e "s/@VERSION@/$VERSION/g" -e "s/@DATE@/$DECKCRAFT_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/slidecraft"
copy_docs "$STAGE/usr/share/doc/slidecraft"
mkdir -p "$STAGE/usr/share/doc/deckcraft"
copy_docs "$STAGE/usr/share/doc/deckcraft"
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/SlideCraft.AppDir"
APPDIR="$WORK/DeckCraft.AppDir"
cp -R "$STAGE" "$APPDIR"
mv "$APPDIR/usr/share/doc" "$WORK/doc-unused"
ln -s usr/bin/slidecraft "$APPDIR/AppRun"
ln -s usr/bin/deckcraft "$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/slidecraft-cli" --version
"$STAGE/usr/bin/deckcraft-cli" --version
echo "==> done"
ls -lh "$DIST"