yorkie

module
v0.4.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 4, 2023 License: Apache-2.0

README

Yorkie

GitHub Twitter Discord Contributors Commits

Build Status Go Report Card CodeCov Godoc

Yorkie is an open source document store for building collaborative editing applications. Yorkie uses JSON-like documents(CRDT) with optional types.

Yorkie consists of three main components: Client, Document and Server.

 Client "A" (Go)                 Server                       MemDB or MongoDB
┌───────────────────┐           ┌────────────────────────┐   ┌───────────┐
│  Document "D-1"   │◄─Changes─►│  Project "P-1"         │   │ Changes   │
│  { a: 1, b: {} }  │           │ ┌───────────────────┐  │◄─►│ Snapshots │
└───────────────────┘           │ │  Document "D-1"   │  │   └───────────┘
 Client "B" (JS)                │ │  { a: 2, b: {} }  │  │
┌───────────────────┐           │ │                   │  │
│  Document "D-1"   │◄─Changes─►│ │  Document "D-2"   │  │
│  { a: 2, b: {} }  │           │ │  { a: 3, b: {} }  │  │
└───────────────────┘           │ └───────────────────┘  │
 Admin (CLI, Web)               │                        │
┌────────────────────┐          └────────────────────────┘
│  Query "Q-1"       │              ▲
│  P-1.find({a:2})   ├───── Query───┘
└────────────────────┘
  • Clients can have a replica of the document representing an application model locally on several devices.
  • Each client can independently update the document on their local device, even while offline.
  • When a network connection is available, the client figures out which changes need to be synced from one device to another, and brings them into the same state.
  • If the document was changed concurrently on different devices, Yorkie automatically syncs the changes, so that every replica ends up in the same state with resolving conflict.

SDKs

Yorkie provides SDKs for Go, JavaScript, iOS, and Android:

Documentation

Full, comprehensive documentation is available on the Yorkie website.

Getting Started

Contributing

See CONTRIBUTING for details on submitting patches and the contribution workflow.

Contributors ✨

Thanks go to these incredible people:

contributors

Sponsors

Is your company using Yorkie? Ask your boss to support us. It will help us dedicate more time to maintain this project and to make it even better for all our users. Also, your company logo will show up on here and on our website: -) [Become a sponsor]

Backers

Please be our Backers.

Directories

Path Synopsis
Package admin provides the client for the admin service.
Package admin provides the client for the admin service.
api
converter
Package converter provides the converter for converting model to Protobuf, bytes and vice versa.
Package converter provides the converter for converting model to Protobuf, bytes and vice versa.
types
Package types provides the types used in the Yorkie API.
Package types provides the types used in the Yorkie API.
Package client provides the client implementation of Yorkie.
Package client provides the client implementation of Yorkie.
cmd
yorkie
Package main is the entry point of the Yorkie CLI.
Package main is the entry point of the Yorkie CLI.
yorkie/config
Package config provides the configuration for Admin server.
Package config provides the configuration for Admin server.
yorkie/document
Package document provides the document command.
Package document provides the document command.
yorkie/project
Package project provides the project command.
Package project provides the project command.
internal
validation
Package validation provides the validation functions.
Package validation provides the validation functions.
version
Package version provides the version information of Yorkie.
Package version provides the version information of Yorkie.
pkg
cache
Package cache provides a cache implementation.
Package cache provides a cache implementation.
document
Package document provides JSON-like document(CRDT) implementation.
Package document provides JSON-like document(CRDT) implementation.
document/change
Package change provides the implementation of Change.
Package change provides the implementation of Change.
document/crdt
Package crdt provides the implementation of the CRDT data structure.
Package crdt provides the implementation of the CRDT data structure.
document/json
Package json provides the JSON document implementation.
Package json provides the JSON document implementation.
document/key
Package key provides the key implementation of the document.
Package key provides the key implementation of the document.
document/operations
Package operations implements the operations that can be executed on the document.
Package operations implements the operations that can be executed on the document.
document/time
Package time provides logical clock and ticket for document.
Package time provides logical clock and ticket for document.
index
Package index provides an index tree structure to represent a document of text-base editor.
Package index provides an index tree structure to represent a document of text-base editor.
llrb
Package llrb provides a Left-leaning Red-Black tree implementation.
Package llrb provides a Left-leaning Red-Black tree implementation.
locker
Package locker provides a mechanism for creating finer-grained locking to help free up more global locks to handle other tasks.
Package locker provides a mechanism for creating finer-grained locking to help free up more global locks to handle other tasks.
splay
Package splay provides splay tree implementation.
Package splay provides splay tree implementation.
units
Package units provides a set of functions to convert between bytes and human-readable formats.
Package units provides a set of functions to convert between bytes and human-readable formats.
Package server provides the Yorkie server which is the main entry point of the Yorkie system.
Package server provides the Yorkie server which is the main entry point of the Yorkie system.
backend
Package backend provides the backend implementation of the Yorkie.
Package backend provides the backend implementation of the Yorkie.
backend/background
Package background provides the background service.
Package background provides the background service.
backend/database
Package database provides the database interface for the Yorkie backend.
Package database provides the database interface for the Yorkie backend.
backend/database/memory
Package memory implements the database interface using in-memory database.
Package memory implements the database interface using in-memory database.
backend/database/mongo
Package mongo implements database interfaces using MongoDB.
Package mongo implements database interfaces using MongoDB.
backend/database/testcases
Package testcases contains testcases for database.
Package testcases contains testcases for database.
backend/housekeeping
Package housekeeping provides the housekeeping service.
Package housekeeping provides the housekeeping service.
backend/sync
Package sync provides the synchronization primitives for the server.
Package sync provides the synchronization primitives for the server.
backend/sync/memory
Package memory provides the memory implementation of the sync package.
Package memory provides the memory implementation of the sync package.
clients
Package clients provides the client related business logic.
Package clients provides the client related business logic.
documents
Package documents provides the document related business logic.
Package documents provides the document related business logic.
logging
Package logging provides logging facilities for Yorkie Server.
Package logging provides logging facilities for Yorkie Server.
packs
Package packs implements PushPullPack which is used to sync the document between the client and the server.
Package packs implements PushPullPack which is used to sync the document between the client and the server.
profiling
Package profiling provides profiling server.
Package profiling provides profiling server.
profiling/prometheus
Package prometheus provides a Prometheus metrics exporter.
Package prometheus provides a Prometheus metrics exporter.
projects
Package projects provides the project related business logic.
Package projects provides the project related business logic.
rpc
Package rpc provides the rpc server which is responsible for handling requests from the client.
Package rpc provides the rpc server which is responsible for handling requests from the client.
rpc/auth
Package auth provides authentication and authorization for RPCs.
Package auth provides authentication and authorization for RPCs.
rpc/grpchelper
Package grpchelper provides helper functions for gRPC.
Package grpchelper provides helper functions for gRPC.
rpc/interceptors
Package interceptors provides the interceptors for RPC.
Package interceptors provides the interceptors for RPC.
rpc/metadata
Package metadata provides metadata for RPC.
Package metadata provides metadata for RPC.
users
Package users provides the user related business logic.
Package users provides the user related business logic.
test
helper
Package helper provides helper functions for testing.
Package helper provides helper functions for testing.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL