|
13 | 13 |
|
14 | 14 | **ccmjs** is a lightweight JavaScript framework that implements the **Client-side Component Model (CCM)** — an architecture for building modular, reusable, and dynamically composed web applications. |
15 | 15 |
|
16 | | -Components are loaded, configured, and composed dynamically at runtime — even across different framework and component versions. |
| 16 | +Components are loaded, configured, and instantiated dynamically at runtime — even across different framework and component versions. |
17 | 17 |
|
18 | 18 | ## 🚀 Quick Start |
19 | 19 |
|
@@ -62,66 +62,21 @@ ccm.start(component, config, document.body); |
62 | 62 |
|
63 | 63 | This loads the quiz component dynamically, instantiates it, and renders it into the page. |
64 | 64 |
|
65 | | -## 🧠 What is CCM? |
| 65 | +## ✨ Beyond the Basics |
66 | 66 |
|
67 | | -The **Client-side Component Model (CCM)** is an architectural approach for building web applications from independent, reusable components that are composed at runtime. |
| 67 | +ccmjs also provides: |
68 | 68 |
|
69 | | -Each component |
| 69 | +- 🔍 Full code transparency (inspect original source at runtime) |
| 70 | +- 🗄️ Flexible data management (in-memory, local, or remote) |
| 71 | +- 🔐 Security by design (isolation, SRI, encapsulation) |
| 72 | +- 🧩 Dynamic composition of complex applications |
| 73 | +- 🌐 Integration of independently developed components |
70 | 74 |
|
71 | | -- defines its own configuration schema |
72 | | -- declares dependencies declaratively |
73 | | -- can be loaded dynamically |
74 | | -- runs in an isolated runtime environment |
| 75 | +On top of that, ccmjs can be used to build: |
75 | 76 |
|
76 | | -This allows applications to be composed from independently evolving components while maintaining compatibility across versions. |
77 | | - |
78 | | -**ccmjs** provides the reference implementation of this model in JavaScript. |
79 | | - |
80 | | -## 🎯 Why CCM? |
81 | | - |
82 | | -Most frontend frameworks rely on |
83 | | - |
84 | | -- a single global runtime |
85 | | -- a static dependency graph |
86 | | -- a build pipeline |
87 | | -- no shared global runtime state |
88 | | - |
89 | | -ccmjs instead focuses on **runtime composition**. |
90 | | - |
91 | | -Components can be |
92 | | - |
93 | | -- loaded on demand |
94 | | -- configured declaratively |
95 | | -- instantiated dynamically |
96 | | -- isolated by version |
97 | | - |
98 | | -This enables |
99 | | - |
100 | | -- long-term compatibility |
101 | | -- integration of independently developed components |
102 | | -- dynamic applications that evolve over time |
103 | | - |
104 | | -## ⭐ Key Features |
105 | | - |
106 | | -- Runtime component loading |
107 | | -- Declarative configuration (JSON-based) |
108 | | -- Automatic dependency resolution |
109 | | -- Version isolation (framework + components) |
110 | | -- Multiple versions can coexist |
111 | | -- No build step required |
112 | | -- Fully client-side execution |
113 | | -- Instance-level DOM isolation (Shadow DOM) |
114 | | - |
115 | | -## 🧩 Core API |
116 | | - |
117 | | -| Function | Purpose | |
118 | | -|--------|--------| |
119 | | -| `ccm.load()` | Load resources dynamically | |
120 | | -| `ccm.component()` | Register or load components | |
121 | | -| `ccm.instance()` | Create component instances | |
122 | | -| `ccm.start()` | Create and start component instances | |
123 | | -| `ccm.store()` | Create datastore accessors | |
124 | | -| `ccm.get()` | One-time data retrieval | |
| 77 | +- 🧱 Digital Makerspaces (for non-developers) |
| 78 | +- 💾 Data-sovereign applications |
| 79 | +- 🖥️ Modular web-based environments (e.g. web desktops) |
125 | 80 |
|
126 | 81 | ## 📚 Documentation |
127 | 82 |
|
|
0 commit comments