{"id":37029488,"url":"https://github.com/convergencelabs/convergence-server","last_synced_at":"2026-01-14T03:32:48.985Z","repository":{"id":36382414,"uuid":"221329689","full_name":"convergencelabs/convergence-server","owner":"convergencelabs","description":"The Convergence Server","archived":false,"fork":false,"pushed_at":"2022-05-08T20:09:59.000Z","size":33026,"stargazers_count":89,"open_issues_count":0,"forks_count":20,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-01-27T14:46:37.136Z","etag":null,"topics":["collaboration","convergence","realtime","server"],"latest_commit_sha":null,"homepage":"https://convergence.io","language":"Scala","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/convergencelabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-11-12T23:12:13.000Z","updated_at":"2024-01-11T01:25:12.000Z","dependencies_parsed_at":"2022-07-19T03:02:06.406Z","dependency_job_id":null,"html_url":"https://github.com/convergencelabs/convergence-server","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/convergencelabs/convergence-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/convergencelabs%2Fconvergence-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/convergencelabs%2Fconvergence-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/convergencelabs%2Fconvergence-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/convergencelabs%2Fconvergence-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/convergencelabs","download_url":"https://codeload.github.com/convergencelabs/convergence-server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/convergencelabs%2Fconvergence-server/sbom","scorecard":{"id":303711,"data":{"date":"2025-08-11","repo":{"name":"github.com/convergencelabs/convergence-server","commit":"803a3c4490ae617f6fecd1f2d28b78797c12ac84"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Code-Review","score":0,"reason":"Found 1/29 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/convergencelabs/convergence-server/build.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/convergencelabs/convergence-server/build.yml/master?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 2 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T21:26:42.535Z","repository_id":36382414,"created_at":"2025-08-17T21:26:42.535Z","updated_at":"2025-08-17T21:26:42.535Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408843,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["collaboration","convergence","realtime","server"],"created_at":"2026-01-14T03:32:46.684Z","updated_at":"2026-01-14T03:32:48.944Z","avatar_url":"https://github.com/convergencelabs.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg alt=\"Convergence Logo\" height=\"80\" src=\"https://convergence.io/assets/img/convergence-logo.png\" \u003e\n\n# Convergence Server\n[![Build Status](https://github.com/convergencelabs/convergence-server/actions/workflows/build.yml/badge.svg)](https://github.com/convergencelabs/convergence-server/actions/workflows/build.yml)\n\nThe Convergence Server is the main server side component of the [Convergence](https://convergence.io) Realtime Collaboration Framework. Convergence enables developers to rapidly integrate realtime collaboration directly into their applications.\n\n## Issue Reporting\nThe core Convergence capability is composed of multiple individual projects that are released together. To simplify things, there is a central project that is used for issues, project planning, and road mapping.  To report an issue please use the [convergence-project](https://github.com/convergencelabs/convergence-project) repository.\n\n## Languages and Frameworks\n* **[Scala](https://www.scala-lang.org/)**: The Convergence Server is developed primarily in Scala.\n* **[SBT](https://www.scala-sbt.org/)**: SBT is the build tool used by the Convergence Server.\n* **[Akka](https://akka.io)**: Akka is the main development framework used by the Convergence Server. Akka provides the primary ability for multiple Convergence Servers to cluster together, providing horizontal scalability, and high availability. \n* **[OrientDB](https://orientdb.org/)**: Orient DB is used as the backing database. \n* **[Google Protocol Buffers](https://developers.google.com/protocol-buffers/)**: Protocol Buffers are used as the communications protocol for realtime collaboration over Web Sockets.\n\n## Development\nThe following development tools are required to build the Convergence Server:\n\n* [Java](https://openjdk.java.net/) 11.x\n* [Scala](http://www.scala-lang.org/download/) 2.12.x \n* [SBT](http://www.scala-sbt.org/) 1.5.x\n\n\nThe standard SBT tasks can be used to compile and test the server.\n\n* `sbt compile`\n* `sbt test`\n\nThe main entry point of the Convergence Server is the `com.convergencelabs.server.ConvergenceServer` class. This is a good place to start if you are new to the code base. \n\n## Binary Distribution\nThe Convergence Server uses the [SBT Native Packager](https://github.com/sbt/sbt-native-packager) to build its binary distribution. To stage the build run:\n \n```shell script\nsbt dist/stage\n```\n\nThe resultant build will be located in `target/universal/stage`.\n\nRefer to the [SBT Native Packager Documentation](https://sbt-native-packager.readthedocs.io/en/stable/) for additional build targets.\n\n## Convergence Dev Server\nThe Convergence Dev Server runs an all-in-one instance of Convergence along with an embedded OrientDB Database. The Convergence Dev Server will start up and OrientDB database and initialize it. It will also start a backend node, a rest API, and a realtime API. In order to better reflect a typical deployment, th Convergence Dev Server actually starts up three instances of the Convergence Server (cluster see, backend, and api server). These three instances are tied together using Akka clustering. By default ports 2551, 2552, and 2553 are used by the akka remoting subsystem (each port being used by one of the three ConvergenceServer instances).\n\nBy default, when the Convergence Dev Server successfully starts, it will provide two endpoints:\n\n* Realtime API: http://localhost:8080\n* Rest API: http://localhost:8081\n\n### Running the Convergence Dev Server\nThe Convergence Dev Server can be run from your IDE of choice by executing the following main class:\n```\ncom.convergencelabs.server.dev.ConvergenceDevServer\n```\n\n### Persistent Data\nBy default, the Convergence Dev Server will delete the OrientDB database(s) when it starts up. IF you would like to retain data between runs set the following java property:\n\n`-Dconvergence.dev-server.persistent = true`\n\n### Embedded Orient DB\nIn order to use the OrientDB web interface, the OrientDB Studio plugin must be loaded. The plugin is a dependency of the Convergence Server project but must be copied into the \"target/orientdb/plugins\" directory.  As a convenience, there is an SBT task available to do this. To initialize the Orient DB plugins run the following SBT Command:\n\n```shell\nsbt orientDbPlugins\n```\n\nThe embedded OrientDB can be accessed at: http://localhost:2480/\n\nThe credentials `root` / `password` can be used to access the databases.\n\n## Building and Running the Binary Distribution\n\nThis project uses the SBT Native Packager to build a binary distribution. The distribution can be built by running to following command:\n\n```shell\nsbt dist/stage\n```\n\nThe distribution will be located in `distribution/target/universal/stage`.  You can run the server by opening a terminal in this directory and executing:\n\n```shell\nbin/convergence-server\n```\n\nYou will need a running OrientDB Server. The easiest way to accomplish that is using the following docker command:\n\n```shell script\ndocker run --rm \\\n  --name orientdb \\\n  -p 2424:2424 \\\n  -p 2480:2480 \\\n  -e ORIENTDB_ROOT_PASSWORD=password \\\n  orientdb:3.0.37\n```\n\n## Support\n[Convergence Labs](https://convergencelabs.com) provides several channels for support:\n\n- Please use the [Convergence Community Forum](https://forum.convergence.io) for general and technical questions, so the whole community can benefit.\n- For paid dedicated support or custom development services, [contact us](https://convergence.io/contact-sales/) directly.\n- Chat with us on the [Convergence Public Slack](https://slack.convergence.io).\n- Email \u003csupport@convergencelabs.com\u003e for all other inquiries.\n\n## License\nThe Convergence Server is licensed under the [GNU Public License v3](LICENSE) (GPLv3) license. Refer to the [LICENSE](LICENSE) for the specific terms and conditions of the license.\n\nThe Convergence Server is also available under a Commercial License. If you are interested in a non-open source license please contact us at [Convergence Labs](https://convergencelabs.com).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconvergencelabs%2Fconvergence-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fconvergencelabs%2Fconvergence-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconvergencelabs%2Fconvergence-server/lists"}