cabloy 5.1.51 → 5.1.52
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/.claude/skills/cabloy-contract-loop/SKILL.md +1 -1
- package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +1 -1
- package/.claude/skills/cabloy-workflow/SKILL.md +8 -4
- package/.claude/skills/cabloy-workflow/references/edition-detection.md +3 -2
- package/.github/workflows/docs-pages.yml +2 -0
- package/CHANGELOG.md +25 -0
- package/CLAUDE.md +4 -4
- package/README.md +36 -21
- package/cabloy-docs/.vitepress/config.mjs +33 -0
- package/cabloy-docs/ai/class-placement-rule.md +1 -0
- package/cabloy-docs/ai/cli-for-agents.md +1 -1
- package/cabloy-docs/ai/docs-skills-rules-mapping.md +1 -0
- package/cabloy-docs/ai/edition-consistency-checklist.md +150 -0
- package/cabloy-docs/ai/edition-detection.md +3 -3
- package/cabloy-docs/ai/global-bean-lookup.md +1 -0
- package/cabloy-docs/ai/introduction.md +3 -3
- package/cabloy-docs/ai/repo-guidance.md +2 -2
- package/cabloy-docs/ai/rules-and-config.md +1 -1
- package/cabloy-docs/ai/skills.md +2 -0
- package/cabloy-docs/ai/verification.md +1 -0
- package/cabloy-docs/ai/virtual-decorator-guidance.md +206 -0
- package/cabloy-docs/backend/introduction.md +2 -2
- package/cabloy-docs/backend/logger-guide.md +1 -1
- package/cabloy-docs/backend/quickstart.md +3 -3
- package/cabloy-docs/editions/cabloy-basic.md +4 -3
- package/cabloy-docs/editions/cabloy-start.md +33 -2
- package/cabloy-docs/editions/choosing-between-basic-and-start.md +84 -0
- package/cabloy-docs/editions/overview.md +83 -20
- package/cabloy-docs/frontend/foundation.md +3 -2
- package/cabloy-docs/frontend/introduction.md +5 -4
- package/cabloy-docs/frontend/quickstart.md +3 -2
- package/cabloy-docs/frontend/scripts.md +2 -2
- package/cabloy-docs/fullstack/cli.md +118 -0
- package/cabloy-docs/fullstack/comparison-with-other-frameworks.md +117 -0
- package/cabloy-docs/fullstack/edition-collaboration-differences.md +3 -2
- package/cabloy-docs/fullstack/introduction.md +45 -33
- package/cabloy-docs/fullstack/quickstart.md +7 -4
- package/cabloy-docs/fullstack/vona-zova-integration.md +2 -2
- package/cabloy-docs/fullstack/vscode-extensions.md +126 -0
- package/cabloy-docs/index.md +39 -40
- package/cabloy-docs/reference/glossary.md +2 -2
- package/cabloy-docs/reference/repo-scripts.md +1 -1
- package/package.json +1 -1
- package/vona/README.md +1 -1
- package/vona/pnpm-lock.yaml +383 -38
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/package.json +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/.metadata/index.ts +49 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/controller/memoryDiag.ts +97 -0
- package/vona/src/suite-vendor/a-cabloy/package.json +1 -1
- package/zova/README.md +1 -1
- package/zova/package.original.json +4 -4
- package/zova/packages-cli/cli/package.json +2 -2
- package/zova/packages-cli/cli-set-front/package.json +2 -2
- package/zova/packages-utils/zova-jsx/package.json +2 -2
- package/zova/packages-utils/zova-vite/package.json +2 -2
- package/zova/packages-utils/zova-vite/templates/app/controller.tsx_ +3 -3
- package/zova/packages-zova/zova/package.json +3 -3
- package/zova/packages-zova/zova-core/package.json +2 -2
- package/zova/packages-zova/zova-core/src/bean/beanContainer.ts +3 -3
- package/zova/packages-zova/zova-core/src/bean/beanControllerPageBase.ts +1 -0
- package/zova/packages-zova/zova-core/src/core/component/module.ts +16 -16
- package/zova/packages-zova/zova-core/src/core/context/component.ts +35 -3
- package/zova/packages-zova/zova-core/src/core/context/util.ts +15 -11
- package/zova/pnpm-lock.yaml +1596 -1679
- package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/index.ts +11 -0
- package/zova/src/suite/a-demo/modules/demo-basic/src/.metadata/page/toolMinimal.ts +9 -0
- package/zova/src/suite/a-demo/modules/demo-basic/src/page/toolMinimal/controller.tsx +11 -0
- package/zova/src/suite/a-demo/modules/demo-basic/src/routes.ts +10 -0
- package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-model/src/service/storage.ts +4 -5
- package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/monkey.ts +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssr.ts +36 -1
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssrMetaStore.ts +7 -2
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/monkey.ts +3 -0
- package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/src/service/ssrHandler.ts +70 -29
- package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/package.json +6 -6
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# Virtual Decorator Guidance
|
|
2
|
+
|
|
3
|
+
Use this page when deciding whether a backend class should use `@Virtual()`, or when AI needs to understand what `@Virtual()` changes in Vona bean behavior.
|
|
4
|
+
|
|
5
|
+
The goal is to preserve real runtime semantics, keep class placement intentional, and prevent `@Virtual()` from being reused as a shorthand or registration filter.
|
|
6
|
+
|
|
7
|
+
## Short definition
|
|
8
|
+
|
|
9
|
+
`@Virtual()` marks a container-managed class as a virtual inherited runtime node.
|
|
10
|
+
|
|
11
|
+
Its core effect is to make bean registration inherit `moduleBelong` from the parent bean chain instead of treating the current class as a new independent runtime ownership center.
|
|
12
|
+
|
|
13
|
+
## What `@Virtual()` does not mean
|
|
14
|
+
|
|
15
|
+
`@Virtual()` does **not** mean any of the following:
|
|
16
|
+
|
|
17
|
+
- suppress bean registration
|
|
18
|
+
- remove a bean-scene class from `IBeanRecordGlobal`
|
|
19
|
+
- act as a shorthand-registration filter
|
|
20
|
+
- compensate for incorrect class placement
|
|
21
|
+
- mean only that a class is abstract or internal
|
|
22
|
+
|
|
23
|
+
If a class should not appear on the global shorthand surface, fix placement instead.
|
|
24
|
+
|
|
25
|
+
For related guidance, also read:
|
|
26
|
+
|
|
27
|
+
- [Class Placement Rule](/ai/class-placement-rule)
|
|
28
|
+
- [Global Bean Lookup](/ai/global-bean-lookup)
|
|
29
|
+
|
|
30
|
+
## Runtime effect
|
|
31
|
+
|
|
32
|
+
`@Virtual()` matters at registration time and then keeps affecting runtime scope resolution.
|
|
33
|
+
|
|
34
|
+
### 1. Decorator stage
|
|
35
|
+
|
|
36
|
+
The decorator writes virtual metadata on the class.
|
|
37
|
+
|
|
38
|
+
Conceptually:
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
@Virtual()
|
|
42
|
+
-> metadata(SymbolDecoratorVirtual = true)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 2. Registration stage
|
|
46
|
+
|
|
47
|
+
When the bean is registered, Vona reads that metadata and computes `moduleBelong`.
|
|
48
|
+
|
|
49
|
+
- non-virtual bean -> `moduleBelong` stays equal to the current module
|
|
50
|
+
- virtual bean -> `moduleBelong` is inherited from the nearest parent bean that already has one
|
|
51
|
+
|
|
52
|
+
Conceptually:
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
@Virtual()
|
|
56
|
+
-> addBean()
|
|
57
|
+
-> _parseModuleBelong()
|
|
58
|
+
-> inherited moduleBelong
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 3. Runtime stage
|
|
62
|
+
|
|
63
|
+
Bean instances then resolve runtime scope resources from that inherited `moduleBelong`.
|
|
64
|
+
|
|
65
|
+
This directly affects access to:
|
|
66
|
+
|
|
67
|
+
- `this.scope`
|
|
68
|
+
- `this.module`
|
|
69
|
+
- `this.config`
|
|
70
|
+
- `this.constant`
|
|
71
|
+
- `this.error`
|
|
72
|
+
- `this.locale`
|
|
73
|
+
- `this.util`
|
|
74
|
+
- `this.model`
|
|
75
|
+
- `this.entity`
|
|
76
|
+
- module meta and scene resources
|
|
77
|
+
|
|
78
|
+
Short version:
|
|
79
|
+
|
|
80
|
+
> `@Virtual()` changes runtime ownership resolution, not registration existence.
|
|
81
|
+
|
|
82
|
+
## Relationship to `@Bean()` and `@Service()`
|
|
83
|
+
|
|
84
|
+
These decorators solve different problems.
|
|
85
|
+
|
|
86
|
+
- `@Bean()` / `@Service()` / `@Controller()` decide which scene the class registers into
|
|
87
|
+
- `@Virtual()` decides how runtime ownership is resolved
|
|
88
|
+
|
|
89
|
+
They are orthogonal.
|
|
90
|
+
|
|
91
|
+
Examples:
|
|
92
|
+
|
|
93
|
+
- `@Service() + @Virtual()`
|
|
94
|
+
- service-scene bean
|
|
95
|
+
- runtime ownership follows the parent bean chain
|
|
96
|
+
- `@Bean() + @Virtual()`
|
|
97
|
+
- bean-scene bean
|
|
98
|
+
- still a virtual bridge node rather than a new independent ownership center
|
|
99
|
+
|
|
100
|
+
## When to use `@Virtual()`
|
|
101
|
+
|
|
102
|
+
Use `@Virtual()` when a class is still container-managed, but is not intended to become a new independent runtime ownership center.
|
|
103
|
+
|
|
104
|
+
Typical cases:
|
|
105
|
+
|
|
106
|
+
### 1. Runtime-anchor bases
|
|
107
|
+
|
|
108
|
+
These classes still need bean lifecycle, class-token lookup, selector-aware behavior, or framework-managed context.
|
|
109
|
+
|
|
110
|
+
Representative examples:
|
|
111
|
+
|
|
112
|
+
- `vona/src/suite-vendor/a-vona/modules/a-orm/src/service/databaseDialectBase_.ts`
|
|
113
|
+
- `vona/src/suite-vendor/a-vona/modules/a-cache/src/service/cacheMemBase_.ts`
|
|
114
|
+
- `vona/src/suite-vendor/a-vona/modules/a-cache/src/service/cacheRedisBase_.ts`
|
|
115
|
+
- `vona/src/suite-vendor/a-vona/modules/a-summer/src/service/summerCacheBase_.ts`
|
|
116
|
+
|
|
117
|
+
### 2. Bean facade or bridge nodes
|
|
118
|
+
|
|
119
|
+
These classes remain intentionally visible on the bean-scene shorthand surface, but still behave as inherited bridge nodes rather than independent runtime ownership centers.
|
|
120
|
+
|
|
121
|
+
Representative example:
|
|
122
|
+
|
|
123
|
+
- `vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/bean.model.ts`
|
|
124
|
+
|
|
125
|
+
### 3. Compatibility or variant nodes
|
|
126
|
+
|
|
127
|
+
These classes extend an existing bean hierarchy and should keep runtime ownership aligned with the parent chain.
|
|
128
|
+
|
|
129
|
+
Representative example:
|
|
130
|
+
|
|
131
|
+
- `vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.mysql3.ts`
|
|
132
|
+
|
|
133
|
+
## When not to use `@Virtual()`
|
|
134
|
+
|
|
135
|
+
Do **not** use `@Virtual()` for these cases.
|
|
136
|
+
|
|
137
|
+
### 1. Independent business services
|
|
138
|
+
|
|
139
|
+
If a class is the real business owner of its own runtime boundary, it should usually keep its own `moduleBelong` and should not be virtual.
|
|
140
|
+
|
|
141
|
+
### 2. Misplaced bean-scene classes
|
|
142
|
+
|
|
143
|
+
Do not keep a class in `src/bean` and try to hide it with `@Virtual()`.
|
|
144
|
+
|
|
145
|
+
If it should not be a global shorthand bean, move it instead:
|
|
146
|
+
|
|
147
|
+
- pure helper or subclass-only base -> `src/lib`
|
|
148
|
+
- runtime-anchor base -> `src/service`, often `src/service/*_.ts`
|
|
149
|
+
|
|
150
|
+
### 3. Pure helpers or superclass convenience classes
|
|
151
|
+
|
|
152
|
+
If a class does not need container-managed behavior, it usually belongs in `src/lib` and should not use `@Virtual()`.
|
|
153
|
+
|
|
154
|
+
## Decision table
|
|
155
|
+
|
|
156
|
+
| Scenario | Use `@Virtual()` | Recommended placement | Reason |
|
|
157
|
+
| --- | --- | --- | --- |
|
|
158
|
+
| independent business service | No | `src/service` | it should own its own runtime resource boundary |
|
|
159
|
+
| runtime-anchor base with container behavior | Yes | `src/service` or `src/service/*_.ts` | it is container-managed but belongs logically to the parent bean system |
|
|
160
|
+
| bean-scene facade that intentionally stays on shorthand surface | Yes, if it is a bridge node | `src/bean` | it participates in shorthand lookup but is not a new ownership center |
|
|
161
|
+
| compatibility / dialect / variant node built on a parent bean | Yes | same scene as the concrete variant type | runtime ownership should inherit from the parent chain |
|
|
162
|
+
| pure helper or superclass convenience class | No | `src/lib` | no bean ownership semantics are needed |
|
|
163
|
+
| class kept in `src/bean` only to expose shortcut lookup | Usually no | re-evaluate placement | `@Virtual()` is not a shorthand filter |
|
|
164
|
+
| misplaced bean-scene class that should not be globally visible | No | move to `src/lib` or `src/service` | fix placement, not metadata |
|
|
165
|
+
|
|
166
|
+
## Worked examples
|
|
167
|
+
|
|
168
|
+
### Example: runtime-anchor dialect base
|
|
169
|
+
|
|
170
|
+
`databaseDialectBase_.ts` is virtual because it remains container-managed and is used as the runtime base for dialect resolution, but it is not meant to become a separate public shorthand ownership center.
|
|
171
|
+
|
|
172
|
+
### Example: bean-scene bridge node
|
|
173
|
+
|
|
174
|
+
`bean.model.ts` is still in bean-scene because it intentionally participates in the global shorthand surface, but `@Virtual()` preserves its bridge-node semantics.
|
|
175
|
+
|
|
176
|
+
### Example: derived dialect variant
|
|
177
|
+
|
|
178
|
+
`databaseDialect.mysql3.ts` combines `$Class.extend(...)` and `@Virtual()` because those two features solve different problems:
|
|
179
|
+
|
|
180
|
+
- `$Class.extend(...)` expresses a framework-managed derived-class relationship
|
|
181
|
+
- `@Virtual()` preserves inherited runtime ownership semantics
|
|
182
|
+
|
|
183
|
+
## Quick checklist
|
|
184
|
+
|
|
185
|
+
Ask these questions in order:
|
|
186
|
+
|
|
187
|
+
1. Does the class still need container-managed behavior?
|
|
188
|
+
- if no, do not use `@Virtual()`
|
|
189
|
+
2. Is it a runtime extension of a parent bean system rather than a new business ownership center?
|
|
190
|
+
- if yes, `@Virtual()` may be appropriate
|
|
191
|
+
3. Are you using `@Virtual()` only to hide the class from shorthand or metadata surfaces?
|
|
192
|
+
- if yes, do not use it; fix placement instead
|
|
193
|
+
4. Will inherited `moduleBelong` produce the correct `scope` / `config` / `model` / `entity` behavior at runtime?
|
|
194
|
+
- if no, do not use `@Virtual()`
|
|
195
|
+
|
|
196
|
+
## Related guidance
|
|
197
|
+
|
|
198
|
+
Read these pages together:
|
|
199
|
+
|
|
200
|
+
- [Class Placement Rule](/ai/class-placement-rule)
|
|
201
|
+
- [Global Bean Lookup](/ai/global-bean-lookup)
|
|
202
|
+
- [Docs, Skills, Rules, and CLI Mapping](/ai/docs-skills-rules-mapping)
|
|
203
|
+
|
|
204
|
+
For maintainer-level rationale, also read:
|
|
205
|
+
|
|
206
|
+
- `.docs-internal/architecture/virtual-decorator-runtime-semantics.md`
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Backend (Vona)
|
|
2
2
|
|
|
3
|
-
This page is the backend hub for contributors
|
|
3
|
+
This page is the backend hub for Cabloy users, contributors, and AI vibe coding workflows that need the backend side of the framework.
|
|
4
4
|
|
|
5
|
-
Vona is the backend half of
|
|
5
|
+
Vona is the backend half of Cabloy’s one-framework-system fullstack architecture.
|
|
6
6
|
|
|
7
7
|
## What Vona is responsible for
|
|
8
8
|
|
|
@@ -24,7 +24,7 @@ By default, the log directory changes by runtime environment.
|
|
|
24
24
|
Representative defaults are:
|
|
25
25
|
|
|
26
26
|
- test/development → `{project path}/.app/logs`
|
|
27
|
-
- production → `{home}
|
|
27
|
+
- production → `{home}/.vona/{project name}/logs`
|
|
28
28
|
|
|
29
29
|
This can be configured through app config or environment variables such as `LOGGER_DIR`.
|
|
30
30
|
|
|
@@ -86,10 +86,10 @@ Legacy Vona docs described creating projects from templates such as `cabloy-basi
|
|
|
86
86
|
|
|
87
87
|
That history still matters, because it explains why the Cabloy ecosystem now supports two editions:
|
|
88
88
|
|
|
89
|
-
- **Cabloy Basic**: public reference
|
|
90
|
-
- **Cabloy Start**:
|
|
89
|
+
- **Cabloy Basic**: the public framework/reference edition, including the project route created by `npm create cabloy`, with a shared frontend engineering layer and a DaisyUI + Tailwind CSS oriented UI layer in the current public examples
|
|
90
|
+
- **Cabloy Start**: the private commercial edition, accessed by cloning the licensed private repository source, with Vuetify-oriented frontend modules plus Start-specific SSR site baselines and project assets
|
|
91
91
|
|
|
92
|
-
In the current monorepo docs, do not treat these as just template names. Treat them as edition boundaries that affect frontend integration, scripts, and examples.
|
|
92
|
+
In the current monorepo docs, do not treat these as just template names. Treat them as edition boundaries that affect frontend integration, scripts, UI assumptions, and examples.
|
|
93
93
|
|
|
94
94
|
## Backend configuration reminder
|
|
95
95
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Cabloy Basic
|
|
2
2
|
|
|
3
|
-
Cabloy Basic is the public
|
|
3
|
+
Cabloy Basic is the public framework/reference edition you are reading right now.
|
|
4
4
|
|
|
5
5
|
## Repository marker
|
|
6
6
|
|
|
@@ -12,14 +12,15 @@ This marker is the quickest safe signal for docs, skills, and rules that need to
|
|
|
12
12
|
|
|
13
13
|
## Typical role
|
|
14
14
|
|
|
15
|
-
Use Cabloy Basic as the public reference for:
|
|
15
|
+
Use Cabloy Basic as the public reference edition for:
|
|
16
16
|
|
|
17
17
|
- shared architecture explanations
|
|
18
18
|
- root scripts and monorepo entrypoints
|
|
19
19
|
- Vona and Zova source browsing
|
|
20
20
|
- public CLI-backed workflows
|
|
21
21
|
- public user-facing documentation
|
|
22
|
+
- projects created with `npm create cabloy`
|
|
22
23
|
|
|
23
24
|
## Frontend bias
|
|
24
25
|
|
|
25
|
-
In the current source and docs, Cabloy Basic examples commonly align with a DaisyUI +
|
|
26
|
+
In the current source and docs, Cabloy Basic examples commonly align with a shared frontend engineering layer built on Zova, Vue, Vite, and Quasar tooling, plus a Basic-specific UI layer built with DaisyUI + Tailwind CSS. That does not mean Zova is limited to that UI stack, but it does mean docs and AI outputs should not accidentally project Vuetify-specific assumptions into Cabloy Basic unless the current source explicitly requires it.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Cabloy Start
|
|
2
2
|
|
|
3
|
-
Cabloy Start is a sibling private repository that shares the Cabloy fullstack direction while intentionally differing from Cabloy Basic.
|
|
3
|
+
Cabloy Start is the private commercial edition. It is a sibling private repository that shares the Cabloy fullstack direction while intentionally differing from Cabloy Basic.
|
|
4
4
|
|
|
5
5
|
## Repository marker
|
|
6
6
|
|
|
@@ -14,10 +14,41 @@ Use that marker before choosing examples, UI assumptions, or automation behavior
|
|
|
14
14
|
|
|
15
15
|
Use Cabloy Start as the edition-aware target when work depends on:
|
|
16
16
|
|
|
17
|
+
- direct use of the licensed private repository source
|
|
17
18
|
- Vuetify-specific frontend workflows
|
|
18
19
|
- Cabloy Start flavor names in frontend scripts
|
|
19
20
|
- modules that exist in the private Start repository but not in Basic
|
|
20
|
-
- private
|
|
21
|
+
- licensed private-repo structure and Start-specific project composition
|
|
22
|
+
- Start-specific SSR site baselines and project assets
|
|
23
|
+
|
|
24
|
+
## Get access and initialize
|
|
25
|
+
|
|
26
|
+
Cabloy Start is the private commercial edition. It does not use the default `npm create cabloy` project route.
|
|
27
|
+
|
|
28
|
+
To use Cabloy Start:
|
|
29
|
+
|
|
30
|
+
1. purchase a license and obtain repository access
|
|
31
|
+
2. clone the private repository source directly
|
|
32
|
+
3. run the edition initialization flow in the cloned project
|
|
33
|
+
|
|
34
|
+
Access surfaces:
|
|
35
|
+
|
|
36
|
+
- Purchase page: `https://cabloy.com/module/cabloy-start`
|
|
37
|
+
- Repository: `https://github.com/cabloy/cabloy-start`
|
|
38
|
+
|
|
39
|
+
Clone the repository:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
git clone git@github.com:cabloy/cabloy-start.git
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
After cloning, run:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npm run init
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
This initializes the project and installs dependencies.
|
|
21
52
|
|
|
22
53
|
## Relationship to this docs site
|
|
23
54
|
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Choosing Between Cabloy Basic and Cabloy Start
|
|
2
|
+
|
|
3
|
+
This guide helps you choose the right Cabloy edition before you start a new project, adopt a frontend UI strategy, or prepare AI workflow guidance.
|
|
4
|
+
|
|
5
|
+
## Short answer
|
|
6
|
+
|
|
7
|
+
Choose **Cabloy Basic** when you want the public framework/reference edition, the default `npm create cabloy` project route, and a faster path for open, community-oriented, or small-to-medium system development.
|
|
8
|
+
|
|
9
|
+
Choose **Cabloy Start** when you want the private commercial edition, purchase-based access to the licensed private repository source, and a stronger baseline for more complex business systems built around the Start-specific suites, SSR sites, project assets, and Vuetify UI layer.
|
|
10
|
+
|
|
11
|
+
## What stays the same in both editions
|
|
12
|
+
|
|
13
|
+
Both editions share the same Cabloy fullstack core:
|
|
14
|
+
|
|
15
|
+
- **Vona** as the backend framework
|
|
16
|
+
- **Zova** as the frontend framework
|
|
17
|
+
- suite-based modular architecture
|
|
18
|
+
- CLI-first workflows
|
|
19
|
+
- shared frontend engineering direction built around Vue, Vite, Quasar tooling, and related libraries
|
|
20
|
+
|
|
21
|
+
So the decision is not about choosing two unrelated products. It is about choosing the edition baseline that fits your delivery goals best.
|
|
22
|
+
|
|
23
|
+
## Choose Cabloy Basic when
|
|
24
|
+
|
|
25
|
+
Cabloy Basic is usually the better fit when you want:
|
|
26
|
+
|
|
27
|
+
- the public framework/reference edition
|
|
28
|
+
- the default project route created by `npm create cabloy`
|
|
29
|
+
- open-source visibility and community-friendly workflows
|
|
30
|
+
- public examples and docs that match your repo directly
|
|
31
|
+
- a UI layer aligned with DaisyUI + Tailwind CSS
|
|
32
|
+
- a faster path for small-to-medium system development
|
|
33
|
+
|
|
34
|
+
## Choose Cabloy Start when
|
|
35
|
+
|
|
36
|
+
Cabloy Start is usually the better fit when you want:
|
|
37
|
+
|
|
38
|
+
- the private commercial edition
|
|
39
|
+
- purchase-based access to the licensed private repository source
|
|
40
|
+
- direct cloning of the Start repository after authorization
|
|
41
|
+
- Start-specific suites, flavors, SSR site baselines, and project assets
|
|
42
|
+
- a UI layer aligned with Vuetify
|
|
43
|
+
- a stronger starting point for more complex business systems
|
|
44
|
+
- edition-specific rules, skills, and docs optimized for the Start repo assumptions
|
|
45
|
+
|
|
46
|
+
## The most practical decision factors
|
|
47
|
+
|
|
48
|
+
### Project creation path
|
|
49
|
+
|
|
50
|
+
- **Cabloy Basic**: create the project with `npm create cabloy`
|
|
51
|
+
- **Cabloy Start**: purchase access, clone the licensed private repository source directly, then run `npm run init`
|
|
52
|
+
|
|
53
|
+
### UI strategy
|
|
54
|
+
|
|
55
|
+
- **Cabloy Basic**: DaisyUI + Tailwind CSS
|
|
56
|
+
- **Cabloy Start**: Vuetify
|
|
57
|
+
|
|
58
|
+
### Repo and asset model
|
|
59
|
+
|
|
60
|
+
- **Cabloy Basic**: public repository and public reference materials
|
|
61
|
+
- **Cabloy Start**: private repository with Start-specific suites, SSR sites, and project assets
|
|
62
|
+
|
|
63
|
+
### AI workflow assumptions
|
|
64
|
+
|
|
65
|
+
- **Cabloy Basic**: use Basic-specific examples, flavors, modules, and UI assumptions
|
|
66
|
+
- **Cabloy Start**: use Start-specific examples, flavors, modules, SSR site baselines, and UI assumptions
|
|
67
|
+
|
|
68
|
+
This is why edition detection matters so much for AI vibe coding.
|
|
69
|
+
|
|
70
|
+
## A simple recommendation rule
|
|
71
|
+
|
|
72
|
+
Use this rule when you need a fast decision:
|
|
73
|
+
|
|
74
|
+
1. If you want the public, default, `npm create cabloy` path, choose **Cabloy Basic**.
|
|
75
|
+
2. If you want the licensed private repo with Start-specific assets, a Vuetify-based business-system baseline, and a clone-plus-`npm run init` onboarding path, choose **Cabloy Start**.
|
|
76
|
+
3. If AI workflow accuracy matters for UI generation, SSR site assumptions, or flavor-specific commands, confirm the edition before writing prompts, rules, skills, or docs.
|
|
77
|
+
|
|
78
|
+
## Read together with
|
|
79
|
+
|
|
80
|
+
- [Editions Overview](/editions/overview)
|
|
81
|
+
- [Cabloy Basic](/editions/cabloy-basic)
|
|
82
|
+
- [Cabloy Start](/editions/cabloy-start)
|
|
83
|
+
- [Edition Detection](/editions/detection)
|
|
84
|
+
- [Fullstack Quickstart](/fullstack/quickstart)
|
|
@@ -1,44 +1,107 @@
|
|
|
1
1
|
# Editions Overview
|
|
2
2
|
|
|
3
|
-
Cabloy currently
|
|
3
|
+
Cabloy currently supports two related but distinct editions:
|
|
4
4
|
|
|
5
5
|
- **Cabloy Basic**
|
|
6
6
|
- **Cabloy Start**
|
|
7
7
|
|
|
8
|
-
They share
|
|
8
|
+
They share one Cabloy fullstack architecture, but they are distributed, composed, and optimized differently.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
If you need a recommendation path, start with [Choosing Between Cabloy Basic and Cabloy Start](/editions/choosing-between-basic-and-start).
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## Shared fullstack core
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
Both editions are built around the same core direction:
|
|
15
|
+
|
|
16
|
+
- **Vona** as the backend framework
|
|
17
|
+
- **Zova** as the frontend framework
|
|
18
|
+
- suite-based modules across the stack
|
|
16
19
|
- root-level `npm run vona` and `npm run zova` entrypoints
|
|
17
20
|
- CLI-backed workflows for generation, refactoring, metadata, and verification
|
|
18
21
|
|
|
19
|
-
|
|
22
|
+
This means the editions are related fullstack baselines, not unrelated products.
|
|
23
|
+
|
|
24
|
+
## What "Basic" means
|
|
25
|
+
|
|
26
|
+
Cabloy Basic is the public framework/reference edition.
|
|
27
|
+
|
|
28
|
+
- this public repository is marked with `__CABLOY_BASIC__`
|
|
29
|
+
- projects created with `npm create cabloy` follow the Cabloy Basic route
|
|
30
|
+
- the public docs and examples in this repo use Cabloy Basic as the default baseline
|
|
31
|
+
|
|
32
|
+
Cabloy Basic is the open-source community edition and is optimized for public reference, learning, and fast development workflows.
|
|
33
|
+
|
|
34
|
+
## What "Start" means
|
|
35
|
+
|
|
36
|
+
Cabloy Start is the private commercial edition.
|
|
37
|
+
|
|
38
|
+
- the private repository is marked with `__CABLOY_START__`
|
|
39
|
+
- users first purchase a license and obtain repository access, then clone the private repository source directly
|
|
40
|
+
- after cloning, the project is initialized through the Start edition workflow
|
|
41
|
+
- Start provides its own suites, flavors, SSR sites, and project assets for that edition
|
|
42
|
+
|
|
43
|
+
Cabloy Start is optimized as a commercial baseline for more complex business systems while staying on the same Cabloy fullstack direction.
|
|
44
|
+
|
|
45
|
+
## Architecture layering
|
|
46
|
+
|
|
47
|
+
Most of the frontend engineering layer is shared, while the edition-specific UI layer differs.
|
|
48
|
+
|
|
49
|
+
### Shared frontend engineering layer
|
|
50
|
+
|
|
51
|
+
Across editions, Zova uses the same frontend framework direction and engineering tooling, including:
|
|
52
|
+
|
|
53
|
+
- Vue
|
|
54
|
+
- Vite
|
|
55
|
+
- Quasar tooling such as `quasar dev` and `quasar build`
|
|
56
|
+
- TanStack libraries where applicable
|
|
57
|
+
|
|
58
|
+
Here, Quasar is used for engineering tooling rather than as the edition UI component library.
|
|
59
|
+
|
|
60
|
+
### Edition-specific UI layer
|
|
61
|
+
|
|
62
|
+
The UI component strategy diverges by edition:
|
|
63
|
+
|
|
64
|
+
- **Cabloy Basic**: DaisyUI + Tailwind CSS
|
|
65
|
+
- **Cabloy Start**: Vuetify
|
|
66
|
+
|
|
67
|
+
This difference affects not only UI code, but also module composition, frontend flavor assumptions, SSR site baselines, examples, and AI workflow guidance.
|
|
68
|
+
|
|
69
|
+
## Edition-specific assets
|
|
70
|
+
|
|
71
|
+
The editions intentionally diverge in several surfaces:
|
|
72
|
+
|
|
73
|
+
- UI layer assumptions
|
|
74
|
+
- frontend flavor names
|
|
75
|
+
- suite and module composition
|
|
76
|
+
- admin/web SSR site baselines
|
|
77
|
+
- licensed private-repo structure and Start-specific project assets
|
|
78
|
+
- rules, skills, and docs used for AI vibe coding
|
|
79
|
+
|
|
80
|
+
For example:
|
|
81
|
+
|
|
82
|
+
- **Cabloy Basic** provides the `cabloy-basic` suites and the `cabloyBasicAdmin` / `cabloyBasicWeb` Zova flavors
|
|
83
|
+
- **Cabloy Start** provides the `cabloy-start` suites and the `cabloyStartAdmin` / `cabloyStartWeb` Zova flavors
|
|
20
84
|
|
|
21
|
-
|
|
85
|
+
## Why the repo markers matter
|
|
22
86
|
|
|
23
|
-
|
|
87
|
+
The edition markers are not just labels for humans.
|
|
24
88
|
|
|
25
|
-
|
|
26
|
-
- baseline fullstack reference implementation
|
|
27
|
-
- current default examples in this public monorepo
|
|
89
|
+
`__CABLOY_BASIC__` and `__CABLOY_START__` help tools, docs, and AI workflows choose the correct assumptions for:
|
|
28
90
|
|
|
29
|
-
|
|
91
|
+
- UI component usage
|
|
92
|
+
- flavor selection
|
|
93
|
+
- module availability
|
|
94
|
+
- SSR site expectations
|
|
95
|
+
- rules, skills, and verification guidance
|
|
30
96
|
|
|
31
|
-
|
|
32
|
-
- created from `npm create cabloy`
|
|
33
|
-
- uses a different UI strategy centered on Vuetify
|
|
34
|
-
- contains different Vona/Zova modules and value-add project structure
|
|
97
|
+
This is why the two editions should be identified explicitly instead of being treated as interchangeable.
|
|
35
98
|
|
|
36
99
|
## Documentation rule
|
|
37
100
|
|
|
38
|
-
Write shared explanations once.
|
|
101
|
+
Write shared explanations once. Split or annotate only when a workflow changes because of:
|
|
39
102
|
|
|
40
103
|
- UI library assumptions
|
|
41
104
|
- frontend flavor names
|
|
42
105
|
- different modules or assets
|
|
43
|
-
-
|
|
44
|
-
- edition-specific scripts or
|
|
106
|
+
- distribution and authorization model
|
|
107
|
+
- edition-specific scripts, generated outputs, or AI workflow guidance
|
|
@@ -26,8 +26,9 @@ Zova is not tied to one UI library.
|
|
|
26
26
|
|
|
27
27
|
That flexibility matters directly for Cabloy’s edition model:
|
|
28
28
|
|
|
29
|
-
- **
|
|
30
|
-
- **Cabloy
|
|
29
|
+
- **Shared frontend engineering layer**: both editions follow the same Zova-centered frontend direction, with Vue, Vite, Quasar tooling, and related libraries
|
|
30
|
+
- **Cabloy Basic UI layer**: current public docs and examples align with DaisyUI + Tailwind CSS
|
|
31
|
+
- **Cabloy Start UI layer**: the private commercial edition aligns with Vuetify-oriented frontend modules, workflows, and SSR site baselines
|
|
31
32
|
|
|
32
33
|
So docs and skills must separate shared Zova principles from edition-specific UI assumptions.
|
|
33
34
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Frontend (Zova)
|
|
2
2
|
|
|
3
|
-
This page is the frontend hub for contributors
|
|
3
|
+
This page is the frontend hub for Cabloy users, contributors, and AI vibe coding workflows that need the frontend side of the framework.
|
|
4
4
|
|
|
5
|
-
Zova is the frontend half of
|
|
5
|
+
Zova is the frontend half of Cabloy’s one-framework-system fullstack architecture.
|
|
6
6
|
|
|
7
7
|
## What Zova is responsible for
|
|
8
8
|
|
|
@@ -26,7 +26,8 @@ For contributor and automation workflows in this repository, prefer this order:
|
|
|
26
26
|
|
|
27
27
|
Frontend work is where Cabloy Basic and Cabloy Start differ most clearly.
|
|
28
28
|
|
|
29
|
-
- **
|
|
30
|
-
- **Cabloy
|
|
29
|
+
- **Shared frontend engineering layer**: both editions follow the same Zova-centered frontend direction, with Vue, Vite, Quasar tooling, and related libraries.
|
|
30
|
+
- **Cabloy Basic UI layer**: current public docs and examples align with DaisyUI + Tailwind CSS.
|
|
31
|
+
- **Cabloy Start UI layer**: the private commercial edition aligns with Vuetify and ships different frontend modules, SSR site baselines, and project assets.
|
|
31
32
|
|
|
32
33
|
Because of this, automation and docs should always detect the active edition before recommending page-level, component-level, or UI-library-specific work.
|
|
@@ -28,8 +28,9 @@ When working in this framework repository, the active edition is **Cabloy Basic*
|
|
|
28
28
|
That matters because edition choice affects:
|
|
29
29
|
|
|
30
30
|
- frontend flavor names
|
|
31
|
-
- UI-
|
|
32
|
-
- available modules and
|
|
31
|
+
- UI-layer assumptions
|
|
32
|
+
- available modules, layouts, and SSR site baselines
|
|
33
|
+
- project assets and examples
|
|
33
34
|
- which examples in the docs match the current repo directly
|
|
34
35
|
|
|
35
36
|
Read together with:
|
|
@@ -66,12 +66,12 @@ cd zova && npm run build:rest:cabloyBasicAdmin
|
|
|
66
66
|
|
|
67
67
|
## Cabloy Start
|
|
68
68
|
|
|
69
|
-
The sibling `cabloy-start` repository uses Start-specific flavors such as:
|
|
69
|
+
The sibling `cabloy-start` repository is the private commercial edition and uses Start-specific flavors such as:
|
|
70
70
|
|
|
71
71
|
- `cabloyStartAdmin`
|
|
72
72
|
- `cabloyStartWeb`
|
|
73
73
|
|
|
74
|
-
Those commands are not driven by the current Basic repo root wrappers, so verify the Start repo’s `package.json
|
|
74
|
+
Those commands are not driven by the current Basic repo root wrappers, so verify the Start repo’s `package.json`, suites, SSR site baselines, and project assets before documenting or automating them.
|
|
75
75
|
|
|
76
76
|
## Workflow guidance
|
|
77
77
|
|