create-whiskeyjack
v0.7.1
Published
Scaffold a thumb-first app on the Whiskeyjack design system, wired for desktop and mobile via Tauri.
Maintainers
Readme
create-whiskeyjack
Scaffold a thumb-first app on the Whiskeyjack design system, wired for one web codebase delivered to desktop and mobile via Tauri.
npm create whiskeyjack@latest my-app
# or
npx create-whiskeyjack my-appThen:
cd my-app
npm install
npm run devMaking it a PWA
Opt-in, and it takes icons you have already exported:
npm create whiskeyjack@latest my-app -- --pwa ./iconsThe flag verifies the required PWA sizes are present, copies them into
public/ under canonical names, and wires vite-plugin-pwa with a matching
manifest. Required: 192x192, 512x512, and a maskable variant of each.
Optional but used when found: a 180x180 apple-touch-icon and a favicon.ico.
Icons are matched by their real dimensions rather than by filename, so any
reasonable export works – icon-192.png, pwa-192x192.png,
android-chrome-192x192.png. The scan is recursive, so pointing at an unzipped
export with per-platform subfolders is fine. Only "maskable" has to come from the
name or folder, because nothing in a PNG records that a design carries safe-area
padding.
If a required size is missing the scaffold stops before writing anything and names what it could not find. It does no image processing and depends on no icon tool. Icon Stack produces the whole set from one image:
npx @whiskeyjack-net/icon-stack generate \
--source icon.png --platforms pwa,favicon,appleTouchIcon --out iconsWithout --pwa you get no service worker and no manifest, which is the right
default: a service worker in a project that did not ask for one caches
aggressively, stays invisible until it misbehaves, and takes a tombstone worker to
retire.
Desktop builds: --tauri
The template's frontend is already Tauri-ready and inert on the web. --tauri
adds the half it cannot ship in a web project – src-tauri/, the Rust shell:
npm create whiskeyjack@latest my-app -- --tauri
npm create whiskeyjack@latest my-app -- --tauri --trayYou get the window block the shell layer assumes (overlay title bar and hidden
title on macOS, the app's own controls on Windows, the desktop's own title bar
on Linux), the three commands useSystemAccent invokes registered from the
whiskeyjack-tauri crate, window-state persistence, single-instance, and a
capability file granting exactly what the pack calls.
--tray is additive, not a different kind of app. A windowed app can keep a
tray icon and go on running when its window is closed, which is what every
tray-bearing app on this stack is. It adds the tray icon, its menu, and
close-to-background; asking for --tray alone implies --tauri.
Placeholder icons ship so the scaffold compiles – tauri::generate_context!
resolves them at BUILD time, so an app without them does not build at all, let
alone run. Replace them before you ship anything:
npx tauri icon ./your-icon.png # a 1024px PNGThat also writes the .icns and .ico a release bundle wants; add them to
bundle.icon in tauri.conf.json once they exist.
Needs the Rust toolchain and your platform's webview build dependencies – see tauri.app/start/prerequisites.
What you get
The starter template: the design-system app shell
(AppShell / AppHeader / HeaderNav / AppMain / MobileBottomNav),
theming via useTheme, createI18n internationalization with RTL sync, the
Tauri window-control shell (inert on the web), a Home + Settings page, and the
AI-native .claude layer pre-wired – CLAUDE.md, path-scoped rules, web-dev /
reviewer / accessibility agents, and /add-i18n-key / /build / /review
skills.
The scaffolder renames the app for you (package.json, the page title, the
app.name locale key, the theme storage key). Make it yours by replacing
src/pages/Home.tsx and adding your own routes, locales, and accent theme.
npm run check:versions asserts that package.json, src-tauri/tauri.conf.json
and src-tauri/Cargo.toml carry one version once the app has a Tauri shell,
which the in-app updater's version comparison relies on.
License
MIT
