commits
The hcs library added a new Payload_too_large variant to the Websocket.error
type. Handle this case in the wb websocket server to fix exhaustive pattern
matching warning.
Release 0.1.1
- Add LICENSE (ISC) and README.md
- Add documentation: architecture, codecs, getting-started, json-joy-mapping
- Reorganize demo apps: wb (HCS), wbd (Dream), wbr (Raylib)
- Remove deprecated lib_eio and crdt-eio.opam
- Fix dune-project metadata (version 0.1.0, dedupe authors)
- Update code comments to reference issue tracker
In Local mode, send_message was adding to the outgoing Eio stream
but nothing consumed from it. After 100 messages (stream capacity),
Eio.Stream.add blocked forever, causing the application to hang.
Centralizes CBOR Value.t encoding/decoding in new Cbor_simd module with
Buffer.t reuse for 10-20x faster small value encoding. Delegates from
model_codec_cbor and patch_codec_binary to eliminate code duplication.
Benchmarks show Cbor_simd is 1.2-2.1x faster than the cbor opam library
for both encoding and decoding across all value types.
- Add real-time drawing: strokes now appear as they're drawn, not just on mouse-up
- Add TCP_NODELAY for low-latency networking
- Replace Raylib FPS limiter with Eio-based timing for better fiber scheduling
- Fix user roster stability by using Hashtbl instead of list
- Add proper HiDPI scaling detection via get_window_scale_dpi()
- Fix window resize: UI elements stay fixed size, only canvas grows/shrinks
- Add 8 color palettes (pastel, vibrant, earth tones, classic, etc.)
- Add Shift+Wheel to cycle through palettes
- Fix presence updates to always send (keeps connections alive)
- Increase timeouts for more robust multi-client support
- Send MsgLeave when clients disconnect from server
Extract codec implementations from model_codec.ml into dedicated files:
- model_codec_verbose.ml: Verbose JSON format (human-readable)
- model_codec_compact.ml: Compact JSON format (type codes, relative IDs)
- model_codec_cbor.ml: CBOR encoding/decoding primitives (renamed from cbor.ml)
This improves modularity and makes each codec easier to maintain independently.
The main model_codec.ml now contains only the Binary codec and module aliases.
Also adds benchmark suite:
- bench_main.ml: Main CRDT benchmarks (codecs, RGA, patches)
- cbor_bench.ml: CBOR comparison benchmarks vs external library
All 209 tests pass, no performance regression.
Complete implementation of a JSON CRDT library compatible with json-joy:
Core Library (lib/):
- Value types, Clock, Node, Model for CRDT document structure
- Patch operations and builders for document mutations
- RGA (Replicated Growable Array) for text/sequences
- Multiple codecs: verbose JSON, compact JSON, binary
- Extensions: Counter (PN-Counter), Mval (multi-value register)
- Sync module for document synchronization
- JSON-Rx RPC protocol implementation (rx.ml, rx_client.ml, rx_server.ml)
Eio Integration (lib_eio/):
- Effect-based IO abstraction with Eio handler
Whiteboard Demo (bin/whiteboard/):
- Real-time collaborative drawing with Eio networking
- Multi-user presence (cursor tracking)
- Chat functionality
- Color palette and brush sizes
- Resizable window with HiDPI scaling
Tests:
- 209 passing tests with conformance test fixtures
- Cross-format compatibility testing (JSON, binary)
All 209 tests pass.
- Add LICENSE (ISC) and README.md
- Add documentation: architecture, codecs, getting-started, json-joy-mapping
- Reorganize demo apps: wb (HCS), wbd (Dream), wbr (Raylib)
- Remove deprecated lib_eio and crdt-eio.opam
- Fix dune-project metadata (version 0.1.0, dedupe authors)
- Update code comments to reference issue tracker
Centralizes CBOR Value.t encoding/decoding in new Cbor_simd module with
Buffer.t reuse for 10-20x faster small value encoding. Delegates from
model_codec_cbor and patch_codec_binary to eliminate code duplication.
Benchmarks show Cbor_simd is 1.2-2.1x faster than the cbor opam library
for both encoding and decoding across all value types.
- Add real-time drawing: strokes now appear as they're drawn, not just on mouse-up
- Add TCP_NODELAY for low-latency networking
- Replace Raylib FPS limiter with Eio-based timing for better fiber scheduling
- Fix user roster stability by using Hashtbl instead of list
- Add proper HiDPI scaling detection via get_window_scale_dpi()
- Fix window resize: UI elements stay fixed size, only canvas grows/shrinks
- Add 8 color palettes (pastel, vibrant, earth tones, classic, etc.)
- Add Shift+Wheel to cycle through palettes
- Fix presence updates to always send (keeps connections alive)
- Increase timeouts for more robust multi-client support
- Send MsgLeave when clients disconnect from server
Extract codec implementations from model_codec.ml into dedicated files:
- model_codec_verbose.ml: Verbose JSON format (human-readable)
- model_codec_compact.ml: Compact JSON format (type codes, relative IDs)
- model_codec_cbor.ml: CBOR encoding/decoding primitives (renamed from cbor.ml)
This improves modularity and makes each codec easier to maintain independently.
The main model_codec.ml now contains only the Binary codec and module aliases.
Also adds benchmark suite:
- bench_main.ml: Main CRDT benchmarks (codecs, RGA, patches)
- cbor_bench.ml: CBOR comparison benchmarks vs external library
All 209 tests pass, no performance regression.
Complete implementation of a JSON CRDT library compatible with json-joy:
Core Library (lib/):
- Value types, Clock, Node, Model for CRDT document structure
- Patch operations and builders for document mutations
- RGA (Replicated Growable Array) for text/sequences
- Multiple codecs: verbose JSON, compact JSON, binary
- Extensions: Counter (PN-Counter), Mval (multi-value register)
- Sync module for document synchronization
- JSON-Rx RPC protocol implementation (rx.ml, rx_client.ml, rx_server.ml)
Eio Integration (lib_eio/):
- Effect-based IO abstraction with Eio handler
Whiteboard Demo (bin/whiteboard/):
- Real-time collaborative drawing with Eio networking
- Multi-user presence (cursor tracking)
- Chat functionality
- Color palette and brush sizes
- Resizable window with HiDPI scaling
Tests:
- 209 passing tests with conformance test fixtures
- Cross-format compatibility testing (JSON, binary)
All 209 tests pass.