designcraft-web
Docker app from MikaPST's Repository
Overview
Readme
View on GitHub
DesignCraft Web — Docker Image
A community-maintained Docker image for
DesignCraft,
bringing its WebAssembly-based page layout and publishing studio to a self-hosted web interface.
Automated weekly builds and image publication to GitHub Container Registry (GHCR).
Why this repository?
The upstream DesignCraft project provides a WebAssembly build that can be served as a static website. This repository automates building that web application from upstream source and packages the generated files into a lightweight NGINX-based Docker image.
The goals are to:
- Build the web app from the current
mainbranch of storytold/designcraft. - Include the shared font assets from storytold/craft-fonts, as required for complete release builds and Japanese text support.
- Rebuild the image automatically each week and publish it to GHCR.
- Provide a simple image that can later be offered through Unraid Community Applications.
- Keep this packaging project separate from the upstream DesignCraft source code.
This is an independent community packaging project. It is not an official DesignCraft release and is not affiliated with or endorsed by the DesignCraft or ArtCraft maintainers.
How it works
DesignCraft is a page layout and publishing application written in Rust. Its web application runs in the browser using WebAssembly and eframe. The container serves the compiled static web files through NGINX; it does not run a remote desktop or a server-side document-editing service.
- Browser-based publishing studio: create multi-page layouts using pages and spreads, parent pages, text frames, threaded stories, paragraph and character styles, tables, text wrap and more.
- Typography and layout: use the upstream text composition engine, columns, baseline grids, tabs, rules, shading and print-oriented layout tools.
- Local file handling: Open and Place use the browser's file picker; files can also be dropped into the application. Save and Export download files through the browser.
- No remote desktop: no VNC session or Linux graphical desktop is required.
- Self-hosted delivery: the container hosts the application files. It does not provide a shared document repository or server-side control channel.
The web build has no control channel. The JSON control protocol and MCP functionality described by the upstream project are not available through this browser build.
DesignCraft is at the pre-alpha stage and is under active development. Features, compatibility and behaviour may change between upstream builds. Test updates and verify exported documents before relying on it for important publishing work.
Docker image
The published image is:
ghcr.io/mikapst/designcraft-web:latest
Quick start with Docker Compose
A docker-compose.yml file is provided at the repository root:
services:
designcraft-web:
image: ghcr.io/mikapst/designcraft-web:latest
container_name: designcraft-web
restart: unless-stopped
ports:
- "8080:8080"
Start DesignCraft Web from the repository directory:
docker compose up -d
Then open:
http://YOUR_SERVER_IP:8080
Replace YOUR_SERVER_IP with the IP address or hostname of your server. On the same computer, use http://localhost:8080.
Run directly with Docker
docker run -d \
--name designcraft-web \
--restart unless-stopped \
-p 8080:8080 \
ghcr.io/mikapst/designcraft-web:latest
Useful commands
# View logs
docker compose logs -f
# Pull the latest image and recreate the container
docker compose pull
docker compose up -d
# Stop and remove the container
docker compose down
No .env file or persistent Docker volume is required for the default configuration. The host port is 8080; to use a different host port, change the left-hand side of the port mapping, for example 8081:8080.
Reverse proxy and browser requirements
The NGINX configuration:
- serves
.wasmfiles with theapplication/wasmMIME type; - uses the MIME types provided by NGINX for JavaScript, CSS, fonts and images;
- enables gzip compression for WebAssembly, JavaScript, CSS and HTML;
- applies
Cache-Control: no-cachetoindex.html; - applies long-lived immutable caching to content-hashed static assets generated by Trunk.
DesignCraft uses WebGPU when available and falls back to WebGL2. The ?webgl query parameter forces WebGL2. WebGPU generally requires a secure browser context (HTTPS, or localhost). If you expose the application outside your local network, use HTTPS through a reverse proxy such as Traefik and avoid exposing plain HTTP directly to the public Internet.
The web build uses relative asset paths and can be served by a static web server. If you publish it below a URL prefix, configure your reverse proxy to preserve the requested path.
Web application options
| URL option | Behaviour |
|---|---|
| No option | Open the normal DesignCraft web application |
?webgl |
Force the WebGL2 renderer instead of WebGPU |
?sample |
Open the sample magazine |
For example:
https://YOUR_DOMAIN/?sample
The web application uses the browser's file picker for Open and Place, and supports drag and drop. Save and Export download the resulting files. Documents are not automatically stored in the Docker container.
Automated builds
GitHub Actions builds the DesignCraft web application and publishes the container image automatically.
| Trigger | Behaviour |
|---|---|
| Weekly schedule | Checks out the current upstream main branch, builds the WebAssembly app and publishes a new image when the build succeeds |
| Manual workflow dispatch | Allows a build to be started manually from the Actions tab |
| Changes to packaging files | Runs the workflow when docker-compose.yml, README.md or the workflow file changes on main |
Published tags
latest— the latest successful build.upstream-<commit>— identifies the exact DesignCraft source commit used for the build.
The image is published for linux/amd64 and linux/arm64. The container serves static web assets through NGINX; the generated web files are architecture-independent.
A scheduled rebuild does not guarantee that upstream changes are compatible or stable. If a build fails, the previous published image remains available.
First-time GHCR setup: after the first successful publication, check the package's visibility in GitHub Packages. Set
designcraft-webto Public if you want users to pull the image without authenticating to GHCR.
Build pipeline
The workflow:
- Checks out this repository.
- Checks out DesignCraft and the shared
craft-fontsrepository. - Installs the Rust WebAssembly target and Trunk.
- Sets
CRAFT_FONTS_DIRto the checked-out font repository. - Runs
trunk build --releasefromupstream/apps/designcraft-web. - Uses the upstream Trunk configuration to generate the static site in
upstream/dist/web. - Checks that the generated
index.html, WebAssembly and JavaScript assets exist. - Generates the Dockerfile and NGINX configuration in a temporary build context.
- Packages the static site into an NGINX image and publishes it to GHCR.
The upstream project states that release builds include craft-fonts; without those fonts, Japanese text falls back to system fonts, which are not available in the browser environment. This packaging workflow checks out the shared font repository and makes it available during compilation.
The workflow generates the Dockerfile and NGINX configuration during the GitHub Actions run. Separate Dockerfile, nginx.conf and .dockerignore files are therefore not required in this packaging repository.
The repository is primarily intended as an automated image-build and publication pipeline; the normal way to consume it is to pull the published image.
Unraid Community Applications
This image is intended to be usable on Unraid.
An Unraid Community Applications template will be added after the image build and runtime configuration have been tested and validated.
In the meantime, DesignCraft Web can be deployed on Unraid using the Docker Compose configuration above or by configuring the container manually with:
- Repository:
ghcr.io/mikapst/designcraft-web:latest - Container port:
8080 - Host port:
8080by default
Documents opened in the browser are not stored in the Unraid appdata directory. Save or export your work and keep independent copies of important source files and documents.
Upstream project and attribution
- DesignCraft source code: storytold/designcraft
- DesignCraft web build instructions: Web section in README
- Shared font assets: storytold/craft-fonts
- Official releases: DesignCraft releases
DesignCraft is dual-licensed under the MIT License or Apache License 2.0, at the user's option. Required notices are provided in the upstream NOTICE file. Bundled fonts, icons, images and other assets retain their own licenses and attribution requirements; consult upstream ASSETS.md and the craft-fonts repository.
The ArtCraft name, wordmark and logos in the upstream docs/brand/ directory are trademarks and are not covered by the software license. Their use is subject to the upstream docs/brand/LICENSE-brand.txt. The license of the upstream application and its assets does not automatically determine the license of the packaging files maintained in this repository. If you want to grant reuse rights for your own workflow, Compose file and documentation, select and include a separate LICENSE for this repository.
Disclaimer
This repository is maintained independently and is not affiliated with, sponsored by or endorsed by the DesignCraft project or its maintainers.
DesignCraft is pre-alpha software. Keep independent copies of important documents and test updates before relying on the application for important publishing work.
Requirements
No special privileges, database, or persistent data volumes are required for the standard deployment. The application runs in the browser and uses browser capabilities for graphics and local file handling. The container serves HTTP on port 8080. Use HTTPS through a reverse proxy such as Traefik for remote access; browser graphics features may require a secure context.
Categories
Related apps
Explore more like this
Explore allDetails
ghcr.io/mikapst/designcraft-web:latestRuntime arguments
- Web UI
http://[IP]:[PORT:8080]/- Network
bridge- Shell
sh- Privileged
- false
Template configuration
Host port used to access the DesignCraft Web interface. The container listens on port 8080.
- Target
- 8080
- Default
- 8085