{"id":15019359,"url":"https://github.com/0xtheprodev/operational-transformation","last_synced_at":"2025-04-04T14:08:38.295Z","repository":{"id":38019498,"uuid":"382776359","full_name":"0xTheProDev/Operational-Transformation","owner":"0xTheProDev","description":"A collection of Algorithms to Synchronise changes across multiple clients using Operational Transformation","archived":false,"fork":false,"pushed_at":"2025-04-01T12:40:09.000Z","size":2917,"stargazers_count":76,"open_issues_count":12,"forks_count":11,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-03T11:07:14.668Z","etag":null,"topics":["ace-editor","collaborative-editing","distributed-database","eventual-consistency","firebase","hacktoberfest","monaco-editor","operational-transformation","typescript"],"latest_commit_sha":null,"homepage":"https://ot.js.org","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/0xTheProDev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"0xTheProDev","custom":["https://www.paypal.me/bprogyan"]}},"created_at":"2021-07-04T06:04:31.000Z","updated_at":"2025-04-02T04:47:59.000Z","dependencies_parsed_at":"2024-02-03T18:26:35.104Z","dependency_job_id":"e3126050-450f-4f2f-93df-e6d7e34a628c","html_url":"https://github.com/0xTheProDev/Operational-Transformation","commit_stats":{"total_commits":145,"total_committers":4,"mean_commits":36.25,"dds":0.2896551724137931,"last_synced_commit":"e75d241fd6e23d80445a1996c33e120bbd0aa361"},"previous_names":["progyan1997/operational-transformation"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xTheProDev%2FOperational-Transformation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xTheProDev%2FOperational-Transformation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xTheProDev%2FOperational-Transformation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xTheProDev%2FOperational-Transformation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/0xTheProDev","download_url":"https://codeload.github.com/0xTheProDev/Operational-Transformation/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247190252,"owners_count":20898702,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ace-editor","collaborative-editing","distributed-database","eventual-consistency","firebase","hacktoberfest","monaco-editor","operational-transformation","typescript"],"created_at":"2024-09-24T19:53:22.977Z","updated_at":"2025-04-04T14:08:38.278Z","avatar_url":"https://github.com/0xTheProDev.png","language":"TypeScript","funding_links":["https://github.com/sponsors/0xTheProDev","https://www.paypal.me/bprogyan"],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdownlint-configure-file { \"MD033\": false, \"MD045\" : false } --\u003e\n\n# Operational Transformation\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://ot.js.org\" target=\"_blank\"\u003e\n    \u003cimg src=\".github/images/otjs-logo.png\" alt=\"@otjs\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n[![Build](https://github.com/0xTheProDev/Operational-Transformation/actions/workflows/build.yml/badge.svg)](https://github.com/0xTheProDev/Operational-Transformation/actions/workflows/build.yml)\n[![Tests](https://github.com/0xTheProDev/Operational-Transformation/actions/workflows/tests.yml/badge.svg)](https://github.com/0xTheProDev/Operational-Transformation/actions/workflows/tests.yml)\n[![Deployment](https://github.com/0xTheProDev/Operational-Transformation/actions/workflows/deploy.yml/badge.svg?branch=v0.2.2)](https://github.com/0xTheProDev/Operational-Transformation/actions/workflows/deploy.yml)\n[![Code Quality](https://github.com/0xTheProDev/Operational-Transformation/actions/workflows/quality.yml/badge.svg)](https://github.com/0xTheProDev/Operational-Transformation/security/code-scanning)\n\n[![Sponsor](https://img.shields.io/badge/sponsor-30363D?style=for-the-badge\u0026logo=GitHub-Sponsors\u0026logoColor=#white)](https://github.com/sponsors/0xTheProDev)\n[![Version](https://img.shields.io/github/lerna-json/v/0xTheProDev/Operational-Transformation?style=for-the-badge)](https://lerna.js.org)\n[![Built With](https://img.shields.io/badge/built%20with-webpack-green?style=for-the-badge)](https://webpack.js.org)\n[![Tested With](https://img.shields.io/badge/tested%20with-jest-yellowgreen?style=for-the-badge)](https://jestjs.io)\n[![Code Coverage](https://img.shields.io/codecov/c/github/0xTheProDev/Operational-Transformation?style=for-the-badge\u0026token=R0T5YH3XX3)](https://codecov.io/github/0xTheProDev/Operational-Transformation)\n[![Typed With](https://img.shields.io/badge/typed%20with-TypeScript-blue?style=for-the-badge)](https://www.typescriptlang.org)\n[![Styled With](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=for-the-badge\u0026label=styled%20with)](https://prettier.io)\n[![License](https://img.shields.io/badge/license-MIT-yellow?style=for-the-badge)](LICENSE)\n[![Open Issues](https://img.shields.io/github/issues-raw/0xTheProDev/Operational-Transformation?style=for-the-badge)](https://github.com/0xTheProDev/Operational-Transformation/issues)\n[![Closed Issues](https://img.shields.io/github/issues-closed-raw/0xTheProDev/Operational-Transformation?style=for-the-badge)](https://github.com/0xTheProDev/Operational-Transformation/issues?q=is%3Aissue+is%3Aclosed)\n[![Open Pulls](https://img.shields.io/github/issues-pr-raw/0xTheProDev/Operational-Transformation?style=for-the-badge)](https://github.com/0xTheProDev/Operational-Transformation/pulls)\n[![Closed Pulls](https://img.shields.io/github/issues-pr-closed-raw/0xTheProDev/Operational-Transformation?style=for-the-badge)](https://github.com/0xTheProDev/Operational-Transformation/pulls?q=is%3Apr+is%3Aclosed)\n[![Contributors](https://img.shields.io/github/contributors/0xTheProDev/Operational-Transformation?style=for-the-badge)](https://github.com/0xTheProDev/Operational-Transformation/graphs/contributors)\n[![Activity](https://img.shields.io/github/last-commit/0xTheProDev/Operational-Transformation?style=for-the-badge\u0026label=most%20recent%20activity)](https://github.com/0xTheProDev/Operational-Transformation/pulse)\n\n## Description\n\n\u003e Collection of Operation Transformation Algorithms and their respective clients to integrate with any existing system.\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003ePackage\u003c/th\u003e\n      \u003cth\u003eVersion\u003c/th\u003e\n      \u003cth\u003eDownloads\u003c/th\u003e\n      \u003cth\u003eThird-party Dependency\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr title=\"ace\"\u003e\n      \u003ctd\u003e\u003ca href=\"https://github.com/0xTheProDev/Operational-Transformation/tree/main/packages/ace\"\u003eace\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@otjs/ace\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@otjs/ace?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@otjs/ace\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/@otjs/ace?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/ace-builds\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dependency-version/@otjs/ace/peer/ace-builds?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr title=\"firebase-ace\"\u003e\n      \u003ctd\u003e\u003ca href=\"https://github.com/0xTheProDev/Operational-Transformation/tree/main/packages/firebase-ace\"\u003efirebase-ace\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@otjs/firebase-ace\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@otjs/firebase-ace?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@otjs/firebase-ace\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/@otjs/firebase-ace?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003ca href=\"https://www.npmjs.com/package/ace-builds\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dependency-version/@otjs/firebase-ace/peer/ace-builds?style=for-the-badge\"/\u003e\u003c/a\u003e\n        \u003ca href=\"https://www.npmjs.com/package/firebase\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dependency-version/@otjs/firebase-ace/peer/firebase?style=for-the-badge\"/\u003e\u003c/a\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr title=\"firebase-monaco\"\u003e\n      \u003ctd\u003e\u003ca href=\"https://github.com/0xTheProDev/Operational-Transformation/tree/main/packages/firebase-monaco\"\u003efirebase-monaco\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@otjs/firebase-monaco\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@otjs/firebase-monaco?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@otjs/firebase-monaco\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/@otjs/firebase-monaco?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\n        \u003ca href=\"https://www.npmjs.com/package/firebase\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dependency-version/@otjs/firebase-monaco/peer/firebase?style=for-the-badge\"/\u003e\u003c/a\u003e\n        \u003ca href=\"https://www.npmjs.com/package/monaco-editor\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dependency-version/@otjs/firebase-monaco/peer/monaco-editor?style=for-the-badge\"/\u003e\u003c/a\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr title=\"firebase-plaintext\"\u003e\n      \u003ctd\u003e\u003ca href=\"https://github.com/0xTheProDev/Operational-Transformation/tree/main/packages/firebase-plaintext\"\u003efirebase-plaintext\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@otjs/firebase-plaintext\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@otjs/firebase-plaintext?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@otjs/firebase-plaintext\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/@otjs/firebase-plaintext?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/firebase\"\u003e\u003cimg src=\"https://img.shields.io/npm/dependency-version/@otjs/firebase-plaintext/peer/firebase?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr title=\"monaco\"\u003e\n      \u003ctd\u003e\u003ca href=\"https://github.com/0xTheProDev/Operational-Transformation/tree/main/packages/monaco\"\u003emonaco\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@otjs/monaco\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@otjs/monaco?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@otjs/monaco\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/@otjs/monaco?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/monaco-editor\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dependency-version/@otjs/monaco/peer/monaco-editor?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr title=\"plaintext\"\u003e\n      \u003ctd\u003e\u003ca href=\"https://github.com/0xTheProDev/Operational-Transformation/tree/main/packages/plaintext\"\u003eplaintext\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@otjs/plaintext\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@otjs/plaintext?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@otjs/plaintext\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/@otjs/plaintext?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e-\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr title=\"plaintext-editor\"\u003e\n      \u003ctd\u003e\u003ca href=\"https://github.com/0xTheProDev/Operational-Transformation/tree/main/packages/plaintext-editor\"\u003eplaintext-editor\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@otjs/plaintext-editor\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@otjs/plaintext-editor?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@otjs/plaintext-editor\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/@otjs/plaintext-editor?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e-\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr title=\"state-machine\"\u003e\n      \u003ctd\u003e\u003ca href=\"https://github.com/0xTheProDev/Operational-Transformation/tree/main/packages/state-machine\"\u003estate-machine\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@otjs/state-machine\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@otjs/state-machine?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@otjs/state-machine\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/@otjs/state-machine?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e-\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr title=\"types\"\u003e\n      \u003ctd\u003e\u003ca href=\"https://github.com/0xTheProDev/Operational-Transformation/tree/main/packages/types\"\u003etypes\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e-\u003c/td\u003e\n      \u003ctd\u003e-\u003c/td\u003e\n      \u003ctd\u003e-\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr title=\"utils\"\u003e\n      \u003ctd\u003e\u003ca href=\"https://github.com/0xTheProDev/Operational-Transformation/tree/main/packages/utils\"\u003eutils\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e-\u003c/td\u003e\n      \u003ctd\u003e-\u003c/td\u003e\n      \u003ctd\u003e-\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n### Deprecated Packages\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003ePackage\u003c/th\u003e\n      \u003cth\u003eVersion\u003c/th\u003e\n      \u003cth\u003eDownloads\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr title=\"plaintext\"\u003e\n      \u003ctd\u003e\u003ca href=\"https://github.com/0xTheProDev/Operational-Transformation/tree/v0.1.1/packages/plaintext\"\u003eplaintext\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@operational-transformation/plaintext\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@operational-transformation/plaintext?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@operational-transformation/plaintext\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/@operational-transformation/plaintext?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr title=\"plaintext-editor\"\u003e\n      \u003ctd\u003e\u003ca href=\"https://github.com/0xTheProDev/Operational-Transformation/tree/v0.1.1/packages/plaintext-editor\"\u003eplaintext-editor\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@operational-transformation/plaintext-editor\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@operational-transformation/plaintext-editor?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@operational-transformation/plaintext-editor\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/@operational-transformation/plaintext-editor?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr title=\"state-machine\"\u003e\n      \u003ctd\u003e\u003ca href=\"https://github.com/0xTheProDev/Operational-Transformation/tree/v0.1.1/packages/state-machine\"\u003estate-machine\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@operational-transformation/state-machine\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@operational-transformation/state-machine?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"https://www.npmjs.com/package/@operational-transformation/state-machine\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/@operational-transformation/state-machine?style=for-the-badge\"/\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n## Installation\n\nThis repository uses monorepo architecture for hosting packages. We are using [Lerna](https://lerna.js.org) to manage workspaces and publishing of individual packages, where as [Pnpm](https://pnpm.io) is used as package manager to symlink and install External Dependencies.\n\n- To install using Pnpm _(recommended)_:\n\n  ```sh\n  pnpm install -r\n  ```\n\n- To install using Lerna:\n\n  ```sh\n  lerna bootstrap\n  ```\n\n## Testing\n\nWe are using [Jest](https://jestjs.io) extensively to form our Unit Test Suite as well as Integration Test Suites, along with test environment, stubs and test runner. [Nyc _(formerly known as Istanbul)_](https://istanbul.js.org/) is used for coverage reporting.\n\n- To run all the unit test suites in local dev environment, run the following after dependencies have been installed:\n\n  ```sh\n  pnpm test\n  ```\n\n- To run unit tests in CI environment, run:\n\n  ```sh\n  pnpm test:ci\n  ```\n\n- To run integration tests in CI environment, run:\n\n  ```sh\n  pnpm test:firebase\n  pnpm test:monaco\n  ```\n\n- To merge all the individual code coverage report and generate final test coverage report, run:\n\n  ```sh\n  pnpm run coverage\n  ```\n\n- To convert generated final coverage report into more human readable form _(such as **lcov**)_, run:\n\n  ```sh\n  pnpm run coverage:dev\n  ```\n\n### Integration Tests\n\nThis package only provides a functional layer on top of your existing dependencies and does not ship any additional bundle. To make sure our implementation and integrations are up-to-date, we have a comprehensive set of Integration Test Suite living in [**tests**](./__tests__) directory.\n\n### Editor Integration\n\nMost of the popular editors and IDEs have extensions to help with Code Coverage details. These tools often read `lcov` reports and not `json` format. So one must convert them into `lcov` using last command described above to make it work with the editor of their choice.\n\n### Metrics and Tracking\n\nWe are using [codecov.io](https://about.codecov.io) to track progress over Code Coverage and [CodeQL](https://codeql.github.com) for Code Quality Analysis.\n\n## Reporting a Bug\n\nHead on to [**Discussion**](https://github.com/0xTheProDev/Operational-Transformation/discussions) section to report a bug or to ask for any feature. Use this [template](https://github.com/0xTheProDev/Operational-Transformation/discussions/30) to make it structural and helpful for the maintainer and the contributors. Feel to add your queries about using this library as well under _Q \u0026 A_ section of it. Remember, do not create any Issues by yourself, maintainers of this repository will open one if deemed necessary.\n\n## Changelog\n\nSee [CHANGELOG](CHANGELOG.md) for more details.\n\n## Contributing\n\nSee [Contributing Guidelines](.github/CONTRIBUTING.md).\n\n## License\n\nThis project is licensed under the terms of the MIT license, see [LICENSE](LICENSE) for more details.\n\n\u003ca href=\"https://github.com/0xTheProDev\"\u003e\n  \u003cimg src=\".github/images/the-pro-dev-original.png\" alt=\"The Pro Dev\" height=\"120\" width=\"120\"/\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0xtheprodev%2Foperational-transformation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F0xtheprodev%2Foperational-transformation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0xtheprodev%2Foperational-transformation/lists"}