{"id":13499893,"url":"https://github.com/lovasoa/whitebophir","last_synced_at":"2025-05-13T21:04:40.526Z","repository":{"id":10293051,"uuid":"12412901","full_name":"lovasoa/whitebophir","owner":"lovasoa","description":"Online collaborative Whiteboard that is simple, free, easy to use and  to deploy","archived":false,"fork":false,"pushed_at":"2025-04-04T23:05:18.000Z","size":10530,"stargazers_count":2319,"open_issues_count":119,"forks_count":445,"subscribers_count":39,"default_branch":"master","last_synced_at":"2025-04-09T19:15:20.517Z","etag":null,"topics":["art","collaborative","draw","education","javascript","teaching","whiteboard"],"latest_commit_sha":null,"homepage":"https://wbo.ophir.dev","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lovasoa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["lovasoa"]}},"created_at":"2013-08-27T17:35:17.000Z","updated_at":"2025-04-09T04:54:03.000Z","dependencies_parsed_at":"2023-10-23T11:00:47.962Z","dependency_job_id":"a67f9bf9-de82-40ee-98e1-2eadd832ae60","html_url":"https://github.com/lovasoa/whitebophir","commit_stats":{"total_commits":637,"total_committers":39,"mean_commits":"16.333333333333332","dds":0.521193092621664,"last_synced_commit":"9201e54560b98e0b4c6dec2cbb8a514691e8e80f"},"previous_names":[],"tags_count":47,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lovasoa%2Fwhitebophir","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lovasoa%2Fwhitebophir/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lovasoa%2Fwhitebophir/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lovasoa%2Fwhitebophir/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lovasoa","download_url":"https://codeload.github.com/lovasoa/whitebophir/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251338897,"owners_count":21573638,"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":["art","collaborative","draw","education","javascript","teaching","whiteboard"],"created_at":"2024-07-31T22:00:45.982Z","updated_at":"2025-04-28T15:32:42.795Z","avatar_url":"https://github.com/lovasoa.png","language":"JavaScript","funding_links":["https://github.com/sponsors/lovasoa"],"categories":["JavaScript","置顶","开源项目","Software","Apps"],"sub_categories":["03、数据与知识管理","Communication - Custom Communication Systems","Communication"],"readme":"# WBO\n\nWBO is an online collaborative whiteboard that allows many users to draw simultaneously on a large virtual board.\nThe board is updated in real time for all connected users, and its state is always persisted. It can be used for many different purposes, including art, entertainment, design, teaching.\n\nA demonstration server is available at [wbo.ophir.dev](https://wbo.ophir.dev)\n\n## Screenshots\n\n\u003ctable\u003e\n \u003ctr\u003e\n  \u003ctd\u003e The \u003ci\u003e\u003ca href=\"https://wbo.ophir.dev/boards/anonymous\"\u003eanonymous\u003c/a\u003e\u003c/i\u003e board\n  \u003ctd\u003e \u003cimg width=\"300\" src=\"https://user-images.githubusercontent.com/552629/59885574-06e02b80-93bc-11e9-9150-0670a1c5d4f3.png\"\u003e\n  \u003ctd\u003e collaborative diagram editing\n  \u003ctd\u003e \u003cimg alt=\"Screenshot of WBO's user interface: architecture\" width=\"300\" src=\"https://user-images.githubusercontent.com/552629/59915054-07101380-941c-11e9-97c9-4980f50d302a.png\" /\u003e\n  \n  \u003ctr\u003e\n   \u003ctd\u003e teaching math on \u003cb\u003eWBO\u003c/b\u003e\n   \u003ctd\u003e \u003cimg alt=\"wbo teaching\" width=\"300\" src=\"https://user-images.githubusercontent.com/552629/59915737-a386e580-941d-11e9-81ff-db9e37f140db.png\" /\u003e\n   \u003ctd\u003e drawing art\n   \u003ctd\u003e \u003cimg alt=\"kawai cats on WBO\" width=\"300\" src=\"https://user-images.githubusercontent.com/552629/120919822-dc2c3200-c6bb-11eb-94cd-57a4254fbe0a.png\"/\u003e\n\u003c/table\u003e\n\n## Running your own instance of WBO\n\nIf you have your own web server, and want to run a private instance of WBO on it, you can. It should be very easy to get it running on your own server.\n\n### Running the code in a container (safer)\n\nIf you use the [docker](https://www.docker.com/) containerization service, you can easily run WBO as a container.\nAn official docker image for WBO is hosted on dockerhub as [`lovasoa/wbo`](https://hub.docker.com/r/lovasoa/wbo): [![WBO 1M docker pulls](https://img.shields.io/docker/pulls/lovasoa/wbo?style=flat)](https://hub.docker.com/repository/docker/lovasoa/wbo).\n\nYou can run the following bash command to launch WBO on port 5001, while persisting the boards outside of docker:\n\n```bash\nmkdir wbo-boards # Create a directory that will contain your whiteboards\nchown -R 1000:1000 wbo-boards # Make this directory accessible to WBO\ndocker run -it --publish 5001:80 --volume \"$(pwd)/wbo-boards:/opt/app/server-data\" lovasoa/wbo:latest # run wbo\n```\n\nYou can then access WBO at `http://localhost:5001`.\n\n### Running the code without a container\n\nAlternatively, you can run the code with [node.js](https://nodejs.org/) directly, without docker.\n\nFirst, download the sources:\n\n```\ngit clone https://github.com/lovasoa/whitebophir.git\ncd whitebophir\n```\n\nThen [install node.js](https://nodejs.org/en/download/) (v10.0 or superior)\nif you don't have it already, then install WBO's dependencies:\n\n```\nnpm install --production\n```\n\nFinally, you can start the server:\n\n```\nPORT=5001 npm start\n```\n\nThis will run WBO directly on your machine, on port 5001, without any isolation from the other services. You can also use an invokation like\n\n```\nPORT=5001 HOST=127.0.0.1 npm start\n```\n\nto make whitebophir only listen on the loopback device. This is useful if you want to put whitebophir behind a reverse proxy.\n\n### Running WBO on a subfolder\n\nBy default, WBO launches its own web server and serves all of its content at the root of the server (on `/`).\nIf you want to make the server accessible with a different path like `https://your.domain.com/wbo/` you have to setup a reverse proxy.\nSee instructions on our Wiki about [how to setup a reverse proxy for WBO](https://github.com/lovasoa/whitebophir/wiki/Setup-behind-Reverse-Proxies).\n\n## Translations\n\nWBO is available in multiple languages. The translations are stored in [`server/translations.json`](./server/translations.json).\nIf you feel like contributing to this collaborative project, you can [translate WBO into your own language](https://github.com/lovasoa/whitebophir/wiki/How-to-translate-WBO-into-your-own-language).\n\n## Authentication\n\nWBO supports authentication using [Json Web Tokens](https://jwt.io/introduction). This should be passed in as a query with the key `token`, eg, `http://myboard.com/boards/test?token={token}`\n\nThe `AUTH_SECRET_KEY` variable in [`configuration.js`](./server/configuration.js) should be filled with the secret key for the JWT.\n\nWithin the payload, you can declare the user's roles as an array.\nCurrently the only accepted roles are `moderator` and `editor`.\n\n- `moderator` will give the user an additional tool to wipe all data from the board. To declare this role, see the example below.\n- `editor` will give the user the ability to edit the board. This is the default role for all users.\n\n```json\n{\n  \"iat\": 1516239022,\n  \"exp\": 1516298489,\n  \"roles\": [\"moderator\"]\n}\n```\n\nModerators have access to the Clear tool, which will wipe all content from the board.\n\n## Board name verification in the JWT\n\nWBO supports verification of the board with a JWT.\n\nTo check for a valid board name just add the board name to the role with a \":\". With this you can set a moderator for a specific board.\n\n```json\n{\n  \"roles\": [\n    \"moderator:\u003cboardName1\u003e\",\n    \"moderator:\u003cboardName2\u003e\",\n    \"editor:\u003cboardName3\u003e\",\n    \"editor:\u003cboardName4\u003e\"\n  ]\n}\n```\n\neg, `http://myboard.com/boards/mySecretBoardName?token={token}`\n\n```json\n{\n  \"iat\": 1516239022,\n  \"exp\": 1516298489,\n  \"roles\": [\"moderator:mySecretBoardName\"]\n}\n```\n\nYou can now be sure that only users who have the correct token have access to the board with the specific name.\n\n## Configuration\n\nWhen you start a WBO server, it loads its configuration from several environment variables.\nYou can see a list of these variables in [`configuration.js`](./server/configuration.js).\nSome important environment variables are :\n\n- `WBO_HISTORY_DIR` : configures the directory where the boards are saved. Defaults to `./server-data/`.\n- `WBO_MAX_EMIT_COUNT` : the maximum number of messages that a client can send per unit of time. Increase this value if you want smoother drawings, at the expense of being susceptible to denial of service attacks if your server does not have enough processing power. By default, the units of this quantity are messages per 4 seconds, and the default value is `192`.\n- `AUTH_SECRET_KEY` : If you would like to authenticate your boards using jwt, this declares the secret key.\n\n## Troubleshooting\n\nIf you experience an issue or want to propose a new feature in WBO, please [open a github issue](https://github.com/lovasoa/whitebophir/issues/new).\n\n## Monitoring\n\nIf you are self-hosting a WBO instance, you may want to monitor its load,\nthe number of connected users, and various other metrics.\n\nYou can start WBO with the `STATSD_URL` environment variable to send it to a statsd-compatible\nmetrics collection agent.\n\nExample: `docker run -e STATSD_URL=udp://127.0.0.1:8125 lovasoa/wbo`.\n\n- If you use **prometheus**, you can collect the metrics with [statsd-exporter](https://hub.docker.com/r/prom/statsd-exporter).\n- If you use **datadog**, you can collect the metrics with [dogstatsd](https://docs.datadoghq.com/developers/dogstatsd).\n\n## Download SVG preview\n\nTo download a preview of a board in SVG format you can got to `/preview/{boardName}`, e.g. change https://wbo.ophir.dev/board/anonymous to https://wbo.ophir.dev/preview/anonymous. The renderer is not 100% faithful, but it's often good enough.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flovasoa%2Fwhitebophir","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flovasoa%2Fwhitebophir","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flovasoa%2Fwhitebophir/lists"}