Welcome to 🌈 markdown.party 🌈
markdown-party/mono
is a distributed collaborative Markdown editor, based on a replicated log of
events. Multiple abstractions are implemented, which replicate events on multiple sites. The project
makes heavy use of Kotlin coroutines, to allow
non-blocking concurrent communications with many replicas. It implements some tree-like and sequence
CRDTs to replicate its state.
The library documentation can be found on GitHub Pages.
Many snippets from the walk-through can be found in the
samples/walkthrough
module. Make sure to check them out and run them on your machine, to get a feel of how the library works !
- Introduction and basics
- The low-level event log API
- Integrations and websockets
- Example : adding a move operation for cursors
This project uses Kotlin 1.6.21 and is built with Gradle. To run the unit tests locally, please proceed as follows :
# Clone the repository locally.
> git clone [email protected]:markdown-party/mono.git && cd mono
# Run Gradle tests.
> ./gradlew check
# Run the markdown editor frontend and backend. You'll have to edit the configuration in the
# file "markdown/markdown-frontend-compose/src/jsMain/resources/config.js" to point to your localhost
# rather than the production server.
> ./gradlew markdown:markdown-backend:run
> ./gradlew markdown:markdown-frontend-compose:jsBrowserRun
# Alternatively, if you have Docker Compose installed, you can run both the backend and the frontend
# locally as follows :
#
# > ./run-local.sh
#
# The frontend will be available on http://localhost:8080, and the backend on http://localhost:8081.
Here's how you should use the project :
Use-case | Relevant module(s) |
---|---|
I want to use a Markdown editor. | Go to markdown.party ! |
I want to replicate Markdown / Trees, but don't want a GUI. | markdown , echo , (echo-core ) |
I want to create a custom CRDT and replicate it. | echo-ktor-xxx , echo , (echo-core ) |
I only need a log of events which computes an aggregate. | echo-core |
I'm developing this project as part of my Bachelor thesis at HEIG-VD. If, like me, you like distributed systems, Kotlin, coroutines or reactive UI frameworks, I'd love to hear from you at [email protected] ✌️