{"id":13691134,"url":"https://github.com/adamyordan/laplace","last_synced_at":"2025-10-03T18:38:17.716Z","repository":{"id":37207588,"uuid":"249331466","full_name":"adamyordan/laplace","owner":"adamyordan","description":"Laplace is an open-source project to enable screen sharing directly via browser. Based on WebRTC for low latency peer-to-peer connections, and WebSocket implemented in golang for signaling.","archived":false,"fork":false,"pushed_at":"2021-07-17T23:02:37.000Z","size":1630,"stargazers_count":337,"open_issues_count":7,"forks_count":35,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-05-20T11:07:48.046Z","etag":null,"topics":["peer-to-peer","screencast","screensharing","webrtc","webrtc-signaling","websocket"],"latest_commit_sha":null,"homepage":"https://laplace.adamjordan.id/","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/adamyordan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-03-23T03:58:55.000Z","updated_at":"2025-05-18T06:37:26.000Z","dependencies_parsed_at":"2022-08-02T12:31:01.608Z","dependency_job_id":null,"html_url":"https://github.com/adamyordan/laplace","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/adamyordan/laplace","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adamyordan%2Flaplace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adamyordan%2Flaplace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adamyordan%2Flaplace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adamyordan%2Flaplace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adamyordan","download_url":"https://codeload.github.com/adamyordan/laplace/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adamyordan%2Flaplace/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266997677,"owners_count":24018944,"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-25T02:00:09.625Z","response_time":70,"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":["peer-to-peer","screencast","screensharing","webrtc","webrtc-signaling","websocket"],"created_at":"2024-08-02T17:00:40.754Z","updated_at":"2025-10-03T18:38:17.622Z","avatar_url":"https://github.com/adamyordan.png","language":"JavaScript","funding_links":[],"categories":["others","Projects"],"sub_categories":["Screen"],"readme":"# Laplace\n\nLaplace is an open-source project to enable screen sharing directly via browser.\nMade possible using WebRTC for low latency peer-to-peer connections, and WebSocket implemented in golang for WebRTC signaling.\n\n\u003e Demo video: https://youtu.be/E8cUaPrAlzE\n\n[![Laplace for gaming](./doc/laplace-for-gaming.png)](https://youtu.be/E8cUaPrAlzE)\n\n\n## Try Demo\n\nFor demo, you can visit https://laplace.madeby.monster/\n\n![Website screenshot](./doc/screenshot-website.png)\n\n\n## Motivation\n\nThere are already possible solutions to share your computer screen, e.g. TeamViewer.\nBut most of them require installations of software or plugins.\nWhat Laplace provides is a simple solution to this problem.\nFor users wanting to share their screen, all they need to do is to open a website page with their browsers, clicking some buttons, then share some session ID with their peers.\nNo installation or registration required.\n\n#### Solving the latency problem\n\nThis project also serves as a proof-of-concept (PoC) for screen sharing capability directly in browsers based on WebRTC.\nUsing WebRTC, real-time communication is made possible through peer-to-peer connections.\nThis proves to be very useful in solving one of the biggest problems is screen streaming: **Latency**. \nThe latency represents how long the delay is from the source to transmit to the remote client.\nIf you notice, this latency problem is usually highlighted by game streaming services, since gameplay relies heavily on the interactivity of inputs and outputs.\n\n\n#### Low server cost \nThis solution also solves the server cost problem, since the expensive operations (encoding and transmission) are done on client browsers.\nThe server is only needed for serving frontends and for WebRTC signaling.\n\n\n#### Possible Use Cases\n\n- Game streaming from PC to mobile devices.\n- Collaborative work where you need to share your screen with remote coworkers.\n- Mirroring presentation slides and demonstrations.\n\n\n## Installation\n\nBuild from source\n\n```bash\n$ git clone https://github.com/adamyordan/laplace.git\n$ cd laplace \u0026\u0026 go build -o laplace main.go\n$ ./laplace --help\n```\n\nOR, pull the pre-built docker image\n\n```bash\n$ docker pull adamyordan/laplace\n$ docker run adamyordan/laplace ./laplace --help\n```\n\n\n## Program Execution\n\nExecuting this project basically serves an HTTP server that will host the frontend and the WebSocket implementation.\nNote that you sometimes need to run HTTPs in order for browser to connect to websocket.\n\n```bash\n$ ./laplace --help\n  -addr string\n        Listen address (default \"0.0.0.0:443\")\n  -certFile string\n        TLS cert file (default \"files/server.crt\")\n  -keyFile string\n        TLS key file (default \"files/server.key\")\n  -tls\n        Use TLS (default true)\n```\n\nBy default, you can run the executable without any argument to listen to TLS port 443.\nA self-signed certificate files are provided to ease up development.\n\n```bash\n$ ./laplace\n2020/03/25 01:01:10 Listening on TLS: 0.0.0.0:443\n```\n\nYou can then open https://localhost:443/ to view Laplace page.\nYou may need to add certificate exceptions. In Chrome, you can type `thisisunsafe`.\n\n\n\n## Contributing\n\nPull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.\n\n\n## License\n\n[MIT](https://choosealicense.com/licenses/mit/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadamyordan%2Flaplace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadamyordan%2Flaplace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadamyordan%2Flaplace/lists"}