{"id":13740336,"url":"https://github.com/sillsdev/chorus","last_synced_at":"2025-12-30T00:37:22.359Z","repository":{"id":11627735,"uuid":"14127818","full_name":"sillsdev/chorus","owner":"sillsdev","description":"End-user collaboration library via 3-way xml merging and hg dvcs under the hood","archived":false,"fork":false,"pushed_at":"2024-10-29T08:50:10.000Z","size":61218,"stargazers_count":6,"open_issues_count":21,"forks_count":26,"subscribers_count":15,"default_branch":"master","last_synced_at":"2024-10-29T09:37:29.777Z","etag":null,"topics":["chorus","conflict","dvcs","fieldworks","hacktoberfest","hg","merge","send-receive","synchronization","xml"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sillsdev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-11-05T00:31:14.000Z","updated_at":"2024-10-25T07:32:14.000Z","dependencies_parsed_at":"2023-10-12T01:09:37.791Z","dependency_job_id":"b2ef69bb-a526-4710-93e9-43e3328698f4","html_url":"https://github.com/sillsdev/chorus","commit_stats":{"total_commits":2089,"total_committers":51,"mean_commits":40.96078431372549,"dds":0.7568214456677836,"last_synced_commit":"5f0a6a6f3e0404e77df44d89de6a549afb019f5a"},"previous_names":[],"tags_count":198,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sillsdev%2Fchorus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sillsdev%2Fchorus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sillsdev%2Fchorus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sillsdev%2Fchorus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sillsdev","download_url":"https://codeload.github.com/sillsdev/chorus/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224765443,"owners_count":17366120,"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":["chorus","conflict","dvcs","fieldworks","hacktoberfest","hg","merge","send-receive","synchronization","xml"],"created_at":"2024-08-03T04:00:46.486Z","updated_at":"2025-12-30T00:37:22.314Z","avatar_url":"https://github.com/sillsdev.png","language":"C#","readme":"# Overview\n\n[![NuGet version (chorus)](https://img.shields.io/nuget/v/SIL.Chorus.LibChorus.svg?style=flat-square)](https://www.nuget.org/packages/SIL.Chorus.LibChorus)\n[![Build, Test and Pack](https://github.com/sillsdev/chorus/actions/workflows/dotnet.yml/badge.svg)](https://github.com/sillsdev/chorus/actions/workflows/dotnet.yml)\n\nChorus is a version control system designed to enable workflows appropriate for typical language\ndevelopment teams who are geographically distributed. These teams need to edit a set of common\nfiles, working towards a publication. They want to share their work while, crucially, being able\nto defer dealing with conflicting edits for periods of time or until a qualified team member can\nmake decisions about the conflicts. The system is implemented on top of a commonly-used Open\nSource Distributed Version Control System. It works in scenarios in which users are connected by\nLocal Area Network, Internet, or hand-carried storage devices. Chorus supports several workflow\nmodels, including those that maintain a “master” database separate from the incoming submissions\nof team members. Quite unlike the version control systems commonly in use, Chorus works\ninvisibly for the common cases and is kept simple for even beginner computer users.\n\n## Distinctive Features\n\nThese features come for free with any Distributed Version Control System:\n\n * Share files between users, even if they are never connected to the internet.\n\n * Every member of the team has access to a full history of all work done by the rest of the team.\n\n * In a crisis, work can be \"rolled back\" to a previous version.\n\n\nHowever, \"raw\" Distributed Version Controls Systems are relatively difficult to understand,\nconfigure, and use, even for computer-savvy workers.\n\n\nThe following list of features should help you understand why we built this layer over a raw version control system:\n\n\n * silently synchronize; will never tell the user to manually merge conflicts first\n\n * automatically check for team members \u0026 devices with which to synchronize\n\n * Support a Master branch which does not automatically accept changes from anyone\n\n * Files can be marked as shared by the team or user-specific. This allows things like\n   preferences/configurations to be part of the repository but kept separate for each\n   individual. This will also allow one team member to make configuration changes for another,\n   remote member, and push those changes through the system to that user, without physically\n   accessing their computer.\n\n * 3-Way, schema-savvy XML merging. Various policies can be implemented for choosing a winner in\n   the case of conflicts. Regardless of the policy, details of the conflict are logged in an XML\n   file which also under version control. At a time and place of the team's choosing, these\n   automatic choices can be reviewed and reversed.\n\n * Configuration help from applications. Applications generally know where their important files\n   are, which files are individual-specific, and which should not be backed-up/shared at all.\n   Applications that know about Chorus pass this information to it, so that users don't need to\n   become experts in how all the files work.\n\n * Synchronization help from application. Applications often know what points are good ones for\n   checking data in. For example, when exiting, or before doing a large and possibly undesirable\n   operation, like deleting a large number of items or importing a new data set.\n\n * In-Application conflict and change history. Rather than ask users to learn\n   version-control-specific tools, the Chorus model is that Chorus provides the raw information\n   applications need to provide a smooth, integrated workflow in the same environment as the user\n   has for editing. For example, a dictionary-editing program using Chorus will allow the user to\n   see a full history of the current record, including who made what changes, and what conflicts\n   (if any) were encountered during synchronization.\n\n * A built-in \"notes\" system which makes it very cheap to give users the ability to add notes to\n   any piece of data, and to carry on conversations about the data until they mark the\n   note as \"resolved\".\n\n## Status\n\nChorus is functional and being used in several applications with different development teams.\nHowever, we are not really interested in supporting\nany further uses until things mature and someone writes good developer documentation.\nDocumentation (what little exists) was kept on [this blog](http://chorussr.wordpress.com/),\nwhich contains three posts from August 2009.\n\n## Testers\n\nPlease see [Tips for Testing Palaso Software](https://docs.google.com/document/d/1dkp0edjJ8iqkrYeXdbQJcz3UicyilLR7GxMRIUAGb1E/edit)\n\nTo send and receive with the test server over the Internet, set the following environment variable:\n\n\tLANGUAGEFORGESERVER = -qa.languageforge.org\n\nTo register to use the test server, visit https://public-qa.languageforge.org\n\n## Developers\n\n### Road Map \u0026 Workflow\n\nhttps://github.com/sillsdev/chorus/issues\n\n### Coding Standards\n\n[Palaso Coding Standards](https://docs.google.com/document/d/1t4QVHWwGnrUi036lOXM-hnHVn15BbJkuGVKGLnbo4qk/edit)\n\n### Source Code\n\nChorus is written in C#. The UI widgets use Windows Forms, but you could make your own using a\ndifferent platform and just use the engine.\n\nAfter cloning the project you should now have a solution that you can build using any edition\nof Visual Studio 2022, including the free Express version, JetBrains Rider or\nVisual Studio Code. This works on both Windows and Linux.\n\nFrom the command line you can build with:\n\n```bash\ndotnet build\n```\n\nand run the unit tests with:\n\n```bash\ndotnet test\n```\n\n### Building client projects against locally-built artifacts\n\n  * Set an enviroment variable `LOCAL_NUGET_REPO` with the path to a folder on your computer (or local network) to publish locally-built packages\n  * See [these instructions](https://docs.microsoft.com/en-us/nuget/hosting-packages/local-feeds) to enable local package sources\n  * `build /t:pack` will pack nuget packages and publish them to `LOCAL_NUGET_REPO`\n\nFurther instructions at https://github.com/sillsdev/libpalaso/wiki/Developing-with-locally-modified-nuget-packages\n\n### Debugging LibChorus in client projects\n\nCopy `src/LibChorus/Properties/launchSettings.json.sample` to `launchSettings.json`; verify paths to executables and in arguments.\n\n### Localization\n\nChorus is localized with [L10NSharp](https://github.com/sillsdev/l10nsharp). Chorus-specific documentation is under `l10n/README.md`.\n","funding_links":[],"categories":["Software"],"sub_categories":["Utilities"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsillsdev%2Fchorus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsillsdev%2Fchorus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsillsdev%2Fchorus/lists"}