Deskreen CE: a WebRTC screen stream on Electron, built from two npm trees
Deskreen turns any device with a web browser into a secondary screen for your computer. ⭐️ Star to support our work!
At a glance
- What is it?
- Deskreen CE turns any browser-equipped device into a second screen by streaming your desktop over WebRTC from an Electron app. The Community Edition is AGPL-3.0 and self-hosted, but it ships without a feature list, runs on a separate client-viewer package, and its --ip flag changes the address used for QR codes and connection URLs.
- Who is it for?
- Adopt Deskreen CE if you want a phone or tablet as a second screen over your own network, you can satisfy node>=v23 and npm>=10, and you are willing to read the Playbook of your network interfaces yourself. Do not adopt it if you need the Pro feature set, because the repository never says which features CE omits, and the Community Edition carries no comparison table to plan against.
- Can I use it commercially?
- Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
- Is it still maintained?
- Yes. The repository last received commits 129 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.
Star history
- pavlobu/deskreen21,750 ★ · +256
| Repository | 2026-09-21 | 2026-11-14 |
|---|---|---|
| pavlobu/deskreen | 21.5k | 21.8k |
256 Stars in the last 54 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
The install is four commands and two separate npm trees
Deskreen is an Electron application that makes a live stream of your screen with WebRTC and serves it to a browser on any device, on macOS, Windows and Linux. Getting it from source takes four steps, and the sequence matters because the project is not a single package:
git clone this repo
npm i
cd ./src/client-viewer && npm i && cd ../..
npm run clean && npm run build && npm run startStep three is the one that trips people up. `src/client-viewer` is a separate package with its own dependency tree, so a plain `npm i` at the root leaves the viewer half uninstalled, and `npm run build` also builds the viewer through `buildClientViewer`. Prerequisites are pinned hard: node>=v23 and npm>=10.
The --ip flag rewrites the QR code, not the interface Deskreen listens on
Deskreen accepts `--local-ip` or `--ip` to choose the address it advertises, and this is the flag most people reach for on a machine with several network interfaces. What it changes is narrower than the name suggests. The app uses the specified IP for QR codes and connection URLs, while still monitoring the actual network interface status for WiFi connection detection.
So the flag edits what gets printed and scanned. On macOS:
open -a "Deskreen CE" --args --ip 192.168.1.100Consequence for the reader: a wrong address here produces a QR code that points at an address nothing is serving, and the WiFi detection logic will not warn you because it is watching the real interface, not the value you passed. Find the address first rather than guessing it. On macOS and Linux that is `ipconfig getifaddr en0` or `ifconfig | grep "inet "`, and on Windows it is `ipconfig`.
Every start begins with rm -rf on three build directories
The documented run path is `npm run clean && npm run build && npm run start`, and the clean step is not a formatter. From package.json:
"clean": "rm -rf dist out src/client-viewer/dist"Three directories go, unconditionally, before anything builds: `dist`, `out` and the viewer's own `dist`. That is what makes repeated local runs reproducible after a half-finished build, and it is also why the step is destructive rather than incremental. Anyone planning to keep local build output outside the tree, or working on a checkout with uncommitted changes in those directories, should know the ordering before they run it.
One more hook fires before you ever type a command. `postinstall` runs `electron-builder install-app-deps` after `npm i`, so the first install pulls the packaging toolchain in as a side effect of the dependency install.
Three typecheck projects gate the build, and dev skips all of them
The build script is a chain, and the first link is verification:
"build": "npm run typecheck && npm run buildClientViewer && electron-vite build"`typecheck` in turn fans out across three separate tsconfig projects, `typecheck:client-viewer`, `typecheck:node` and `typecheck:web`, each running `tsc --noEmit` against its own config file, `src/client-viewer/tsconfig.app.json`, `tsconfig.node.json` and `tsconfig.web.json`. A type error anywhere fails the build before a single file is emitted.
The development path skips all of it. `dev` runs `concurrently` across two processes, the Electron dev server and the viewer dev server, and the viewer one is pinned to a fixed port:
"devClientViewer": "cd src/client-viewer && npm run dev -- --host --port=5174"Port 5174 and the `--host` flag are hardcoded, so a second checkout on the same machine collides on that port, and the host flag exposes the viewer dev server beyond localhost.
Community Edition ships no list of what it leaves out
Deskreen is a two-edition product, and the repository is the free half. The README says the open-source Community Edition has limited features and points anyone who needs more to the Pro version at deskreen.com/download, described as being for when it is released. The AGPL-3.0 licence covers Pavlo Buidenkov's code; nothing about Pro's implementation is in this tree.
Here is the practical gap: the README does not state which features Pro adds or which the Community Edition withholds. There is no comparison table to plan against, so you cannot determine from this repository whether the feature you need is on the free side. That matters for the two questions people search for most, whether Deskreen is free and whether it is open source, because the honest answer differs by edition. The README does put one number on record: over 2M downloads during 5 years since launch.
Each target architecture has its own build script, and ia32 is not the default
electron-builder drives packaging, and the scripts distinguish architectures explicitly rather than folding them into one flag. Windows comes in three variants, `build:win` for the default target, `build:win:ia32` for 32-bit and `build:win:arm64` for ARM:
"build:win:arm64": "npm run build && electron-builder --win --arm64"macOS is split the same way with `build:mac` and `build:mac:arm64`. The Windows scripts prefix the full `npm run build`, so each rebuilds from typecheck rather than reusing a prior bundle, while `build:mac` runs `buildClientViewer` and `electron-vite build` directly and skips typecheck. There is a separate `build:unpack` that runs `electron-builder --dir` for a directory output instead of an installer.
Configuration lives in `electron-builder.yml` and `dev-app-update.yml`, with packaging assets under `build/` and `resources/`. One leftover from the toolchain template shows up in package.json: the `homepage` field still reads `https://electron-vite.org` while `author` reads deskreen.com, so metadata you scrape from the manifest gets the build tool's address, not the project's.
AGPL-3.0 covers Deskreen, and everything it bundles carries its own licence
The project is AGPL-3.0, and the copyright line names the maintainer, Pavlo Buidenkov, who is also the sole entry under Maintainer. Nothing in the repository suggests a team behind it, so the bus factor and the licensing contact are the same person.
The licence section is longer than the project's own licence line, because Deskreen bundles code under many licences. electron-vite, React, Vite, Electron Builder, simple-peer and darkwire.io are all MIT. blueprintjs is Apache 2.0. tweetnacl is ISC, credited to Dmitry Chestnykh, Devi Mandiri and contributors. simple-peer and tweetnacl are the two names worth noting for anyone auditing the screen path, since a peer connection library and a crypto library sit exactly where the video you send lives, so reviewing what Deskreen ships means reading past LICENSE into the dependency list as well.
Editorial conclusion
Adopt Deskreen CE if you want a phone or tablet as a second screen over your own network, you can satisfy node>=v23 and npm>=10, and you are willing to read the Playbook of your network interfaces yourself. Do not adopt it if you need the Pro feature set, because the repository never says which features CE omits, and the Community Edition carries no comparison table to plan against. Before running anything, confirm that the IP you pass to --ip is the address the viewer device can actually reach, since the flag only rewrites the QR code and connection URLs while interface monitoring stays on the real network state.
Frequently asked questions
How does Deskreen work?
Deskreen is an electron.js based application that uses WebRTC to make a live stream of your computer screen to a web browser on any device. It runs on macOS, Windows and Linux.
Is Deskreen free?
The Community Edition in this repository is free and carries an AGPL-3.0 licence. The README points to a Pro version with more features "when it is released", but it does not say which features the Community Edition leaves out.
Is Deskreen open source?
The Community Edition is, under the AGPL-3.0 licence, with the bundled libraries listed individually under their own terms. The Pro version is not covered by this repository.
How do I install Deskreen on Linux?
Packaged builds include an AppImage and a .deb/.rpm package that installs deskreen-ce, usually under /usr/bin or /opt. To build from source you need node>=v23 and npm>=10, then run npm i plus a second npm i inside src/client-viewer before npm run build.
Can I use Deskreen as a second monitor?
That is the stated purpose of the project: turning any device with a web browser into a secondary screen for your computer. The viewer runs in a browser, so no application is needed on the second device.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/pavlobu-deskreen)Star history chart for your README
[](https://hysenlabs.com/projects/pavlobu-deskreen)Was this useful?