Development
This guide covers setting up a development environment for zudotext.
Prerequisites
Rust — Install via rustup. The Tauri backend compiles natively.
Node.js — v20 or later
pnpm — v10+ (the project uses
packageManagerfield inpackage.json)Xcode Command Line Tools — Required for macOS native compilation (
xcode-select --install)
Getting Started
Clone the repository and install dependencies:
git clone <repo-url>
cd zudo-text
pnpm installStart the development server (launches both the Rust backend and Vite frontend with hot-reload):
pnpm tauri:devThis runs cargo tauri dev inside tauri-app/, which:
Compiles the Rust backend
Starts the Vite dev server on port 37461
Opens the app window with the WebView pointing to the dev server
On first run, Cargo downloads and compiles all Rust dependencies. Subsequent starts are much faster.
Key Commands
| Command | Description |
|---|---|
pnpm tauri:dev | Start dev (Rust + Vite hot-reload, port 37461) |
pnpm dev:mock | Frontend-only dev with mock backend (port 1421) |
pnpm writing:dev | WRITING app dev entry (the renderer ROOT and LEAFs embed) |
pnpm writing:build | WRITING app production build |
pnpm dev:admin | Admin renderer dev server |
pnpm tauri:build | Build production .app bundle (thin-launcher ROOT) |
pnpm storybook | UI component development (port 6006) |
pnpm check | Linting |
pnpm start | Documentation site dev server |
Config-Driven Architecture
zudotext is config-driven — different configurations produce different app instances. An app instance is defined by:
Workspace binding —
~/(schema v2,. config/ zudotext/ <appname>/ config. json {"workspace":{"id":…}}); an unbound instance routes to onboarding and nothing is scaffolded locallySettings (
.zudotext.settings.json) — a document inside the workspace: color scheme, editor config, shortcuts, frameset layout, header pinsPins — configurable content directories
Content directories — notes (
inbox/) and archives (archives/) at the workspace root
The shared @takazudo/app-defaults package defines the config schema, default values, and validation.