Morphos & Kosmesis are here.Explore
PraxisJS

create-praxisjs

Changelog for create-praxisjs — project scaffolding CLI.

create-praxisjs

1.2.1

Depends on the other @praxisjs/* packages through caret ranges (^2.3.0) instead of exact versions, so npm no longer installs a second copy of a package when two releases disagree, and upgrades no longer end in peer conflicts.

1.2.0

New: start with Kosmesis UI components, with every template and with Tauri v2. After the Tauri question, the CLI asks "Add Kosmesis UI components?" with Tailwind CSS or @praxisjs/css; --kosmesis answers Tailwind, --kosmesis=praxisjs-css (or --kosmesis praxisjs-css) @praxisjs/css, and --no-kosmesis no. It runs kosmesis init without prompts through your package manager (kosmesis@^0.6.0, the first release with the flags it needs) and adds the button and card components, which installs the project's dependencies. The theme, the Vite plugin, the @/* alias and the icon provider are wired for you, also in the Tauri vite.config.ts. When Kosmesis cannot be set up, the CLI says why, keeps the project as it would be without it and prints the commands to run later. See UI components with Kosmesis.

New: with an AI integration, the CLI ends with a prompt to paste into Claude Code or Codex. It asks the agent to check the PraxisJS MCP server, read the PraxisJS skill and docs, run its first-session checklist (your preferences, then whether to set up the project memory for the empty scaffold or map existing code) and confirm the folder structure and conventions with you. See Set up with your agent.

1.1.0

New: desktop apps with Tauri v2, with every template. After the template, the CLI asks "Desktop app with Tauri v2?"; --tauri answers yes without asking and --no-tauri answers no (with npm: npm create praxisjs@latest my-app -- --tauri). It runs the official Tauri CLI (tauri init through npx, pnpm dlx, yarn dlx or bunx) to generate src-tauri/, then wires it to the project: tauri.conf.json points at Vite's port 5173 and dist/ and runs your package manager's dev / build scripts, package.json gets tauri, tauri:dev and tauri:build scripts plus @tauri-apps/api and @tauri-apps/cli, vite.config.ts gets the settings Tauri recommends (fixed port, strictPort, clearScreen: false, TAURI_ENV_* prefix, HMR host for mobile devices), and a small Greet component calls a greet Rust command with invoke(). See Desktop app with Tauri v2.

When cargo is missing the CLI explains what to install for your platform; the web project works either way. When the Tauri CLI cannot be downloaded or fails, the CLI says why and leaves the web project as it would be without --tauri.

Unknown command-line options (anything starting with - other than --tauri / --no-tauri) are now rejected with an error instead of being ignored.

Bug fix: npm run lint failed in every freshly scaffolded project with "The file was not found in any of the provided project(s): eslint.config.mjs". The type-aware parser options in the template's eslint.config.mjs applied to every file, including the config itself, which no tsconfig includes. They now apply to .ts and .tsx files only.

Bug fix: scaffolded projects no longer contain a CHANGELOG.md with the release history of the internal template package.

Scaffolded projects allow esbuild's install script for pnpm (pnpm.onlyBuiltDependencies), so pnpm install no longer warns "Ignored build scripts: esbuild". esbuild comes with @praxisjs/vite-plugin, and works either way.

The blog template renders its post list with For keyed by slug instead of a .map() inside an arrow. Projects scaffolded with an AI integration receive the updated skills from praxisjs 1.1.0.

1.0.7

Updated dependency — [email protected]. Projects scaffolded with an AI integration now receive the refreshed Claude Code and Codex skills: corrected import paths (StatefulComponent and StatelessComponent come from @praxisjs/core), the StatelessComponent<Props> / this.props convention, a per-package API map, the full docs slug table, and a new Check for a native path first rule that makes the assistant look for an existing PraxisJS decorator or composable before hand-rolling one. See the praxisjs changelog for the full list.

No change to the templates themselves — scaffolded application code is unaffected.

1.0.6

Fixed the blog template's vite.config.ts plugin order — contentPlugin() now runs before praxisjs(). With praxisjs() first, its decorator lowering stripped @Collection('./path/*.md') down to a plain call before contentPlugin()'s regex transform ever saw the @, so the glob string reached @praxisjs/content unexpanded and getCollection() produced one broken entry per character of that string instead of the real posts.

1.0.5

Scaffolded projects now resolve @praxisjs/* dependency versions from the npm registry at scaffold time instead of shipping them pinned in the published package — create-praxisjs no longer needs a new release just because a @praxisjs/* package published a new version.

Templates moved from a hand-maintained folder to real, tested workspace apps (templates/minimal, templates/router, templates/full, templates/blog), generated into the published package at build time. This is an internal change with no effect on scaffolded output.

Scaffolded tsconfig.json now sets useDefineForClassFields: true (was false), matching the Vite 8 / oxc requirement described in the @praxisjs/vite-plugin changelog. The old default silently broke every decorator (@State, @Prop, etc.) once the scaffolded app's @praxisjs/vite-plugin was upgraded to the Vite 8 line.

Bumped the tsdown build dependency from 0.20.3 to 0.22.4 — the older version's typescript peer range (^5.0.0) didn't include this repo's [email protected], so pnpm install reported an unmet peer dependency. No change to the published output.

1.0.1

Updated dependency — [email protected]. The AI integration command referenced after scaffolding (previously praxisjs add) is now praxisjs ai add; see the praxisjs CLI docs for the full command reference, including the new ai remove, doctor, and upgrade commands.

1.0.0

Breaking: the add command has moved to a new praxisjs CLI package — run npx praxisjs ai add instead of npx create-praxisjs add. create-praxisjs now only scaffolds new projects; it depends on praxisjs to share the AI-integration plugin logic used during the "Add an AI integration?" scaffolding step.

0.4.8

Fix npx create-praxisjs add throwing ENOENT when installing the Claude or Codex skill integration — the published package was missing the plugins/ directory (files in package.json only listed dist and templates).

0.4.4

Updated template dependency — @praxisjs/[email protected].

0.4.3

Updated blog template to use the new @praxisjs/router typed signal fields API — @Params() params!: RouteParams instead of Computed<RouteParams>.

0.4.2

Template dependencies bumped to latest versions: @praxisjs/[email protected], @praxisjs/[email protected], @praxisjs/[email protected], @praxisjs/[email protected], @praxisjs/[email protected].

0.4.1

  • Templates updated for renamed APIs — @RouterConfig → @Router, @Store() → @Storable(), @UseStore() → @Store().
  • Add blog template — router + @praxisjs/content with sample posts, schema class, list page, and single post page. contentPlugin() is pre-configured in vite.config.ts.

0.4.0

Add AI integrations to the scaffolder and a new add subcommand for existing projects.

New project — after choosing a template, a second select asks "Add an AI integration?" with two options:

  • Claude Code — copies the PraxisJS skill to .claude/skills/praxisjs/ and creates .claude/settings.json pre-configured with the @praxisjs/mcp server.
  • Codex — copies the PraxisJS skill to .agents/skills/praxisjs/ and creates AGENTS.md at the project root.

Existing projects — run npx create-praxisjs add (or pnpm dlx / yarn dlx / bunx) to add an integration interactively to the current directory.

Bug fix — corrected plugin and template path resolution in the bundled binary.

0.3.22

Updated package dependencies.

0.3.21

@Compose string literal fix — the CLI template now uses @Compose(KeyCombo, 'ctrl+s') directly without an intermediate instance property. Updated scaffold templates to use the new getter(propName) helper for reactive composable sources.

0.3.20

Store template updated — store classes now extend ReactiveStore to satisfy the ReactiveHost constraint required by @State and @DeepState.

0.3.0 — Major template overhaul

Templates updated to reflect the decorator-first API (@RouterConfig, @Store, @UseStore, @Compose, class-based composables). experimentalDecorators removed from generated tsconfig.json.

0.1.0

Initial release — scaffolds Minimal, With Router, and Full templates with TypeScript, Vite, JSX, and HMR preconfigured.

On this page