{"id":15146709,"url":"https://github.com/wearesimbol/simbol-world","last_synced_at":"2025-12-24T11:01:30.579Z","repository":{"id":57264902,"uuid":"119288392","full_name":"wearesimbol/simbol-world","owner":"wearesimbol","description":"Social and Communications platform WebXR sites with a self-sovereign identity","archived":false,"fork":false,"pushed_at":"2019-02-20T17:18:38.000Z","size":23513,"stargazers_count":13,"open_issues_count":9,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-03T05:17:08.909Z","etag":null,"topics":["augmented-reality","decentralized","identity","mixed-reality","virtual-reality","webxr"],"latest_commit_sha":null,"homepage":"https://simbol.io","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wearesimbol.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-01-28T19:02:00.000Z","updated_at":"2022-10-11T14:57:28.000Z","dependencies_parsed_at":"2022-09-06T22:22:24.259Z","dependency_job_id":null,"html_url":"https://github.com/wearesimbol/simbol-world","commit_stats":null,"previous_names":["holonet/holonet","wearesimbol/simbol"],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/wearesimbol/simbol-world","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wearesimbol%2Fsimbol-world","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wearesimbol%2Fsimbol-world/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wearesimbol%2Fsimbol-world/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wearesimbol%2Fsimbol-world/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wearesimbol","download_url":"https://codeload.github.com/wearesimbol/simbol-world/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wearesimbol%2Fsimbol-world/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267470062,"owners_count":24092352,"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","status":"online","status_checked_at":"2025-07-28T02:00:09.689Z","response_time":68,"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":["augmented-reality","decentralized","identity","mixed-reality","virtual-reality","webxr"],"created_at":"2024-09-26T12:04:02.110Z","updated_at":"2025-11-13T22:35:15.822Z","avatar_url":"https://github.com/wearesimbol.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# simbol\n\nEasily create social virtual worlds that anyone can interact with using Virtual Personas, a global identity system where people own their identities.\n\n## Quick Start\n\n\u003c!-- Remix Button --\u003e\n\u003ca href=\"https://glitch.com/edit/#!/remix/simbol-example\"\u003e\n  \u003cimg src=\"https://cdn.glitch.com/2bdfb3f8-05ef-4035-a06e-2043962a3a13%2Fremix%402x.png?1513093958726\" alt=\"remix button\" aria-label=\"remix\" height=\"33\"\u003e\n\u003c/a\u003e\n\nInstall via [npm](https://npmjs.com)\n\n```js\nnpm install --save simbol\n```\n\nThen import it using ES2015 Modules, CommonJS or with a `\u003cscript\u003e` tag:\n\n```js\nimport Simbol from 'simbol';\nconst Simbol = require('simbol');\n\u003cscript src=\"./node_modules/simbol/build/simbol.script.js\"\u003e\u003c/script\u003e\n```\n\nAnd finally, create a new `Simbol` instance and initialise it:\n\n```js\nconst config = {\n\tscene: {\n\t\tcanvas: document.querySelector('canvas'),\n\t\tsceneToLoad: 'path/to/my/scene.gltf'\n\t}\n};\nconst simbol = new Simbol(config); // If you're loading the ES Module or the CommonJS Module\n// or\nconst simbol = new Simbol.default(config); // If you're loading simbol.script.js\n\nsimbol.init();\n```\n\n## Configuration object\n\nSimbol accepts several configuration parameters detailed below:\n\n### hand\n\n`string`, default: `'left'`\n\nThe main user's hand. It's value can be either `'left'` or `'right'`\n\n### locomotion\n\n`boolean`, default `true`\n\nWhether Simbol should provide a default locomotion system\n\n### interactions\n\n`boolean`, default `true`\n\nWhether Simbol should provide a default interaction system\n\n### scene\n\n`object`\n\nAll configuration properties related to setting up the scene\n\n#### render\n\n`boolean`, default: `true`\n\nWhether it needs to take of Three.JS rendering by setting up a renderer and a camera. If this is set to `true`, `config.scene.camera` and `config.scene.renderer` should not be provided\n\n#### animate\n\n`boolean`, default: `true`\n\nWhether Simbol should start and control the render loop\n\n#### sceneToLoad\n\n`THREE.Scene|string`, **required**\n\nEither a THREE.Scene to be added, or a path to the .gltf/.glb file containing the scene\n\n#### canvas\n\n`HTMLCanvasElement`\n\nCanvas element where the scene will be rendered. This should only be provided if `config.scene.render` is `true`\n\n#### renderer\n\n`THREE.Renderer`\n\nIf you're rendering on your own, Simbol needs access to your renderer. This should only be provided if `config.scene.render` is `false`\n\n#### camera\n\n`THREE.Camera`\n\nIf you're rendering on your own, Simbol needs access to your camera. This should only be provided if `config.scene.render` is `false`\n\n### virtualPersona\n\n`object`\n\nAll configuration properties related to setting up the Virtual Persona\n\n#### signIn\n\n`boolean`, default: `true`\n\nWhether Simbol should attempt to sign the person in on #init\n\n### virtualPersona.multiVP\n\n`object|boolean`\n\nAll configuration properties related to setting up the MultiVP component. This can be set to `false` if your site takes care of the multiuser experience\n\n#### instantiate\n\n`boolean`, default: `true`\n\nWhether multiVP should be instantiated at the same time as Simbol. It will trigger the permission dialog to access the microphone, so you could might want to defer this to later\n\n#### socketURL\n\n`string`, default: `'ws://127.0.0.1'`\n\nThe URL to your WebSocket server\n\n#### socketPort\n\n`string|number`, default: `8091`\n\nThe port for your WebSocker server\n\n#### channelName\n\n`string`, default: `'default'`\n\nThe desired channel name to use for the WebRTC social experience\n\n#### peer\n\n`object`, default: `{trickle: true, objectMode: true}`\n\nConfiguration object for [simple-peer](https://github.com/feross/simple-peer#api)\n\n### Example Configuration Object\n\n```js\n{\n\thand: 'right',\n\tlocomotion: true,\n\tvirtualPersona: {\n\t\tsignIn: false,\n\t\tmultiVP: {\n\t\t\tsocketURL: 'wss://yourdomain/ws',\n\t\t\tsocketPort: '80',\n\t\t\tchannelName: 'coolchannel',\n\t\t\tconfig: {\n\t\t\t\ticeServers: [\n\t\t\t\t\t{urls:'stun:stun.l.google.com:19302'},\n\t\t\t\t\t{urls:'stun:stun1.l.google.com:19302'},\n\t\t\t\t\t{\n\t\t\t\t\t\turls: 'turn:yourdomain:7788',\n\t\t\t\t\t\tusername: 'testname',\n\t\t\t\t\t\tcredential: 'testpassword'\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t}\n\t},\n\tscene: {\n\t\trender: true,\n\t\tanimate: true,\n\t\tcanvas: document.querySelector('canvas'),\n\t\tsceneToLoad: 'path/to/cool/scene.gltf',\n\t\trenderer: new THREE.Renderer(), // Not necessary as render is true\n\t\tcamera: new THREE.PerspectiveCamera() // Not necessary as render is true\n\t}\n}\n```\n\n## Full API\n\nYou can check out the API in our [JSDoc](https://simbol.io/docs)\n\n## Third party libraries\n\nCurrently, [simbol](https://simbol.io) is dependent on several third party libraries:\n\n* [simple-peer](https://github.com/feross/simple-peer): Helper for WebRTC\n* [Three.js](https://threejs.org): Most used WebGL library\n* [Three.VRControls](https://github.com/mrdoob/three.js/blob/dev/examples/js/controls/VRControls.js): VR Controls helper from Three.JS\n* [Three.VREffect](https://github.com/mrdoob/three.js/blob/dev/examples/js/effects/VREffect.js): WebVR helper to render to an HMD\n* [three-bmfont-text](https://github.com/Jam3/three-bmfont-text): Three.JS helper to render text\n* [WebVR Polyfill](https://github.com/googlevr/webvr-polyfill): Polyfill for mobile devices\n* [uport-connect](https://github.com/uport-project/uport-connect): Underlying identity system that Virtual Personas is currently based on\n\n## Contributing\n\nCheck out the [Contribution guide](https://github.com/wearesimbol/simbol/blob/master/CONTRIBUTING.md)! If you have any questions, join our [community](http://spectrum.chat/simbol)\n\n## License\n\nThis program is free software and is distributed under an [MIT License](https://github.com/wearesimbol/simbol/blob/master/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwearesimbol%2Fsimbol-world","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwearesimbol%2Fsimbol-world","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwearesimbol%2Fsimbol-world/lists"}