diff --git a/README.md b/README.md
index 170d7e50b..31402029f 100644
--- a/README.md
+++ b/README.md
@@ -7,8 +7,11 @@
Loro
-Sync state easily with CRDTs
+
+Reimagine state management with CRDTs 🦜
+Make your app state synchronized and collaborative effortlessly.
+
@@ -18,14 +21,16 @@ Sync state easily with CRDTs
-> **Notice**: The current API and encoding schema of Loro are subject to change. It is not recommended for use in production environments at this time.
+> **Notice**: The current API and encoding schema of Loro are **experimental** and **subject to change**.
Loro is a CRDTs(Conflict-free Replicated Data Types) library that allows you to persist and sync state easily. It is designed to make building [local-first apps][local-first] easier.
-**What are CRDTs**? Conflict-free Replicated Data Types (CRDTs) are data structures that enable automatic conflict resolution. It allows users to make changes together, in real-time or asynchronously, without conflicting or relying on a central server.
-
# Features
+> **You can build time travel feature easily with Loro**.
+
+[![202311072214(2)](https://github.com/loro-dev/loro/assets/18425020/5f9b5f50-d6d8-4557-a95f-9050b8027e22)](https://github.com/zxch3n/loro-react-flow-example)
+
## Supported CRDT Algorithms
- **Common Data Structures**: Support for `List` for ordered collections, LWW(Last Write Win) `Map` for key-value pairs, `Tree` for hierarchical data, and `Text` for rich text manipulation, enabling various applications.
@@ -33,22 +38,23 @@ Loro is a CRDTs(Conflict-free Replicated Data Types) library that allows you to
- **Peritext-like Rich Text CRDT**: Drawing inspiration from [Peritext](https://www.inkandswitch.com/peritext/), Loro manages rich text CRDTs that excel at merging concurrent rich text style edits, maintaining the original intent of users input as much as possible. Details on this will be explored further in an upcoming blog post.
- **Moveable Tree**: For applications requiring directory-like data manipulation, Loro utilizes the algorithm from [*A Highly-Available Move Operation for Replicated Trees*](https://ieeexplore.ieee.org/document/9563274), which simplifies the process of moving hierarchical data structures.
-## Special Powers of Loro
+## Advanced Features in Loro
- **Preserve Editing History**
- With Loro, you can track changes effortlessly as it records the editing history with low overhead.
- This feature is essential for audit trails, undo/redo functionality, and understanding the evolution of your data over time.
- **Time Travel Through History**
- It allows users to compare and merge manually when needed, although CRDTs typically resolve conflicts well.
+- **High Performance**
+ - [See benchmarks](https://www.loro.dev/docs/performance).
## Features Provided by CRDTs
-- **High Performance**
-- **Decentralized Synchronization**: Loro allows your app's state can be synced via p2p connections.
-- **Automatic Merging**: Say goodbye to merge conflicts. Loro guarantees eventual consistency, automating the merging of concurrent changes.
-- **Local Availability**: Data is persistently available on users' devices, ensuring offline functionality and real-time responsiveness.
+- **Decentralized Synchronization**: Loro allows your app's state synced via p2p connections.
+- **Automatic Merging**: CRDTs guarantee strong eventual consistency by automating the merging of concurrent changes.
+- **Local Availability**: Data can be persisted on users' devices, supporting offline functionality and real-time responsiveness.
- **Scalability**: Effortlessly scale your application horizontally thanks to the inherently distributed nature of CRDTs.
-- **Delta Updates**: Loro has out-of-the-box support for delta updates.
+- **Delta Updates**
# Credits
diff --git a/loro-js/tests/basic.test.ts b/loro-js/tests/basic.test.ts
index e9ae6a15c..bb99c7d8d 100644
--- a/loro-js/tests/basic.test.ts
+++ b/loro-js/tests/basic.test.ts
@@ -24,7 +24,7 @@ it("basic example", () => {
map: { key: "value" }
});
- // delete 1 element at index 0
+ // delete 2 elements at index 0
list.delete(0, 2)
expect(doc.toJson()).toStrictEqual({
list: ["C"],