{"id":17490764,"url":"https://github.com/croquet/worldcore","last_synced_at":"2026-01-22T01:16:33.543Z","repository":{"id":40990604,"uuid":"315424550","full_name":"croquet/worldcore","owner":"croquet","description":"Croquet-based multi-player game engine","archived":false,"fork":false,"pushed_at":"2025-06-06T10:32:29.000Z","size":412102,"stargazers_count":56,"open_issues_count":0,"forks_count":9,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-11-13T22:35:55.184Z","etag":null,"topics":["croquet","game-development","game-engine","javascript","multiplayer"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/croquet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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,"zenodo":null}},"created_at":"2020-11-23T19:51:07.000Z","updated_at":"2025-06-06T10:32:33.000Z","dependencies_parsed_at":"2023-02-04T20:03:03.245Z","dependency_job_id":"29520e2a-b393-4ef4-82ad-9343b74fb85d","html_url":"https://github.com/croquet/worldcore","commit_stats":{"total_commits":1232,"total_committers":9,"mean_commits":"136.88888888888889","dds":"0.40340909090909094","last_synced_commit":"b5ca50642d9be2c638a2cb94f10bc26aea2be949"},"previous_names":[],"tags_count":40,"template":false,"template_full_name":null,"purl":"pkg:github/croquet/worldcore","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/croquet%2Fworldcore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/croquet%2Fworldcore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/croquet%2Fworldcore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/croquet%2Fworldcore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/croquet","download_url":"https://codeload.github.com/croquet/worldcore/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/croquet%2Fworldcore/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28648635,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T21:29:11.980Z","status":"ssl_error","status_checked_at":"2026-01-21T21:24:31.872Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["croquet","game-development","game-engine","javascript","multiplayer"],"created_at":"2024-10-19T07:01:08.176Z","updated_at":"2026-01-22T01:16:33.519Z","avatar_url":"https://github.com/croquet.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# Worldcore\n\nWorldcore is a multi-player 3D game engine for the web, running on Croquet. It is modular, extensible, and cross-platform.\n\nIn this monorepo you will find\n\n* the packages making up Worldcore itself\n* example apps\n* and tutorials\n\n## Packages\n\nWorldcore consists of multiple packages, which all live in this repository under `packages/`:\n\n* `@croquet/worldcore-kernel`: provides the core  functionality, and re-exports all of Croquet's exports (`packages/kernel`)\n* `@croquet/worldcore-*`: optional packages (`packages/*`)\n* `@croquet/worldcore`: combines all of the above in a single package for convenience (`packages/full`)\n\n## Prerequisites:\n\n* `git` https://git-scm.com/download/\n* `node` https://nodejs.org/en/download/\n\nWe use `git` to manage our source code. To verify installation worked, type the command line `git --version` and you should see output similar to this:\n\n    git --version\n    =\u003e git version 2.37.1\n\nThe exact version does not matter. Similarly for Node, which we use for our build tools:\n\n    node --version\n    =\u003e v16.20.0\n\n## Preparation\n\nWe use Lerna to manage the packages in this monorepo.\n\nClone the Worldcore repo:\n\n    git clone https://github.com/croquet/worldcore.git\n\nInstall build tools (e.g. `lerna`):\n\n    cd worldcore\n    npm i\n\nThis step will also execute `lerna bootstrap` which sets up the repo for use.\n\n## Run and modify an example\n\n* Execute these commands (we do not show the output here, only the commands):\n\n      cd tutorials/tutorial01\n      npm start\n\n  This command will not stop until you press ctrl-c. It will continually rebuild files as you edit them.\n\n* Open http://localhost:1234/ in a web browser to see the \"tutorial1\" example app\n\n## Modify and test Worldcore packages\n\nTo test a locally modified Worldcore package, we need to make an example use the version you modified locally, rather than the released version specified in its `package.json`. This is the main purpose of `lerna`. Instead of installing packages from npm in `node_modules`, it will link your local version of the package into `node_modules`.\n\nAssuming you did not do the `lerna bootstrap` step above, but used a regular `npm i`, you would have this structure in the `node_modules/@croquet` directory, containing the officially published Worldcore packages:\n\n    ls -lF tutorials/tutorial01/node_modules/\\@croquet/\n    =\u003e croquet/\n    =\u003e worldcore/\n    =\u003e worldcore-kernel/\n    =\u003e worldcore-rapier/\n    =\u003e worldcore-three/\n    =\u003e worldcore-widget/\n    =\u003e worldcore-widget2/\n\nBut if you bootstrap the repo using [`lerna`](https://lerna.js.org):\n\n    npx lerna clean\n    npx lerna bootstrap\n\n... then the `node_modules/@croquet` directory will use the local `worldcore` via symlink:\n\n    ls -lF tutorials/tutorial01/node_modules/\\@croquet/\n    =\u003e worldcore@ -\u003e ../../../../packages/full\n\nwhich in turn links to all the individual local worldcore packages\n\n    ls -lF packages/full/node_modules/@croquet\n    =\u003e worldcore-kernel@ -\u003e ../../../kernel\n    =\u003e worldcore-rapier@ -\u003e ../../../rapier\n    =\u003e worldcore-three@ -\u003e ../../../three\n    =\u003e worldcore-widget@ -\u003e ../../../widget\n    =\u003e worldcore-widget2@ -\u003e ../../../widget2\n\nNow when you modify something in e.g. `packages/three` and rebuild `tutorial01`, it will use your version of the packages, rather than the released versions.\n\n## Publish Worldcore packages\n\nWe use `lerna` with \"fixed\" versioning, meaning each package will have the same version.\n\n1. (NB: skip this step for a prerelease) For each modified package:\n\n   * update `CHANGELOG.md` with the next release version\n\n2. If you have updated any dependencies (e.g., of the kernel on the Croquet library), make sure all packages have the latest dependencies\n\n        npx lerna clean\n        npx lerna bootstrap\n\n3. Commit everything (the next step needs a clean repo)\n\n4. Bump the version (NB: for a prerelease, use an alternative command as explained below)\n\n        npx lerna version --no-push\n\n   This will allow you to select the next version number,\n   and update all packages to that version, as well as their dependencies\n   (which includes demos, examples, and tutorials, as listed in `lerna.json`).\n\n   We use `--no-push` to get a chance to roll back if needed\n   (undo the version commit and delete the tag).\n\n5. Push to git\n\n        git push\n\n6. Log into npm (only needed once for each computer; requires that you have npm credentials for the Croquet organization)\n\n        npm login\n\n7. Publish to npm\n\n        npx lerna publish from-package\n\n### Prereleases\n\nFor prereleases we don't update the `CHANGELOG.md` files, and step 4 is adjusted to specify that private packages are not to be updated, and setting a prerelease id of `\"alpha\"` or `\"beta\"`:\n\n    npx lerna version --no-push --no-private --preid alpha\n    or\n    npx lerna version --no-push --no-private --preid beta\n\nand selecting one of the `pre*` options from the list.\n\nWhen publishing a prerelease, it will be tagged `\"pre\"` (as opposed to the default `\"latest\"`) as specified in `lerna.json`.\nThis will cause the prereleases to not be installed automatically, because the regular `npm i` command will only use the `latest` tag.\nTo install the latest pre-release, people would use e.g. `npm i @croquet/worldcore@pre`","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcroquet%2Fworldcore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcroquet%2Fworldcore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcroquet%2Fworldcore/lists"}