Contribution
Levl’s software stack includes:
- SolidJS: A UI framework that looks very similar to React but is vastly superior in terms of performance and developer experience. A smooth learning curve for React developers.
- Yjs: A CRDT framework that’s used as a storage and network backend. See SharedStore for more.
Plugins
Section titled “Plugins”The ./app directory contains the core elements of the UI. This includes the initialization logic,
connections, sidebar, etc.
The logic for user-facing functionality is expected to live under ./plugins/ in a more modular
form.
A plugin has both server and client parts, and so it must be loaded on both sides for it to work.
SharedStore
Section titled “SharedStore”The entire persistence and network stack is based on a custom class called SharedStore. Every plugin gets one of its own, and every contributor also gets one.
The idea is that a plugin (running on either the server or the client) only has to care about presenting and manipulating its state and nothing else.
It has the following features:
- Expose a simple javascript object as state.
- Maintain synchronization of this object state across the network.
- Provide a reactive (SolidJS signal based) layer that updates the UI in real time on any changes to this object.
Paths of Interest
Section titled “Paths of Interest”| Location | Description |
|---|---|
./cli.ts | the levl command |
./app | the app (i.e. GUI client) |
./core | server, client and plugins infra |
./plugins | see plugins |
./extras/docs | the docs container (what you see now) |