Deskreen turns any device with a web browser into a secondary screen for your computer

Deskreen

Github All Releases

Deskreen Logo

Website: https://deskreen.com

release all os -- no code signing build-and-test codecov-generate codecov platform

▶️ Deskreen Youtube channel (video tutorials, demos, use cases for Deskreen day to day usage)

Deskreen turns any device with a web browser into a secondary screen for your computer

Deskreen is an electron.js based application that uses WebRTC to make a live stream of your desktop to a web browser on any device. It is built on top of Electron React Boilerplate For better security mechanism, end-to-end encryption is implemented, which is inspired by darkwire.io. The difference is that it is rewritten in Typescript and transformed to use node-forge instead of window.crypto.subtle. Why this was made? Because a client served with http without SSL, which makes window.crypto.subtle unavailable.


Deskreen FAQ


Get Started for translators

Want to add a new language support for Deskreen? Or you found a typo in existing translations of Deskreen App or website? Here are step by step guides:


Deskreen Github Discussion Threads

Read and Respect our Contributor Covenant Code of Conduct When Writing in our Discussion Threads.

Announcements Channel in Discussions

Some progress and updates on Deskreen can be found here.



  • Bugs General - for general bug reports if you don't know dev environment details. Please include Deskreen version! If you saw a bug and know your dev environment, and how to reproduce it, please consider opening a new Issue labeled as Bug and provide full details.

  • General Discussion - for general discussion. For example how did you find out about Deskreen? Or send cheers and thanks to anyone in Deskreen's community members. 🎉


  • Enhancements and New Features for Deskreen - share your ideas of what improvements can be done to Deskreen. Issues created with enhancement tag should be related to some concrete example of change in UI, Security patch, Performance improvement with some concrete notes on how you think the problem should be approached. Otherwise for general improvements with short paragraphs post your thoughts here.





NOTE: We are looking for a solution to get rid from Dummy Display Plugs while using Deskreen as a second screen. Your code support is highly valuable and welcome in Deskreen!

Display Dummy Plugs are good temporary solution, but it is not that good for everyone. If you are a seasoned Windows or Linux or MacOS hacker with a knowledge of low level tweaks and tricks, you can help us to make Deskreen better! On a long run Deskreen seeks for getting rid of Display Dummy Plugs, because most people don't like using them. Sometimes they can't use them because all available display ports are already taken. So we need to have native drivers for Win / Mac / Linux that will help to enable virtual display without Dummy Display Plugs. There are already working commercial solutions out there with their own drivers which they don't disclose, but this task is doable with a help of entire community. The goal of Deskreen is to enable community power and knowledge to overcome these technical challenges and make it a go-to second screen solution that everyone will benefit from!

We plan on making virtual display driver support for each of three main operating systems and place all OS related codes in ./drivers subdirectory of this project. You can find brief requirements for driver API in ./drivers/README.md.

Share your valuable knowledge on how to create virtual desktop without a Dummy Display Plug in this discussion thread.

Thank you in advance!

Installing with binaries

Windows

  • Get the .msi or .exe file from Releases

Mac

  • Get the .dmg file from Releases

  • Or get from Homebrew: brew install --cask deskreen

Linux

  • Debian and Ubuntu based distributions (deb)

  • Enterprise Linux based distributions (rpm)

  • Arch Linux AUR Package

  • AppImage for other distributions

Get Started for Developers

Run yarn test-all locally to make sure you don't have any errors, before submitting your PR

Prerequisites

You will need to have node npm and yarn installed globally on your machine.

  1. git clone this repo
  2. cd app/client; yarn install --frozen-lockfile ; cd ../../ ; yarn install --frozen-lockfile
  3. yarn dev -- run in dev mode with live updates

Useful yarn commands

yarn start -- run in production mode to test, without packaging yarn package -- to package an app and make executables available in release folder

for more yarn commands look at package.json

How to run tests

yarn test -- run all unit tests yarn build-ux && yarn test-ux -- run User Experience tests (no tests for app/client yet)

TODO: add e2e tests with host + client app interaction

run tests of host app

yarn test-watch-not-silent -- run tests in watch mode with console logs only for host app, excluding app/client yarn test -- -u -- update snapshots

run tests for app/client

yarn test -- run client tests in watch mode test:nowatch -- run client tests a single time yarn test -- -u -- update snapshots

Generate test coverage results

yarn coverage -- when run from project root, generates a coverage report for host and app/client

How to regenerate snapshots if you have tests failing when running yarn test?

in root ./ folder of project run this:

yarn jest --updateSnapshot

in Deskreen Viewer ./app/client folder of project run this:

cd app/client
SKIP_PREFLIGHT_CHECK=true yarn test:nowatch -- -u

Run yarn test-all locally to make sure you don't have any errors, before submitting your PR

Instruction for running a local Sonar Qube, community edition

Prerequisites

You need to install Sonar Qube community edition for your machine. And sonar-scanner. Then add sonar scanner to your PATH.

You need to run sonar-scanner separately on root directory and on app/client directory.

Luckily for you sonar scanner is automatically triggered after husky checks. So you only need to install and configure SonarCube locally and create two separate projects in SonarCube panel. First project for host app, and second project for client viewer app. TODO: add how to get started with local SonarCube for Deskreen in details.

Documentation

High level architecture design

high-level-design

WebRTC Screen Sharing Session Initiation Step by Step

sharng-session-init

Benchmarks:

Benchmarks can be found here

Note on versioning:

  • All versions git tags should start with v ex. v1.0.0
  • Before making a new release with git push <version-tagname> set version to <version-tagname> ! without v in the beginning! (ex. 1.0.0 -- not start with v) in these three files:
    • package.json -- in version key ex. 1.0.0
    • app/package.json -- in version key ex. 1.0.0
    • app/package-lock.json -- in version key ex. 1.0.0

Found typo on https://deskreen.com ?

You can submit your pull request with fix on Deskreen website locales repo

Maintainer

License

AGPL-3.0 License © Pavlo (Paul) Buidenkov

Copyright

Deskreen Logo PNG Image -- © Nadiia Plaunova

Apache 2.0 © blueprintjs

MIT © Electron React Boilerplate

simple-peer MIT. Copyright (c) Feross Aboukhadijeh

GNU General Public License (GPL) Version 2 node-forge

ISC Copyright (c) 2019, Mapbox pixelmatch

Thanks

🙏 Special thanks to Electron React Boilerplate community for providing a good kickstart template boilerplate code for electron project, that really helped a lot to get started with development of Deskreen.

🙏 Thanks to Github workflows for enabling a robust CI pipeline for the needs of 'forging' 🛠️ Deskreen.

🙏 Many thanks to all 🌍 open source community members and maintainers of libraries used in this project.

Donate

Click to donate on Deskreen's Patreon page

Click to donate on Deskreen's Opencollective page

Comments
  • Upgrade electron to V13 / Enable Pipewire v0.3 support

    Upgrade electron to V13 / Enable Pipewire v0.3 support

    Following #140 , upgrade electron in order to support pipewire>=0.3 by default.

    Users of xdg-desktop-portal>=1.10 beware: Multiple dialogs may show up, or just a black screen. Try running as follow:

    XDG_SESSION_TYPE=wayland2 deskreen --enable-features=UseOzonePlatform,WebRTCPipeWireCapturer

  • Sharing windows on non active desktop lagging

    Sharing windows on non active desktop lagging

    I'm using Arch Linux with Wayland (swaywm) on Thinkpad X1C gen7.

    When I share a window to my Android phone (Sony XZ2c) Brave browser, it works well.. As long as the window is being rendered on the laptop.

    When the window shared is not being rendered on the visible workspace on the source machine, the updates are very laggy. For example, if I try playing a video on my laptop and share it to my phone and navigate away from the workspace hosting the video on the laptop, the video sharing is only sending a frame every second or so.

  • Update Traditional Chinese translation

    Update Traditional Chinese translation

    yarn test --updateSnapshot
    yarn run v1.22.10
    $ cross-env BABEL_DISABLE_CACHE=1 RUN_MODE=test jest --silent && yarn test-client --updateSnapshot
    /bin/sh:行1: cross-env:未找到命令
    error Command failed with exit code 127.
    info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
    
    yarn start                
    yarn run v1.22.10
    $ yarn build
    $ yarn build-client && yarn build-main && yarn build-renderer
    $ cd app/client && cross-env SKIP_PREFLIGHT_CHECK=true yarn build
    /bin/sh:行1: cross-env:未找到命令
    error Command failed with exit code 127.
    info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
    error Command failed with exit code 127.
    info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
    error Command failed with exit code 127.
    info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
    
    
  • [F] Fix GitHub Actions trigger issues.

    [F] Fix GitHub Actions trigger issues.

    @pavlobu I move previous homebrew-pr actions to another action, the trigger condition is "on released". I hope it can fix the previous mistake...

  • [+] Auto update Homebrew cask from GitHub Actions.

    [+] Auto update Homebrew cask from GitHub Actions.

  • [U] Update comment of HOMEBREW_GITHUB_API_TOKEN's scope.

    [U] Update comment of HOMEBREW_GITHUB_API_TOKEN's scope.

  • Second screen not offered to share

    Second screen not offered to share

    Expected Behavior

    Both screens should be offered to share.

    Current Behavior

    Only the bigger primary screen is offered to be shared.

    Steps to Reproduce

    In the Select step, only the primary screen is offered to share

    Context

    I wanted to use an iPad as secondary screen. The secondary screen is cable connected and shows up in display settings of Windows. Windows is set to extend the Desktop to the secondary screen.

    Your Environment

    Windows 10 20H2 Deskreen 1.0.2 Binary Primary screen 5120 x 1440 Secondary screen 2048 x 1536

  • Shared App Windows (not entire desktop) disconnects after about 10 minutes

    Shared App Windows (not entire desktop) disconnects after about 10 minutes

    Host: Win 10 Sharing 1 specific app window to another desktop on the local network

    Issue: After about 10 minutes the app window on the client disconnects

    • if I go to the Connected Devices page on the host, there are no longer any connected devices

    Note: When sharing the entire desktop (same host/client) no disconnect occurs

    Thanks again!!

    Justin

  • Not all open windows/apps (Win 10) available in the share App Window option

    Not all open windows/apps (Win 10) available in the share App Window option

    Firstly great work on this app - and thanks for open sourcing it!!!!!!!!

    It seems that in the share App Window option (Win 10 host) that there is either

    • a limit of 10 windows to choose from
    • or not all open apps/windows are available to select

    I am attempting to share a specific app window but it is not available in the list

    • only 10 windows are shown as selectable - and I have more than 10 open

    Cheers

    Justin

  • Added German translation

    Added German translation

    • add german translation
    • resolved conflicts These might not be the most idiomatic but I think they're understandable. Still might have to work on some of them in the future.
  • Added initial Dutch language support

    Added initial Dutch language support

    Tried to keep the Capital Letter usage the same as with the English version. Unfortunately I'm not a NPM coder, so I couldn't run the yarn tests. Let me know if you can merge this or what needs to be done to get it into a proper state.

  • Why minimized app/window isn't working!

    Why minimized app/window isn't working!

    it stop streaming while minimized (not connection lost) app/window. after opening that app/window then it start streaming on the same generated link..

  • Only works on Wifi?

    Only works on Wifi?

    I have no trouble sharing my Mac screen to my iPhone but if I try to share a PC screen which is on the same network but is on wired ethernet, it does not connect. Is this a limitation of the program? If not, where am I going wrong?

  • How to get past the opening screen?

    How to get past the opening screen?

    Hi. I'm greatly appreciative of your efforts with Deskreen. I can't figure out how to get passed the opening screen which ask for donations to Ukraine. I'm using the flatpak version. If I click outside of the popup, it does not go away. If I hit escape, it does not go way. In short, I have no way of using Deskreen. Even after clicking on the donate links, the message remains. Is there any way to get passed this pop up?

  • FR: reverse roles, allow systems to _cast_ to a display

    FR: reverse roles, allow systems to _cast_ to a display

    I'd love to see an option to reverse the roles.

    Right now, the system that is mirroring a display initiates a connection to the system hosting the display.

    I would love to see an option to make the system mirroring a display the listener and the system hosting the display the initiator.

    This would allow me to setup a single display that other devices can cast their screen to. I know that in theory this can already be done with Google Chromecast and browser plugins, but in practice these solutions don't tend to work well (if at all).

  • feat: changed client code to dynamically call domain in address bar

    feat: changed client code to dynamically call domain in address bar

    To avoid fiddly code fetching the current protocol, domain and port from the window, one can simply use the path and the browser will automatically call the protocol://domain:port/ in the browser's address.

screen sharing for developers https://screego.net/
screen sharing for developers https://screego.net/

screego/server screen sharing for developers Huge thanks to sipgate for sponsoring this project! Intro In the past I've had some problems sharing my s

Jan 1, 2023
Fix Burp Suite's horrible TLS stack & spoof any browser fingerprint
Fix Burp Suite's horrible TLS stack & spoof any browser fingerprint

Awesome TLS This extension hijacks Burp's HTTP and TLS stack to make it more powerful and less prone to fingerprinting by all kinds of WAFs. It does t

Jan 2, 2023
Python's webbrowser in Go. Simple API for opening web pages on your default browser.

webbrowser webbrowser provides a simple API for opening web pages on your default browser. It's inspired on Python's webbrowser package but lacks some

Dec 12, 2022
Control your legacy Reciva based internet radios (Crane, Grace Digital, Tangent, etc.) via REST api or web browser.

reciva-web-remote Control your legacy Reciva based internet radios (Crane, Grace Digital, Tangent, etc.) via REST api or web browser. Usage This progr

May 3, 2022
DeepCopy a portable app that allows you to copy all forms of specified file types from your entire file system of the computer

DeepCopy a portable app that allows you to copy all forms of specified file types from your entire file system of the computer

Dec 20, 2021
Get ip address with Golang on your computer/system

Get IP Address with Golang Get IP address(es) with go-lang is a simple command line tool to get your IP address vpn, internal, external, etc. Usage ge

Sep 5, 2022
Easily and securely send things from one computer to another :crocodile: :package:
Easily and securely send things from one computer to another :crocodile: :package:

This project is supported by: croc is a tool that allows any two computers to simply and securely transfer files and folders. AFAIK, croc is the only

Jan 3, 2023
Running Golang on the Internet Computer?...
Running Golang on the Internet Computer?...

Golang on the Internet Computer Running Golang on the Internat Computer?! Yes, it is possible! This repository contains a simple example that shows ho

Jun 13, 2022
Go setup - Setting up Golang on my computer

This is my Journey Of Learning Go in 2022 I am going to first get some backgroun

Feb 4, 2022
Package raw enables reading and writing data at the device driver level for a network interface. MIT Licensed.

raw Package raw enables reading and writing data at the device driver level for a network interface. MIT Licensed. For more information about using ra

Dec 28, 2022
Optimize Windows's network/NIC driver settings for NewTek's NDI(Network-Device-Interface).

windows-ndi-optimizer[WIP] Optimize Windows's network/NIC driver settings for NewTek's NDI(Network-Device-Interface). How it works This is batchfile d

Apr 15, 2022
Go wrapper around Device Console Windows tool.

go-devcon Go wrapper around the Windows Device Console (devcon.exe). go install github.com/mikerourke/go-devcon Introduction Here's a brief overview

Nov 4, 2021
IRC bot for launch ddos attack, Mainly of scan target are IoT device that run linux and open default SSH port
IRC bot for launch ddos attack, Mainly of scan target are IoT device that run linux and open default SSH port

IRC bot for launch ddos attack, Mainly of scan target are IoT device that run linux and open default SSH port

Nov 10, 2021
An implementation of the FIDO Device Onboard (FDO) spec written in Rust.

fido-device-onboard-rs An implementation of the FIDO Device Onboard Specification written in rust. The current implementation targets specification ve

Dec 17, 2022
Nomad plugin for reserving device mappings used by ebs devices.

Nomad Skeleton Device Plugin Skeleton project for Nomad device plugins. This project is intended for bootstrapping development of a new device plugin.

Jan 5, 2022
Parse any web page for URLs and return the HTTP response code of each one.
Parse any web page for URLs and return the HTTP response code of each one.

ParseWebPage - Fully Functional WebPage Parser Parse any web page for URLs and return the HTTP response code of each one. Creators ?? Steven Williams

Oct 25, 2021
[WIP] gg is a portable tool to redirect the traffic of a given program to your modern proxy without installing any other programs.

gg gg (go-graft), was inspired by graftcp. go-graft is a pure golang implementation with more useful features. TODO: Use system DNS as the fallback. R

Dec 28, 2022
Standalone client for proxies of Windscribe browser extension

windscribe-proxy Standalone Windscribe proxy client. Younger brother of opera-proxy. Just run it and it'll start a plain HTTP proxy server forwarding

Dec 29, 2022
Send email and SMS broadcasts to your contacts. SMS are sent via your Android phone connected to your PC.

Polysender Send email and SMS broadcasts to your contacts. Polysender is a desktop application, so it does not require a complicated server setup. Ema

Aug 11, 2022