create-zoijs 0.1.3 → 0.2.0

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.
Files changed (40) hide show
  1. package/CHANGELOG.md +127 -74
  2. package/LICENSE +21 -21
  3. package/README.md +98 -97
  4. package/bin/create-zoijs.js +197 -169
  5. package/core-cdn.json +36 -0
  6. package/package.json +44 -43
  7. package/templates/app/README.md +68 -48
  8. package/templates/app/_gitignore +1 -1
  9. package/templates/app/_vscode/extensions.json +7 -0
  10. package/templates/app/dev-server.mjs +124 -74
  11. package/templates/app/index.html +24 -22
  12. package/templates/app/jsconfig.json +16 -0
  13. package/templates/app/package.json +12 -12
  14. package/templates/app/src/app.js +98 -98
  15. package/templates/app/src/components/Header.js +16 -16
  16. package/templates/app/src/components/StatCard.js +13 -13
  17. package/templates/app/src/components/TaskItem.js +18 -18
  18. package/templates/app/src/style.css +241 -241
  19. package/templates/basic/README.md +50 -30
  20. package/templates/basic/_gitignore +1 -1
  21. package/templates/basic/_vscode/extensions.json +7 -0
  22. package/templates/basic/dev-server.mjs +124 -74
  23. package/templates/basic/index.html +24 -22
  24. package/templates/basic/jsconfig.json +16 -0
  25. package/templates/basic/package.json +12 -12
  26. package/templates/basic/src/app.js +18 -18
  27. package/templates/basic/src/style.css +33 -33
  28. package/templates/library/_vscode/extensions.json +7 -0
  29. package/templates/library/package.json +2 -2
  30. package/templates/minimal/README.md +29 -8
  31. package/templates/minimal/dev-server.mjs +124 -0
  32. package/templates/minimal/index.html +5 -3
  33. package/templates/minimal/package.json +9 -0
  34. package/templates/typescript/README.md +20 -0
  35. package/templates/typescript/_gitignore +1 -1
  36. package/templates/typescript/_vscode/extensions.json +7 -0
  37. package/templates/typescript/dev-server.mjs +124 -74
  38. package/templates/typescript/index.html +24 -22
  39. package/templates/typescript/package.json +1 -1
  40. package/templates/typescript/src/style.css +33 -33
package/CHANGELOG.md CHANGED
@@ -1,74 +1,127 @@
1
- # Changelog
2
-
3
- All notable changes to `create-zoijs` are documented here.
4
-
5
- ## 0.1.3 — 2026-06-26
6
-
7
- Three new templates (now five total). No change to existing templates or the CLI
8
- API; `app` stays the default.
9
-
10
- - **`typescript`** — the counter as **type-checked JavaScript**: `// @ts-check` +
11
- a strict `tsconfig.json` + `npm run typecheck` (`tsc --noEmit`) give full
12
- TypeScript safety using `@zoijs/core`'s shipped types, with **no build step** (the
13
- browser runs the `.js` as-is). Keeps the dev server on 7310.
14
- - **`minimal`** — the smallest scaffold: two flat files (`index.html` + `app.js`)
15
- loading `@zoijs/core` from a CDN. No `package.json`, no install, no dev server —
16
- run with `npx serve . -l 7310`.
17
- - **`library`** — a starter for authoring a Zoijs-based package: `src/index.js` +
18
- hand-written `index.d.ts`, an `exports`/`types` `package.json` with a peer
19
- dependency on `@zoijs/core`, and a `node:test` suite — the shape the official
20
- optional packages use.
21
- - The scaffolder now treats `.ts`/`.d.ts` as text (token substitution), and the
22
- CLI's own `npm test` targets its own test file so it no longer runs the
23
- templates' bundled test files.
24
-
25
- ## 0.1.2 — 2026-06-26
26
-
27
- Dev-server output polish. No CLI API changes; same zero-dependency server on the
28
- same ports.
29
-
30
- - **Cleaner banner:** `npm run dev` now prints a tidy banner with the local URL
31
- on its own line, and only mentions fallback ports when one was actually busy:
32
-
33
- ```text
34
- Zoijs dev server
35
-
36
- - Local: http://localhost:7310
37
- ```
38
-
39
- (Previously a single `ZoiJS dev server: http://localhost:7310` line plus a
40
- static `If busy: …` note.) Plain ASCII so it renders cleanly in every terminal,
41
- including the Windows console. Brand casing normalized to **Zoijs**. Still port
42
- **7310** with **7311 / 7312 / 7313** fallbacks; still Node built-ins only.
43
-
44
- ## 0.1.1 — 2026-06-25
45
-
46
- Starter polish. No CLI API changes.
47
-
48
- - **Dev server:** generated apps now run `npm run dev` on a tiny zero-dependency
49
- static server (`dev-server.mjs`, Node built-ins only) that uses port **7310**
50
- and falls back to **7311 / 7312 / 7313** if busy — replacing the old default
51
- of port 3000. It prints `ZoiJS dev server: http://localhost:<port>`.
52
- - **Default `app` template redesigned** into a polished "project dashboard":
53
- a hero header, a reusable `StatCard` (used ×4), filter chips (All / Active /
54
- Done), an empty state, and a developer-hint footer — demonstrating component
55
- composition, conditional rendering, and filtering alongside `createState` /
56
- `computed` / `each` and parent⇄child communication. Still depends only on
57
- `@zoijs/core`; still no build step.
58
- - **`basic` template** keeps the minimal counter and adopts the same dev server.
59
-
60
- ## 0.1.0 — 2026-06-25
61
-
62
- Initial release of the Zoijs starter CLI.
63
-
64
- - `npm create zoijs@latest my-app` — scaffold a new Zoijs app in one command.
65
- - Uses the provided folder name as the project name; derives `package.json`
66
- `name` (lowercased) and a readable `index.html` `<title>` from it.
67
- - Two templates: `app` (default — a small task dashboard demonstrating
68
- `html` / `mount` / `createState` / `computed` / `each` and parent⇄child
69
- communication) and `basic` (a minimal counter). Select with `--template`.
70
- - Validates the project name (npm-safe) and refuses to overwrite a non-empty
71
- directory.
72
- - Generated apps are plain HTML/CSS/JS with **no build step** and depend only on
73
- `@zoijs/core` (served via an import map from `node_modules`).
74
- - Zero runtime dependencies; the CLI is a single small file.
1
+ # Changelog
2
+
3
+ All notable changes to `create-zoijs` are documented here.
4
+
5
+ ## 0.2.0 — 2026-10-05
6
+
7
+ ### Security
8
+ - **Generated apps pin `@zoijs/core` exactly and securely (SEC-7).** Templates allowed `^1.1.0` /
9
+ `^1.2.0` (older than the 1.7.0 URL-guard fixes), and the `minimal` template loaded a floating
10
+ `esm.sh/@zoijs/core@1` URL with no integrity check. Every template now takes its core version from
11
+ one file, `core-cdn.json` (an exact, published version plus a jsDelivr import map with a sha384
12
+ integrity hash for every module file, generated from the npm tarball and verified at release):
13
+ package templates get `^<that version>`, and `minimal` gets the exact, integrity-pinned import map.
14
+ - **Hardened the scaffolded dev server (SEC-6)** (templates `app`, `basic`, `typescript`).
15
+ It listened on every network interface, served dotfiles (`/.env`, `/.git/config`, `.npmrc`)
16
+ and followed symlinks out of the project to anyone on the LAN, and a malformed URL such as
17
+ `/%E0` crashed it. It now listens on `127.0.0.1` only (opt into the LAN explicitly with
18
+ `ZOIJS_HOST=0.0.0.0`, which prints a warning), never serves a path with a dot-segment,
19
+ confines every file — including symlink targets — to the project folder (package-manager
20
+ links under `node_modules/` excepted), answers malformed or null-byte paths with `400`
21
+ and keeps running, and sends `X-Content-Type-Options: nosniff` and `Cache-Control: no-store`.
22
+ `npm run dev` and the URL it prints are unchanged.
23
+ - **The `minimal` template no longer recommends `npx serve`.** `npx serve . -l 7310`
24
+ downloaded a mutable package at run time and used that package's own (non-loopback)
25
+ defaults. `minimal` now ships the same hardened `dev-server.mjs` as the other templates,
26
+ plus a dependency-free `package.json` whose `dev` script runs it — still nothing to
27
+ install (`@zoijs/core` stays on the integrity-pinned CDN). All four template copies of
28
+ the server are byte-identical, and a test enforces that.
29
+
30
+ ### Changed
31
+ - **Deploy guidance for the production entry (SEC-4).** Every app template's README and
32
+ `index.html` explain switching the import map to `@zoijs/core`'s production entry
33
+ (`src/prod.js`: no dev warnings, no devtools hook) before deploying. `minimal`'s map
34
+ already carries the integrity hash for `prod.js`.
35
+ - **"Next steps" match the template.** `minimal` prints `npm run dev` with no install step;
36
+ `library` prints `npm install` / `npm test` instead of a `dev` script it doesn't have.
37
+
38
+ ### Changed
39
+ - **Generated apps target `@zoijs/core` 1.9.0.** Package templates depend on `^1.9.0`; the
40
+ `minimal` template's import map points at the exact 1.9.0 files on jsDelivr with an sha384
41
+ integrity hash for every module, including the production entry `src/prod.js` (first
42
+ shipped in 1.9.0), so the deploy step in each README works as written.
43
+
44
+ ## 0.1.4 — 2026-06-27
45
+
46
+ Scaffolded apps now come with editor config for a great out-of-the-box experience —
47
+ no toolchain required. The CLI API and the app code are unchanged.
48
+
49
+ - **`.vscode/extensions.json`** (templates `app`, `basic`, `typescript`, `library`) —
50
+ recommends a highlighter for `` html`` `` templates (`bierner.lit-html`), the ESLint
51
+ extension, and Prettier. VS Code suggests them when you open the project.
52
+ - **`jsconfig.json`** (templates `app`, `basic`) — IntelliSense (autocomplete, hover,
53
+ go-to-definition) from the types every Zoijs package ships, with no build step. Flip
54
+ `checkJs` on to also type-check your JavaScript. (The `typescript` and `library`
55
+ templates already carry a `tsconfig.json`.)
56
+ - See the [Editor Setup guide](https://zoijs.dev/editor-setup).
57
+
58
+ ## 0.1.3 — 2026-06-26
59
+
60
+ Three new templates (now five total). No change to existing templates or the CLI
61
+ API; `app` stays the default.
62
+
63
+ - **`typescript`** — the counter as **type-checked JavaScript**: `// @ts-check` +
64
+ a strict `tsconfig.json` + `npm run typecheck` (`tsc --noEmit`) give full
65
+ TypeScript safety using `@zoijs/core`'s shipped types, with **no build step** (the
66
+ browser runs the `.js` as-is). Keeps the dev server on 7310.
67
+ - **`minimal`** — the smallest scaffold: two flat files (`index.html` + `app.js`)
68
+ loading `@zoijs/core` from a CDN. No `package.json`, no install, no dev server —
69
+ run with `npx serve . -l 7310`.
70
+ - **`library`** — a starter for authoring a Zoijs-based package: `src/index.js` +
71
+ hand-written `index.d.ts`, an `exports`/`types` `package.json` with a peer
72
+ dependency on `@zoijs/core`, and a `node:test` suite — the shape the official
73
+ optional packages use.
74
+ - The scaffolder now treats `.ts`/`.d.ts` as text (token substitution), and the
75
+ CLI's own `npm test` targets its own test file so it no longer runs the
76
+ templates' bundled test files.
77
+
78
+ ## 0.1.2 — 2026-06-26
79
+
80
+ Dev-server output polish. No CLI API changes; same zero-dependency server on the
81
+ same ports.
82
+
83
+ - **Cleaner banner:** `npm run dev` now prints a tidy banner with the local URL
84
+ on its own line, and only mentions fallback ports when one was actually busy:
85
+
86
+ ```text
87
+ Zoijs dev server
88
+
89
+ - Local: http://localhost:7310
90
+ ```
91
+
92
+ (Previously a single `ZoiJS dev server: http://localhost:7310` line plus a
93
+ static `If busy: …` note.) Plain ASCII so it renders cleanly in every terminal,
94
+ including the Windows console. Brand casing normalized to **Zoijs**. Still port
95
+ **7310** with **7311 / 7312 / 7313** fallbacks; still Node built-ins only.
96
+
97
+ ## 0.1.1 — 2026-06-25
98
+
99
+ Starter polish. No CLI API changes.
100
+
101
+ - **Dev server:** generated apps now run `npm run dev` on a tiny zero-dependency
102
+ static server (`dev-server.mjs`, Node built-ins only) that uses port **7310**
103
+ and falls back to **7311 / 7312 / 7313** if busy — replacing the old default
104
+ of port 3000. It prints `ZoiJS dev server: http://localhost:<port>`.
105
+ - **Default `app` template redesigned** into a polished "project dashboard":
106
+ a hero header, a reusable `StatCard` (used ×4), filter chips (All / Active /
107
+ Done), an empty state, and a developer-hint footer — demonstrating component
108
+ composition, conditional rendering, and filtering alongside `createState` /
109
+ `computed` / `each` and parent⇄child communication. Still depends only on
110
+ `@zoijs/core`; still no build step.
111
+ - **`basic` template** keeps the minimal counter and adopts the same dev server.
112
+
113
+ ## 0.1.0 — 2026-06-25
114
+
115
+ Initial release of the Zoijs starter CLI.
116
+
117
+ - `npm create zoijs@latest my-app` — scaffold a new Zoijs app in one command.
118
+ - Uses the provided folder name as the project name; derives `package.json`
119
+ `name` (lowercased) and a readable `index.html` `<title>` from it.
120
+ - Two templates: `app` (default — a small task dashboard demonstrating
121
+ `html` / `mount` / `createState` / `computed` / `each` and parent⇄child
122
+ communication) and `basic` (a minimal counter). Select with `--template`.
123
+ - Validates the project name (npm-safe) and refuses to overwrite a non-empty
124
+ directory.
125
+ - Generated apps are plain HTML/CSS/JS with **no build step** and depend only on
126
+ `@zoijs/core` (served via an import map from `node_modules`).
127
+ - Zero runtime dependencies; the CLI is a single small file.
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Zoijs contributors
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Zoijs contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,97 +1,98 @@
1
- <div align="center">
2
-
3
- # create-zoijs
4
-
5
- **Create a new [Zoijs](https://zoijs.dev) app with one command.** Plain HTML, CSS, and JavaScript — no build step.
6
-
7
- [![npm](https://img.shields.io/npm/v/create-zoijs.svg)](https://www.npmjs.com/package/create-zoijs)
8
- [![license](https://img.shields.io/npm/l/create-zoijs.svg)](LICENSE)
9
-
10
- </div>
11
-
12
- ---
13
-
14
- ## Usage
15
-
16
- ```bash
17
- npm create zoijs@latest my-app
18
- cd my-app
19
- npm install
20
- npm run dev
21
- ```
22
-
23
- `npm run dev` starts a tiny zero-dependency static server (no `serve`, no
24
- bundler, no build step):
25
-
26
- ```text
27
- Zoijs dev server
28
-
29
- - Local: http://localhost:7310
30
- ```
31
-
32
- (It falls back to 7311–7313 if the port is busy.)
33
-
34
- Or with `npx`:
35
-
36
- ```bash
37
- npx create-zoijs my-app
38
- ```
39
-
40
- > **A note on the name.** npm maps `npm create zoijs` to the package
41
- > `create-zoijs` (that's npm's convention for `npm create <name>`), which is why
42
- > this package is `create-zoijs` rather than `@zoijs/create`.
43
-
44
- ## Naming your app
45
-
46
- The folder name you pass becomes the project name:
47
-
48
- ```bash
49
- npm create zoijs@latest task-manager
50
- ```
51
-
52
- produces a `package.json` with `"name": "task-manager"` and an `index.html`
53
- with `<title>Task Manager</title>`. If you don't pass a name, the CLI asks for
54
- one.
55
-
56
- ## Templates
57
-
58
- ```bash
59
- npm create zoijs@latest my-app # default: the "app" template
60
- npm create zoijs@latest my-app --template app # a polished project dashboard
61
- npm create zoijs@latest my-app --template basic # a basic counter
62
- npm create zoijs@latest my-app --template typescript # type-checked JS, no build step
63
- npm create zoijs@latest my-app --template minimal # two flat files, CDN, no install
64
- npm create zoijs@latest my-app --template library # author a Zoijs-based package
65
- ```
66
-
67
- - **`app`** (default) — a polished project dashboard (hero, stat cards, filters,
68
- empty state) showing `html`, `mount`, `createState`, `computed`, `each`,
69
- conditional rendering, and parent⇄child component communication.
70
- - **`basic`** — a basic counter, a small local app with a dev server.
71
- - **`typescript`** — the counter as type-checked JavaScript (`// @ts-check` +
72
- strict `tsconfig.json` + `npm run typecheck`). Full TS safety, **no build step**.
73
- - **`minimal`** — the smallest scaffold: two flat files loading `@zoijs/core` from a
74
- CDN. No install, no dev server — run with `npx serve . -l 7310`.
75
- - **`library`** — a starter for authoring a Zoijs-based package: `src` + `.d.ts`,
76
- `exports`/`types`, a peer dep on `@zoijs/core`, and a `node:test` suite.
77
-
78
- ## What it does
79
-
80
- - Copies a template, fills in the app name, and prints the next three commands.
81
- - Validates the name (npm-safe) and won't overwrite a non-empty folder.
82
-
83
- ## What it does **not** do
84
-
85
- By design, to keep Zoijs simple: no build system, no bundler, no compiler, no
86
- JSX transform, no code generation, no plugin system, no template DSL, and no
87
- complex prompts. The generated app is plain files you can read.
88
-
89
- ## You don't need this tool
90
-
91
- Zoijs works without the CLI — it's only a convenience. You can create an app by
92
- hand with an import map and a `<script type="module">`, or with
93
- `npm install @zoijs/core`. See the [Start guide](https://zoijs.dev/start).
94
-
95
- ## License
96
-
97
- [MIT](LICENSE) © Zoijs contributors
1
+ <div align="center">
2
+
3
+ # create-zoijs
4
+
5
+ **Create a new [Zoijs](https://zoijs.dev) app with one command.** Plain HTML, CSS, and JavaScript — no build step.
6
+
7
+ [![npm](https://img.shields.io/npm/v/create-zoijs.svg)](https://www.npmjs.com/package/create-zoijs)
8
+ [![license](https://img.shields.io/npm/l/create-zoijs.svg)](LICENSE)
9
+
10
+ </div>
11
+
12
+ ---
13
+
14
+ ## Usage
15
+
16
+ ```bash
17
+ npm create zoijs@latest my-app
18
+ cd my-app
19
+ npm install
20
+ npm run dev
21
+ ```
22
+
23
+ `npm run dev` starts a tiny zero-dependency static server (no `serve`, no
24
+ bundler, no build step):
25
+
26
+ ```text
27
+ Zoijs dev server
28
+
29
+ - Local: http://localhost:7310
30
+ ```
31
+
32
+ (It falls back to 7311–7313 if the port is busy.)
33
+
34
+ Or with `npx`:
35
+
36
+ ```bash
37
+ npx create-zoijs my-app
38
+ ```
39
+
40
+ > **A note on the name.** npm maps `npm create zoijs` to the package
41
+ > `create-zoijs` (that's npm's convention for `npm create <name>`), which is why
42
+ > this package is `create-zoijs` rather than `@zoijs/create`.
43
+
44
+ ## Naming your app
45
+
46
+ The folder name you pass becomes the project name:
47
+
48
+ ```bash
49
+ npm create zoijs@latest task-manager
50
+ ```
51
+
52
+ produces a `package.json` with `"name": "task-manager"` and an `index.html`
53
+ with `<title>Task Manager</title>`. If you don't pass a name, the CLI asks for
54
+ one.
55
+
56
+ ## Templates
57
+
58
+ ```bash
59
+ npm create zoijs@latest my-app # default: the "app" template
60
+ npm create zoijs@latest my-app --template app # a polished project dashboard
61
+ npm create zoijs@latest my-app --template basic # a basic counter
62
+ npm create zoijs@latest my-app --template typescript # type-checked JS, no build step
63
+ npm create zoijs@latest my-app --template minimal # two flat files, CDN, no install
64
+ npm create zoijs@latest my-app --template library # author a Zoijs-based package
65
+ ```
66
+
67
+ - **`app`** (default) — a polished project dashboard (hero, stat cards, filters,
68
+ empty state) showing `html`, `mount`, `createState`, `computed`, `each`,
69
+ conditional rendering, and parent⇄child component communication.
70
+ - **`basic`** — a basic counter, a small local app with a dev server.
71
+ - **`typescript`** — the counter as type-checked JavaScript (`// @ts-check` +
72
+ strict `tsconfig.json` + `npm run typecheck`). Full TS safety, **no build step**.
73
+ - **`minimal`** — the smallest scaffold: two flat files loading `@zoijs/core` from a
74
+ CDN (exact version, integrity-pinned). No install — `npm run dev` runs the same
75
+ hardened dev server as the other templates.
76
+ - **`library`** — a starter for authoring a Zoijs-based package: `src` + `.d.ts`,
77
+ `exports`/`types`, a peer dep on `@zoijs/core`, and a `node:test` suite.
78
+
79
+ ## What it does
80
+
81
+ - Copies a template, fills in the app name, and prints the next commands to run.
82
+ - Validates the name (npm-safe) and won't overwrite a non-empty folder.
83
+
84
+ ## What it does **not** do
85
+
86
+ By design, to keep Zoijs simple: no build system, no bundler, no compiler, no
87
+ JSX transform, no code generation, no plugin system, no template DSL, and no
88
+ complex prompts. The generated app is plain files you can read.
89
+
90
+ ## You don't need this tool
91
+
92
+ Zoijs works without the CLI — it's only a convenience. You can create an app by
93
+ hand with an import map and a `<script type="module">`, or with
94
+ `npm install @zoijs/core`. See the [Start guide](https://zoijs.dev/start).
95
+
96
+ ## License
97
+
98
+ [MIT](LICENSE) © Zoijs contributors