All notable changes to Yorkie JS SDK will be documented in this file.
The format is based on Keep a Changelog, and Yorkie JS SDK adheres to Semantic Versioning.
- Replace maxCreatedAtMap with version vector for causal-concurrent operations by @chacha912 in #932
- Enhance webhook tests and error handling for authentication by @chacha912 in #930
- Preserve Detached Client's Lamport in Version Vector by @JOOHOJANG in #931
- Improve Version Vector Handling for Legacy SDK and Snapshots by @chacha912 in #933
- Add keepalive option in client.deactivate by @JOOHOJANG in #928
- Improve GC for deactivated client's nodes by @JOOHOJANG in #926
- Add dynamic token refresh and authentication error handling by @chacha912 in #911
- Fix tests for event batch publisher implementation by @chacha912 in #924
- Modify Snapshot Event to publish updated local changes by @devleejb in #923
- Implement
InitialRoot
option for Document attachment by @raararaara in #913 - Add doc.getStats for debugging purpose by @hackerwins in #920
- Export VersionVector by @chacha912 in #917
- Introducing version vector to solve GC problem by @JOOHOJANG in #899
- Update target to ES2020 and replace Long with bigint by @hackerwins in #912
- Add configurable retry mechanism to broadcast interface by @gwbaik9717 in #901
- Ensure
find
andindexOf
perform splay by @m4ushold in #904 - Restrict presence object type to JSON serializable values by @gwbaik9717 in #898
- Automate Linting with Husky and lint-staged to Prevent CI Failures by @gwbaik9717 in #896
- Introduce broadcast API for event sharing by @gwbaik9717 in #884
- Update npm-publish command for sdk by @hackerwins in #886
- Update MAINTAINING.md by @chacha912 in #887
- Lock version of
@codemirror/view
to prevent potential issues with Korean character input by @devleejb in #890
- Update example version to v0.4.28 by @chacha912 in #877
- Unify error throwing methods by @gwbaik9717 #878
- Update docker compose command to V2 by @kokodak in #879
- Introduce monorepo to manage packages using pnpm @gwbaik9717 #880
- Improve performance for creating crdt.TreeNode by @hackerwins in #875
- Add Root-Only Filter Feature in History Tab by @gwbaik9717 in #872
- Update example version to v0.4.27 by @chacha912 in #870
- Adjust Default LogLevel to Warn by @gwbaik9717 in #871
- Add taskQueue to handle each request one by one by @hackerwins in #862
- Remove Custom JSDOM by @hackerwins in #864
- Remove vitest-environment-custom-jsdom from dependencies by @blurfx in #866
- Remove jsdom from dependencies by @blurfx in #867
- Handle retry for syncLoop and watchLoop by @hackerwins in #863
- Handle ErrClientNotActivated and ErrClientNotFound by @hackerwins in #865
- Handle local changes correctly when receiving snapshot by @hackerwins in #868
- Update example version to v0.4.25 by @chacha912 in #858
- Remove node from indexes during GC by @hackerwins in #860
- Add
doc.subscribe('status', callback)
function by @chacha912 in #828
- Use module import style for Protobuf by @hackerwins in #853
- Remove reattach test code by @hackerwins in #855
- Show removed node in devtools by @chacha912 in #835
- Update examples version to v0.4.22 by @chacha912 in #845
- Fix miscalculation of tree size in concurrent editing by @hackerwins in #846
- Add RHTNode removal to converter for consistency by @raararaara in #842
- Update examples version to v0.4.21 by @chacha912 in #840
- Simplify type checking for style attributes in TreeStyleOpInfo by @chacha912 in #841
- Add conditional checks for
window
object by @chacha912 in #839
- Update example version to v0.4.20 by @chacha912 in #822
- Remove skip from style-style-test by @hackerwins in #829
- Include all nodes in tree.toJSInfoForTest by @chacha912 in #832
- Add ServerSeq into ChangeInfo by @hackerwins in #833
- Prevent remote-change events in RealtimeSyncOff mode by @chacha912 in #824
- Fix invalid error message in CRDTTreePos by @hackerwins in #830
- Fix incorrect tree snapshot encoding/decoding by @hackerwins in #836
- Fix incorrect indexes in TreeChange by @chacha912 in #837
- Implement RHT.GC by @raararaara in #815
- Update examples version to v0.4.19 by @chacha912 in #812
- Enhance type inference in Document.subscribe by @chacha912 in #814
- Apply GCPair to TreeNode, TextNode by @raararaara in #819
- Handle Tree.toXML to return proper XML string by @raararaara in #805
- Avoid unnecessary syncs in push-only syncmode by @chacha912 in #818
- Add Tree concurrency tests by @justiceHui, @hackerwins in #792
- Update examples version to v0.4.18 by @chacha912 in #785
- Remove Client.subscribe by @chacha912 in #789
- Replace
benchmark.js
withvitest bench
by @hackerwins in #793 - Replace webpack with vite by @hackerwins in #795
- Reset online clients when stream is disconnected by @chacha912 in #796
- Replace TSDoc with TypeDoc by @hackerwins in #800
- Add vite-plugin-dts to build yorkie-js-sdk.d.ts by @hackerwins in #801
- Export OpSource by @chacha912 in #786
- Add window type condition for using devtools by @chacha912 in #787
- Update GitHub Action workflow for create-yorkie-app by @hackerwins in #790
- Handle exception for the client without proper presence value in example by @chacha912 in #798
- Handle concurrent editing and styling in Tree by @raararaara in #803
- Fix invalid tree style changes by @hackerwins in #804
- Fix gc for multiple nodes in text and tree type by @chacha912 in #806
- Add history tab and enhance visualization features to devtools by @chacha912 in #760
- Add RealtimeSyncOff and refactor interface of SyncMode by @chacha912 in #772
- Fix issue of incorrect display of remote selection in Quill example by @chacha912 in #769
- Reverse TreeChanges when Deleting in Tree by @raararaara in #774
- Remove unnecessary stubs from the test code by @chacha912 in #776
- Provide CODECOV_TOKEN to codecov-action by @hackerwins in #777
- Fix issue of referencing process object on browser by @blurfx in #778
- Implement Protocol Changes for Tree.RemoveStyle by @raararaara in #755
- Implement Tree.RemoveStyle by @raararaara in #745
- Change actorID to be non-optional by @chacha912 in #747
- Fix invalid sync when editing multiple cursors in CodeMirror6 by @devleejb in #743
- Fix incorrect index returned when using posRangeToIndexRange by @chacha912 in #742
- Fix incorrect calculation in
indexTree.treePosToPath
operation by @raararaara in #751 - Fix errors when editing Tree due to missing insPrevID in CRDTTree by @raararaara in #756
- Prevent remote-change events from occurring in push-only mode by @chacha912 in #759
- Export LogLevel and setLogLevel @devleejb in #737
- Add design document for devtools extension by @chacha912 in #735
- Follow up work after devtools mvp by @chacha912 in #734
- Fix invalid TreeChanges in concurrent Tree.Style by @hackerwins in #738
- Restore interface changes due to server DB sharding by @sejongk #740
- Implement devtools chrome extension by @chacha912 in #717
- Reflect interface changes of server DB sharding by @sejongk in #726
- Complement concurrent editing test cases in Tree by @sejongk in #721
- Export devtools type by @chacha912 in #730
- Update examples version to v0.4.12 by @hackerwins in #722
- Fix multiple versions of prosemirror-model were loaded by @hackerwins in #728
- Fix invalid tree conversion by @hackerwins in #719
- Add concurrent editing test cases in Tree by @sejongk in #710
- Generate correct TreeChange in concurrent edits by @sejongk in #712
- Add forced sync when switching to realtime mode by @chacha912 in #713
- Fix
getGarbageLen
to retrun correct size by @devleejb in #714 - Prevent deregisterElement from deregistering twice in nested object by @justiceHui in #716
- Address duplicate node IDs in Tree.Split by @sejongk, @hackerwins in #707
- Add test filtering and log printing guide to CONTRIBUTING.md by @sejongk in #708
- Support concurrent insertion and splitting in Tree by @sejongk in #709
- Migrate RPC to ConnectRPC by @krapie, @hackerwins in #698
- Add create-yorkie-app by @se030, @blurfx in #690
- Implement splitLevel of Tree.Edit by @hackerwins in #704
- Add
removeIfNotAttached
toclient.detach()
options by @chacha912 in #703
- Fix reading wrong .env path by @blurfx in #694
- Handle escape string for strings containing quotes by @chacha912 in #700
- Correct typos in the installation command on README.md in the example by @ymw0407 in #702
- Implement merge elements in
Tree.Edit
by @hackerwins in #681 - Add README and thumbnail on example 'simultaneous-cursors'by @banma1234 in #683
- Support Undo/Redo for object.set and object.remove operations by @chacha912 in #658
- Refactor ProseMirror example and Tree codes by @hackerwins in #686
- Enhance Set and Add for representing nested elements by @chacha912 in #691
- Add missing
removedAt
during Primitive deepcopy by @chacha912 in #692 - Prevent empty ops are applied during undo/redo by @chacha912 in #687
- Replace karma with vitest by @blurfx, @hackerwins in #665
- Remove vitest single thread config by @blurfx in #667
- Publish npm package with provenance by @jongwooo in #669
- Update examples version to v0.4.7 by @hackerwins in #671
- Update nextjs-scheduler to export static files by @hackerwins in #672
- Bump browserify-sign from 4.2.1 to 4.2.2 by @dependabot in #678
- Bump @babel/traverse from 7.22.11 to 7.23.2 by @dependabot in #670
- Remove redundant types from tree by @JOOHOJANG in #666
- Fix missing collection of removed elements from the root by @hackerwins in #676
- Add more GC tests to reflect current server modifications by @hackerwins in #677
- Fit Next.js example style to the yorkie homepage by @blurfx in #675
- Disable jekyll on github actions by @blurfx in #674
- Introduce basic architecture to support undo and redo by @hyemmie, @chacha912 and @hackerwins in #650
- Add Text devtool to CodeMirror example by @chacha912 and @hackerwins in #646
- Add DisableGC option to document by @hackerwins in #644
- Add toJS to return TreeNode of Tree by @JOOHOJANG and @hackerwins in #639
- Add Tree.Edit benchmark and improve performance by @JOOHOJANG and @hackerwins in #641
- Add simultaneous cursors example and Update examples to v0.4.6 by @YoonKiJin and @chacha912 in #581
- Add nextjs-scheduler example by @banma1234 and @hackerwins in #637
- Improve tldraw example performance by @devleejb in #640
- Drop node 16 support by @blurfx in #653
- Strip internals from package d.ts files by @mojosoeun in #596
- Disable realtime sync in GC test (#656) by @sejongk and @hackerwins in #656
- Support concurrent formatting of Text by @MoonGyu1 in #642
- Recover istanbul-instrumenter-loader to use debugger by @hackerwins in #659
- Recover Select to prevent unsupported operation by @hackerwins in #634
- Build error on node 18+ by @blurfx in #584
- Add .nvmrc to specify Node version to LTS by @kutta97 in #586
- Add client deactivation before unmount by @degurii in #595
- Add
presence.get()
to get presence value in doc.update() by @chacha912 in #600 - Add test for concurrent rich-text editing in the Peritext example by @chacha912 in #610
- Concurrent case handling for Yorkie.tree by @ehuas in #611
- Support multi-level and parital element selection by @sejongk in #631
- Move "Building & Testing" Guide to CONTRIBUTING.md by @g2hhh2ee in #589
- Define more specific condition to check whether the input is opened by @su-ram in #597
- Clean up methods related to presence by @chacha912 in #599
- Refactor presence event code in examples by @chacha912 in #614
- Change TreeNode to have IDs instead of insPrev, insNext by @JOOHOJANG in #627
- Remove select operation from text by @blurfx in #622
- Fix invalid path of style changes by @hackerwins in #632
- Fix
pathToTreePos
TC by @JOOHOJANG in #571 - Fix GC to remove all removed nodes by @JOOHOJANG in #568
- Expose pathToIndex API by @JOOHOJANG in #567
- Fix react-tldraw readme typo by @blurfx in #598
- Fix event-related tests to be deterministic by @chacha912 in #602
- Fix high and critical vulnerabilities by @mojosoeun in #630
- Replace selection with presence by @chacha912 in #578
- Bump word-wrap from 1.2.3 to 1.2.4 by @dependabot in #575
- Bump up protobuf by @JOOHOJANG in #570
- Prevent usage of
.
in JSONObject key by @chacha912 in #569
- Fix
pathToTreePos
TC by @JOOHOJANG in #571 - Fix GC to remove all removed nodes by @JOOHOJANG in #568
- Expose pathToIndex API by @JOOHOJANG in #567
- Cleanup of test-related terminology by @chacha912 in #562
- Use TreeRangeStruct to represent tree selection by @chacha912 in #561
- Apply garbage collection to tree by @JOOHOJANG in #550
- Cleanup TextChange by @chacha912 in #551
- Fix garbage collection bug by @JOOHOJANG in #555
- Support for OperationInfo inference on Document.subscribe by @easylogic in #535
- Add peer selection display example by @easylogic in #544
- Implement Tree.Style and Tree.StyleByPath by @JOOHOJANG, @hackerwins in #542
- Bump vite from 3.2.5 to 3.2.7 by @dependabot in #531
- change to next method as synchronously by @easylogic in #526
- Change the value of XXXChange to Change in Document.subscribe by @easylogic in #538
- Replace Tree.onChanges with Document.subscribe by @easylogic in #523
- Implement yorkie.Tree for text editors using tree model by @hackerwins in #507
- Bump socket.io-parser from 4.2.1 to 4.2.3 by @dependabot in #516
- Replace Text.onChanges with Document.subscribe by @easylogic in #519
- Bump yaml and husky by @dependabot in #505
- Apply Integration of SDK and Admin RPC Server by @krapie in #512
- Fix quill example page image rendering issue by @JOOHOJANG in #504
- Add actor to ChangeInfo / update api-reference by @JOOHOJANG in #508
- Add the
document.subscribe(targetPath, (event) => {})
, which enables users to subscribe to a specific target in a document by @chacha912 in #487 - Add the
document.getValueByPath()
to get the value of a document by specifying the path by @chacha912 in #487 - Add benchmark tests for yorkie.Document by @JOOHOJANG in #494
- Add client sync mode, which enables users to pause and resume remote changes by @chacha912 in #495
- Add x-shard-key to APIs by @hackerwins in #486
- Add yorkie user agent in grpc metadata by @emplam27 in #488
- Change Counter.increase() to remove the decimal part instead of using Math.floor() when a decimal number is passed as an argument by @JOOHOJANG in #496
- Return undefined when searching for presence of non-existent peer by @chacha912 in #493
- Add optimization option in production mode by @easylogic in #474
- Add RemoveDocument API by @chacha912 in #480
- Add pause and resume to Client by @hackerwins in #482
- Clarify the ClientEvent that is sent to client.subscribe by @chacha912 in #464
- Rename initialization to initialized in PeersChangedEvent by @chacha912 in #478
- Fix ValueChange dependency by @krapie in #470
- Add
delete
andempty
method toText
data type by @cozitive in #454
- Reduce bundle size for production by @easylogic in #460
- Remove string dependency of RGATreeSplit value by @cozitive in #459
- Remove priority queue from RHTPQMap and entire project by @blurfx in #462
- Modify config to run the webpack-bundle-analyzer when using
profile:bundle
script by @chacha912 in #468
- Fix invalid indexOf SplayTree with single node by @chacha912 in #463
- Merge Text and RichText by @chacha912 in #425
- Fix the value type of Counter and remove double type from Counter by @cozitive in #426
- Let Client.attach wait until stream initialization is finished by @cozitive in #440
- Add the toJS method to the ObjectProxy's handler by @chacha912 in #449
- Increase CRDT Counter in local change by @chacha912 in #441
- Add benchmark tests by @parkeunae in #358, #359
- Add CodeMirror6 integration example by @blurfx in #394
- Add vuejs-kanban example by @hackerwins in #399
- Add profile-stack example by @chacha912 #414
- Bump socket.io-parser from 4.0.4 to 4.0.5 by @dependabot in #403
- Bump engine.io and socket.io by @dependabot in #407
- Bump express from 4.17.1 to 4.18.2 by @dependabot in #411
- Bump minimatch from 3.0.4 to 3.1.2 by @dependabot in #412
- Fix issues identified during iOS SDK development by @hackerwins in #398
- Use uint64 for date value by @hackerwins in #408
- Rename keyOf to subPathOf: #391
- Remove unused nodeMapByCreatedAt in RHT: #386
- Change lamport from uint64 to int64: #390
- Apply generics to support any types of properties in RichText: #354
- Send peers-changed event to the user who updated one's own presence: #371
- Fix the error that occurs when importing JS SDK in Next.js: #378
- Add snapshot event observer to Quill example: #365
- Bump up proto files to the latest: #367
- Export Change APIs to generate history snapshots in admin: #368
- Change trie traverse parameter name to isTerminalIncluded: #363
- Reduce the number of paths of change events: #351
- Fix the problem local changes were applied twice: #356
- Update CodeMirror example to handle snapshot events: #360
- Support Quill embeds type to example project: #344
- Fix a bug when overwriting in Object: #349
- Fix incorrect index for nodes newly created then concurrently removed: #334
- Fix initial value bug in counter proxy: #333
- Escape string to return valid json: #330
- Implement array methods with objects: #327
- Improve performance deletion in Text: #326
- Fix a bug when deleting blocks concurrently: #328
- Implement inserting elements with splice() method: #318
- Revert text deletion improvements: #323
- Add read-only Array methods to ArrayProxy: #310
- Add Array.splice to ArrayProxy: #317
- Use types more strictly in Document.update: #314
- Revert Document and Text: #47478e7
- Improve performance deletion in Text: #312, #316
- Remove size cache from RGATreeList and use SplayTree instead: #315
- Fix bug when setting non-string values in Presence: #311
- Expose constructors for user-accessible types
- Refine SDK interface: #300
- Add apiKey option: #295
- Fix incorrect type hint in document.update handler: #289
- Rename Client Metadata to Presence: #293
- Remove collection from document: #292
- Bump up yorkie.proto to 0.2.3
2nd Year Release
- Garbage collection for Text and RichText
- Improve Client's metadata to be updatable
- Improved Peer Awareness
- Supporting TLS and Auth webhook
- Fix a bug where text nodes with tombstones were not counted: #263
- Add Array.toJS() and Object.toJS(): #237
- Print log message more accurately: #5ce95c6, #de05448
- Fix quill example page: #260
- Hide clock from value of peers-changed event
- Improve Client's metadata to be updatable: #240
- Fix reduce array size when deleting the same position: #229
- Handle special characters in keys of the path in change events: #247
- Add client.getStatus and client.Metadata: #162f2d5
- Change getElementByID to return undefined if the element doesnt exist: #208
- Change esnext to ES2019 in compiler target option: #197
- Clean up JS SDK Reference: #181, #218, #219
- Fix a bug where deleted values from objects are revivded after GC: #216
- Add moveFront, moveAfter, moveLast, insertBefore to Array: #194, #203, #206, #207
- Add AuthInterceptor: #199
- Fix the concurrent editing issue of Move Operation: #196
- Fix a bug when pushing an array element in Array: #200
- Delete RequestHeader in Protobuf
- Rename Document.getKey().toIDString() to Document.getKey(): #178
- Only display exported objects in JS SDK Reference: #179
- Rename Document to DocumentReplica: #10f2b72
- Fix a bug occurs when setting an empty string as a key: #182
- Fix a bug that the first element of an array was not deleted: #185
- Fix a bug that the size of the array increases when moving element: #186
- Fix a bug that did not move after pushing in same update: #188
- Pass paths to change events: #162
- Support null and undefined values: #157
- Add type parameter to Document: #148
- Rename getRootObject to getRoot: #158
- Rename updateSelection to select: #170
- Fix error that occurred when deleting value using missing key or index: #149
- Fix invalid states of SplayTree: #153
- Remove errors that occur when insPrev does not exist: #166
- Add customizable metadata for peer awareness: #123
- Add garbage collection for Text and RichText: #137
- Replace the type of client_id to a byte array to reduce payload: #133
- Fix a bug that attributes were lost when splitting RichText nodes: #136
- Add garbage collect for Container type: #101
- Update libs to fix security vulnerability: #103
- Fix quill paragraph style errors: #104
- Change Logger to receive all values: #100
0.1.0 - 2020-11-07
First public release
- Add
Client
andDocument
- Add Custom CRDT data type
Text
for code editor - Add Custom CRDT data type
RichText
for WYSIWYG editor - Add examples: CodeMirror, Drawing, Quill
- Support Network Auto Recovery
- Add Peer Awareness
- Add Custom CRDT data type
Counter