create-muten 0.0.17 → 0.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -27
- package/package.json +1 -1
- package/template/src/pages/home/home.muten +1 -1
package/README.md
CHANGED
|
@@ -61,7 +61,6 @@ In an interactive terminal it prompts for a few things (defaults in parentheses)
|
|
|
61
61
|
| Prompt | Options | Default |
|
|
62
62
|
|---|---|---|
|
|
63
63
|
| **Project name** | any valid folder name | `muten-app` |
|
|
64
|
-
| **Template** | `muten` / `muten + React` / `muten + Svelte` | `muten` |
|
|
65
64
|
| **Styling** | `CSS` / `SCSS` / `Tailwind CSS` / `DaisyUI` (brings Tailwind) | `CSS` |
|
|
66
65
|
| **Add Vercel deploy config?** | `Y` / `n` | `n` |
|
|
67
66
|
| **Desktop app (Tauri)?** | `Y` / `n` | `n` |
|
|
@@ -77,25 +76,12 @@ component classes on top (and brings Tailwind). You always style via `class("…
|
|
|
77
76
|
- **Tauri** adds `src-tauri/` (a native desktop app - ships the OS webview, *not* a browser) + a `tauri` script:
|
|
78
77
|
`npm run tauri dev` / `tauri build`. Needs the [Rust toolchain](https://rustup.rs) installed (not auto-installed).
|
|
79
78
|
|
|
80
|
-
##
|
|
81
|
-
|
|
82
|
-
Every flavor scaffolds the **same** welcome page and the same `.muten` workflow, the only difference is
|
|
83
|
-
whether a framework's island plugin is pre-wired:
|
|
84
|
-
|
|
85
|
-
| Template | What you get |
|
|
86
|
-
|---|---|
|
|
87
|
-
| **muten** | pure muten - the AI-first DSL, zero framework runtime |
|
|
88
|
-
| **muten + React** | same, plus `@vitejs/plugin-react` + React, so you can drop in a **React island** (shadcn/Radix, any React lib) |
|
|
89
|
-
| **muten + Svelte** | same, plus `@sveltejs/vite-plugin-svelte` + Svelte, for **Svelte islands** (a lighter runtime) |
|
|
90
|
-
|
|
91
|
-
An *island* is a real framework component used as a node - `use X from "react:./X.jsx"` →
|
|
92
|
-
`X(value: s, onChange: act) client:visible` (props ↓ + events ↑, lazy + code-split). Default to `.muten`;
|
|
93
|
-
reach for an island only for a widget muten can't express.
|
|
79
|
+
## Styling
|
|
94
80
|
|
|
95
81
|
When **Tailwind or DaisyUI** is added, `theme.muten` is centralized to **match Tailwind's scale** (so
|
|
96
82
|
`style()` tokens and Tailwind utilities share one scale, e.g. `style(gap.md)` == `gap-4`); plain CSS/SCSS
|
|
97
83
|
keeps the default scale. **DaisyUI** adds component classes (`btn`, `card`, `modal`) usable in `class("…")` -
|
|
98
|
-
pure classes
|
|
84
|
+
pure classes; behavior is Muten state + `on()`.
|
|
99
85
|
|
|
100
86
|
If you accept the last prompt it runs `<pm> install` followed by `<pm> run dev`, your app is live in a
|
|
101
87
|
single step. Choosing SCSS also adds `sass` and switches the stylesheet to `.scss` automatically.
|
|
@@ -113,7 +99,6 @@ create-muten my-app --css --no-install # just scaffold, decide later
|
|
|
113
99
|
| Flag | Effect |
|
|
114
100
|
|---|---|
|
|
115
101
|
| `<name>` | the project folder (positional argument) |
|
|
116
|
-
| `--template <muten\|react\|svelte>` | flavor (default: `muten`); `--react` / `--svelte` are shortcuts |
|
|
117
102
|
| `--css` / `--scss` | pick the stylesheet (default: `css`) |
|
|
118
103
|
| `--tailwind` | add Tailwind CSS v4 on top of CSS (forces `--css`) |
|
|
119
104
|
| `--daisyui` | add DaisyUI component classes (implies `--tailwind`) |
|
|
@@ -154,22 +139,22 @@ declarative 80% - CRUD, dashboards, catalogs, content, internal tools. For the r
|
|
|
154
139
|
|
|
155
140
|
- **Pure muten**: CRUD / SaaS / catalog / dashboard / content: pages, routing, `state`/`store` (with page→store
|
|
156
141
|
action composition), `query` over REST, `Form` (text/number/email/bool/enum + validation), `DataTable`,
|
|
157
|
-
`when`/`each`, SSG + SEO, and the bounded **list toolkit**: inline objects, `patch
|
|
158
|
-
filter, aggregates (`sum`/`count`/`avg`/`min`/`max`), `sort`/`sortDesc`. The
|
|
142
|
+
`when`/`each`, SSG + SEO, and the bounded **list toolkit**: inline objects, `patch where`/`remove where` edits,
|
|
143
|
+
`each…where` filter, aggregates (`sum`/`count`/`avg`/`min`/`max by`), `sort`/`sortDesc by`, `toggle`. The
|
|
144
|
+
declarative 80%, zero extra deps.
|
|
159
145
|
- **muten + the platform** *(no framework runtime)* - native HTML (`<input type="date">`, `<dialog>`) + `class()`,
|
|
160
146
|
CSS libs (Tailwind / DaisyUI), **vanilla JS via `Custom`** (charts, maps, date-pickers, rich-text, grids),
|
|
161
|
-
`use fmt from "./lib.ts"` for any JS logic. Almost every "hard widget" lands here
|
|
162
|
-
|
|
163
|
-
(shadcn/ui, a React-only lib). Ships that runtime, lazy + code-split. The narrow last resort.
|
|
147
|
+
`use fmt from "./lib.ts"` for any JS logic. Almost every "hard widget" lands here - muten ships zero framework
|
|
148
|
+
runtime, so there is no React/Svelte escape; foreign UI comes in as a vanilla `Custom` component.
|
|
164
149
|
|
|
165
|
-
**Deploy, honestly:** `npm run dev` runs
|
|
166
|
-
`muten build` (zero-JS HTML); the moment you use `use`/
|
|
150
|
+
**Deploy, honestly:** `npm run dev` runs both tiers. For production, pure-muten static content can ship via
|
|
151
|
+
`muten build` (zero-JS HTML); the moment you use `use`/`Custom`/shared cross-page state, deploy with a normal
|
|
167
152
|
`vite build` (it bundles them - the static build doesn't). Most real apps use `vite build`.
|
|
168
153
|
|
|
169
|
-
Full reference (every primitive, the
|
|
154
|
+
Full reference (every primitive, the tiers, the roadmap): [`@muten/core`](https://www.npmjs.com/package/@muten/core).
|
|
170
155
|
|
|
171
|
-
> **Status: pre-1.0.** The core (language, compiler, CLI, Vite plugin, extension
|
|
172
|
-
> ecosystem is young
|
|
156
|
+
> **Status: pre-1.0.** The core (language, compiler, CLI, Vite plugin, extension) is solid; the
|
|
157
|
+
> ecosystem is young. Great for real apps, not yet for critical production.
|
|
173
158
|
|
|
174
159
|
## Requirements
|
|
175
160
|
|
package/package.json
CHANGED
|
@@ -24,7 +24,7 @@ Page class("welcome") {
|
|
|
24
24
|
Stack class("card") { Title "Edit this page" h3 class("card-title") Text "src/pages/home/home.muten" class("card-text") }
|
|
25
25
|
Stack class("card") { Title "Add a route" h3 class("card-title") Text "Map URLs to pages in src/app.muten" class("card-text") }
|
|
26
26
|
Stack class("card") { Title "Style it" h3 class("card-title") Text "class(…) plus your CSS in src/styles.css — Tailwind optional" class("card-text") }
|
|
27
|
-
Stack class("card") { Title "Need
|
|
27
|
+
Stack class("card") { Title "Need a JS widget?" h3 class("card-title") Text "Mount any vanilla-JS library with a Custom component" class("card-text") }
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
|