A Rust and TypeScript library for merging conflicting text edits without manual intervention.
http://schmelczer.dev/reconcile
collaborative-editingcrdtdiff3operational-transformationotrustsyncsynchronizationtexttext-editortypescriptwasm
| .github/workflows | ||
| backend | ||
| plugin | ||
| .gitignore | ||
| bump-version.sh | ||
| manifest.json | ||
| README.md | ||
VaultLink self-hosted Obsidian sync plugin
Install nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bashnvm install 20nvm use 20- Optionally set the system-wide default:
nvm alias default 20
Set up Rust
- Install
rustup:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh sudo apt install llvm -yrustup self updaterustup updaterustup install nightlyrustup default nightlyrustup component add llvm-tools-previewcargo install cargo-generate cargo-fuzz cargo-insta rustfilt cargo-binutils- Install
wasm-pack:curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh cargo install cargo-insta sqlx-cli cargo-edit
Publish new version
./bump-version.sh patch
Update HTTP API TS bindings
npm install -g openapi-typescript
openapi-typescript http://localhost:3030/api.json --output plugin/src/services/types.ts
## Todos
- Add users to vaults
- Websocket for db updates
- async read body
- e2e tests
- add clap
- add auth middleware
- shard db per user
- update card title max width
- retry
- CI for:
- publish reconcile
- cross-platform build server
- run load test on server
- build and publish plugin with openapi types
todo: enable
[workspace.lints.clippy]
single_call_fn = { level = "allow", priority = 1 }
absolute_paths = { level = "allow", priority = 1 }
arithmetic_side_effects = { level = "allow", priority = 1 }
similar_names = { level = "allow", priority = 1 }
self_named_module_files = { level = "allow", priority = 1 }
single_char_lifetime_names = { level = "allow", priority = 1 }
missing_docs_in_private_items = { level = "allow", priority = 1 }
question_mark_used = { level = "allow", priority = 1 }
implicit_return = { level = "allow", priority = 1 }
pedantic = { level = "warn", priority = 0 }
cargo = { level = "warn", priority = 0 }