You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs: improve README with installation, quick start, and navigation
Add critical onboarding sections to help developers evaluate and get started with Ensemble:
- Installation instructions for all packages
- Quick start example with React integration
- Packages overview table
- Real-time collaboration section highlighting the new package
- Table of contents for navigation
- Examples & demos section
- Documentation hub with links to all package READMEs
Also fix broken documentation links (removed references to non-existent src/ files).
The README now follows progressive disclosure - practical usage first, then architectural deep-dives.
Ensemble is a frontend framework for building complex applications using the actor model. It enables developers to organize application logic into independent, composable actors that communicate via message passing. Actors can run on any thread (main or a worker) without coupling the actor topology to execution context, allowing for flexible performance optimization and clear separation of concerns.
6
10
11
+
## Table of Contents
12
+
13
+
-[Overview](#overview)
14
+
-[Project Status](#project-status)
15
+
-[Installation](#installation)
16
+
-[Quick Start](#quick-start)
17
+
-[Packages](#packages)
18
+
-[The Challenge](#the-challenge)
19
+
-[Core Architecture](#core-architecture)
20
+
-[Actors and the Actor System](#actors-and-the-actor-system)
21
+
-[ActorClients: The Developer Interface](#actorclients-the-developer-interface)
22
+
-[Actor System: Lifecycle and Dependency Management](#actor-system-lifecycle-and-dependency-management)
23
+
-[How It Works: The Actor Model](#how-it-works-the-actor-model)
Ensemble is an experiment framework for folks who have run into compositional/multi-threading challenges with traditional frameworks and tools. If you're building a typical CRUD app or small-to-medium application, established patterns and tools likely serve you better. This framework is designed for teams working on large-scale or innovative frontends where maintaining development velocity as complexity grows becomes a primary concern.
10
37
38
+
## Project Status
39
+
40
+
**Version:** 0.1.0 (Initial Release)
41
+
**Status:** ⚠️ Experimental - APIs may change
42
+
43
+
Ensemble is a new framework actively being developed. While the core concepts are solid and the implementation is functional, you should expect:
44
+
- API changes between minor versions
45
+
- Ongoing performance optimization
46
+
- Expanding documentation and examples
47
+
48
+
Not recommended for production use yet, but perfect for experimentation and feedback.
|[@d-buckner/ensemble-core](./packages/core)| 0.1.0 | Core actor framework with threading support |
119
+
|[@d-buckner/ensemble-react](./packages/react)| 0.1.0 | React hooks and bindings |
120
+
|[@d-buckner/ensemble-solidjs](./packages/solidjs)| 0.1.0 | SolidJS primitives and bindings |
121
+
|[@d-buckner/ensemble-vite-plugin](./packages/vite-plugin)| 0.1.0 | Vite plugin for Web Worker threading |
122
+
|[@d-buckner/ensemble-collaboration](./packages/collaboration)| 0.1.0 | Real-time collaboration with Automerge CRDTs |
123
+
11
124
## The Challenge
12
125
For large-scale and innovative frontends, some fundamental architectural challenges can impact developer velocity:
13
126
@@ -41,8 +154,6 @@ Actors are the fundamental building blocks of a Ensemble application. Each actor
41
154
42
155
The key insight is that while actors may depend on each other logically, they're not bound to the same execution context. An actor running in a worker thread can depend on an actor in the main thread, or vice versa. This separation allows you to optimize performance without restructuring your application logic.
43
156
44
-
**See [src/actor/README.md](./src/actor/README.md) for actor implementation details.**
45
-
46
157
### ActorClients: The Developer Interface
47
158
48
159
When you need to interact with an actor, you don't get direct access to the actor implementation. This is especially important when actors run in different execution contexts. Instead, you work with an **ActorClient**, a strongly typed proxy that knows how to communicate with the actor regardless of where it's running.
@@ -122,7 +233,52 @@ Each thread (main or worker) has exactly one **ThreadBus** instance responsible
122
233
123
234
By centralizing the actor system knowledge on the main thread, worker threads can remain lightweight. They don't need to understand the entire application topology. Instead, they receive targeted messages with actor IDs and simply route to their local actors. This keeps the system scalable even as your actor system grows.
124
235
125
-
**See [src/busses/README.md](./src/busses/README.md) for message bus implementation details.**
236
+
## Real-Time Collaboration
237
+
238
+
The `@d-buckner/ensemble-collaboration` package provides CRDT-based collaboration using Automerge:
The CRDT document **is** the actor state directly - no wrapper objects. Changes sync automatically through effects, and the actor handles transport abstraction so your code stays clean and focused on business logic.
280
+
281
+
See the [collaboration package README](./packages/collaboration/README.md) for complete setup instructions and server configuration.
126
282
127
283
## Key Design Principles
128
284
@@ -131,3 +287,42 @@ By centralizing the actor system knowledge on the main thread, worker threads ca
131
287
3.**Scalability**: Centralized routing keeps workers lightweight and focused
132
288
4.**Type safety**: Strong typing throughout the message passing system
133
289
5.**Consistency**: State updates are events, keeping the API uniform
290
+
291
+
## Examples & Demos
292
+
293
+
Working examples are available in the `demos/` directory:
294
+
295
+
**React:**
296
+
-[Counter](./demos/react/counter) - Basic actor with React hooks
297
+
-[Collaboration](./demos/react/collaboration) - Real-time collaborative todo list with CRDT sync
298
+
299
+
**SolidJS:**
300
+
-[Counter](./demos/solidjs/counter) - Basic actor with SolidJS primitives
0 commit comments