ownremote 0.0.0-stage β 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +211 -2
- package/cli.js +843 -0
- package/package.json +49 -4
- package/public/app.js +957 -0
- package/public/index.html +211 -0
- package/public/style.css +318 -0
- package/src/admin-client.js +64 -0
- package/src/config.js +125 -0
- package/src/daemon.js +43 -0
- package/src/input-helper.ps1 +163 -0
- package/src/input.js +152 -0
- package/src/launch-hidden.vbs +13 -0
- package/src/logo.js +137 -0
- package/src/screen-helper.ps1 +127 -0
- package/src/screen.js +285 -0
- package/src/server.js +567 -0
- package/src/startup.js +74 -0
- package/src/tray-helper.ps1 +183 -0
- package/src/tray.js +85 -0
- package/src/tunnel.js +129 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Adytm404
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,212 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
# OwnRemote
|
|
4
|
+
|
|
5
|
+
**Control your Windows PC from your phone**: trackpad, live keyboard and an opt-in screen preview,
|
|
6
|
+
over your Wi-Fi or from anywhere through Cloudflare Tunnel. No app to install on the phone, no account, no native modules.
|
|
7
|
+
|
|
8
|
+
[](https://www.npmjs.com/package/ownremote)  [](https://github.com/Adytm404/ownremote/blob/main/LICENSE)
|
|
9
|
+
|
|
10
|
+
<a href="https://github.com/Adytm404/ownremote/blob/main/docs/ownremote-trailer.mp4"><img src="https://raw.githubusercontent.com/Adytm404/ownremote/main/docs/trailer-preview.gif" alt="OwnRemote trailer" width="820"></a>
|
|
11
|
+
|
|
12
|
+
[βΆ Watch the full trailer (48 s, MP4)](https://github.com/Adytm404/ownremote/blob/main/docs/ownremote-trailer.mp4)
|
|
13
|
+
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Features
|
|
19
|
+
|
|
20
|
+
| | |
|
|
21
|
+
|---|---|
|
|
22
|
+
| π±οΈ **Trackpad** | Move, tap to click, two-finger tap for right click, two-finger scroll, hold-and-drag, physical-style Left / Middle / Right buttons. |
|
|
23
|
+
| β¨οΈ **Live keyboard** | Everything you type appears on the PC letter by letter, including emoji, accents, autocorrect and swipe typing. Sticky Ctrl / Alt / Shift / Win, arrows, Esc, Tab, F-keys, shortcuts (Ctrl+C/V/X/Z/A/S, Alt+Tab, Win+D) and media keys. |
|
|
24
|
+
| π₯οΈ **Screen preview** | Off by default. Turn it on to see your PC screen with a **virtual cursor** that sits exactly where the real one is (measured error β 0.05 px), zoom 1Γ / 2Γ / 3Γ that follows the cursor, 1β15 fps, adjustable resolution and quality, and identical frames skipped so a still screen costs β 0 KB/s. |
|
|
25
|
+
| π§βπ» **CLI dashboard** | Numbered menus to run in the terminal or in the background, manage paired devices, change settings and set up the tunnel. |
|
|
26
|
+
| πͺ **Windows integration** | Background mode with a tray icon, start with Windows (with an optional delay), Windows Firewall helper. |
|
|
27
|
+
| π **Cloudflare Tunnel** | Quick tunnel (random `*.trycloudflare.com` URL, no account) or a named tunnel on your own domain. |
|
|
28
|
+
| π **Pairing & sessions** | 6-digit pairing code, per-device tokens, revoke any device, lock pairing, per-IP and global brute-force limits. |
|
|
29
|
+
|
|
30
|
+
## Screenshots
|
|
31
|
+
|
|
32
|
+
<table>
|
|
33
|
+
<tr>
|
|
34
|
+
<td align="center"><img src="https://raw.githubusercontent.com/Adytm404/ownremote/main/docs/screenshots/phone-pair.png" width="190"><br><sub>Pair with a code</sub></td>
|
|
35
|
+
<td align="center"><img src="https://raw.githubusercontent.com/Adytm404/ownremote/main/docs/screenshots/phone-trackpad.png" width="190"><br><sub>Trackpad</sub></td>
|
|
36
|
+
<td align="center"><img src="https://raw.githubusercontent.com/Adytm404/ownremote/main/docs/screenshots/phone-keyboard.png" width="190"><br><sub>Live keyboard</sub></td>
|
|
37
|
+
<td align="center"><img src="https://raw.githubusercontent.com/Adytm404/ownremote/main/docs/screenshots/phone-screen.png" width="190"><br><sub>Screen preview</sub></td>
|
|
38
|
+
</tr>
|
|
39
|
+
</table>
|
|
40
|
+
|
|
41
|
+
<p align="center"><img src="https://raw.githubusercontent.com/Adytm404/ownremote/main/docs/screenshots/cli-main.png" width="640" alt="CLI dashboard"></p>
|
|
42
|
+
|
|
43
|
+
<table>
|
|
44
|
+
<tr>
|
|
45
|
+
<td align="center"><img src="https://raw.githubusercontent.com/Adytm404/ownremote/main/docs/screenshots/cli-sessions.png" width="420"><br><sub>Session / device management</sub></td>
|
|
46
|
+
<td align="center"><img src="https://raw.githubusercontent.com/Adytm404/ownremote/main/docs/screenshots/cli-tunnel.png" width="420"><br><sub>Cloudflare Tunnel</sub></td>
|
|
47
|
+
</tr>
|
|
48
|
+
<tr>
|
|
49
|
+
<td align="center"><img src="https://raw.githubusercontent.com/Adytm404/ownremote/main/docs/screenshots/cli-advanced.png" width="420"><br><sub>Advanced settings</sub></td>
|
|
50
|
+
<td align="center"><img src="https://raw.githubusercontent.com/Adytm404/ownremote/main/docs/screenshots/cli-settings.png" width="420"><br><sub>Settings</sub></td>
|
|
51
|
+
</tr>
|
|
52
|
+
</table>
|
|
53
|
+
|
|
54
|
+
<sub>Screenshots use demo data.</sub>
|
|
55
|
+
|
|
56
|
+
## Requirements
|
|
57
|
+
|
|
58
|
+
- Windows 10 or 11 (uses the built-in Windows PowerShell 5.1 and .NET Framework, nothing to compile)
|
|
59
|
+
- [Node.js](https://nodejs.org) 18 or newer
|
|
60
|
+
- A phone with a modern browser (Chrome, Safari, Samsung Internet, Firefox) on the same Wi-Fi, or anywhere with Cloudflare Tunnel
|
|
61
|
+
- Optional: [`cloudflared`](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/) for internet access (`winget install --id Cloudflare.cloudflared`)
|
|
62
|
+
|
|
63
|
+
## Quick start
|
|
64
|
+
|
|
65
|
+
```bat
|
|
66
|
+
npm install -g ownremote
|
|
67
|
+
ownremote
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
That's it: `ownremote` opens the dashboard from any Command Prompt, PowerShell or Windows Terminal window.
|
|
71
|
+
Update later with `npm install -g ownremote@latest`.
|
|
72
|
+
|
|
73
|
+
<details>
|
|
74
|
+
<summary>Run from source instead</summary>
|
|
75
|
+
|
|
76
|
+
```bat
|
|
77
|
+
git clone https://github.com/Adytm404/ownremote.git
|
|
78
|
+
cd ownremote
|
|
79
|
+
npm install
|
|
80
|
+
npm start
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Or double-click **`start.bat`** (it installs dependencies on the first run).
|
|
84
|
+
|
|
85
|
+
</details>
|
|
86
|
+
|
|
87
|
+
1. Choose **[1] Run in this terminal** or **[2] Run in the background**.
|
|
88
|
+
2. On your phone, open the address shown under **Open on phone** (or scan the QR code in *Session management*; it fills the code in for you).
|
|
89
|
+
3. Enter the 6-digit code. The phone is remembered, so next time it connects straight away.
|
|
90
|
+
|
|
91
|
+
If the phone cannot open the page, use **Settings β Allow port in Windows Firewall**.
|
|
92
|
+
|
|
93
|
+
## Using it
|
|
94
|
+
|
|
95
|
+
### Trackpad
|
|
96
|
+
|
|
97
|
+
| Gesture | Action |
|
|
98
|
+
|---|---|
|
|
99
|
+
| Slide one finger | Move the cursor |
|
|
100
|
+
| Tap | Left click |
|
|
101
|
+
| Two-finger tap | Right click |
|
|
102
|
+
| Three-finger tap | Middle click |
|
|
103
|
+
| Slide two fingers / the strip on the right | Scroll (vertical and horizontal) |
|
|
104
|
+
| Hold ~0.5 s, then slide | Drag |
|
|
105
|
+
| Left / Right buttons | Click; hold a button while sliding on the pad to drag |
|
|
106
|
+
|
|
107
|
+
Speed, acceleration, scroll speed, natural scrolling and haptics are in the β panel.
|
|
108
|
+
|
|
109
|
+
### Keyboard
|
|
110
|
+
|
|
111
|
+
Tap β¨. Type in the box and the text appears on the PC live. Tap **Ctrl / Alt / Shift / Win** once, then a key or letter, for a shortcut (Ctrl, then `c` = Ctrl+C). Hold arrows, Backspace or Del to repeat.
|
|
112
|
+
|
|
113
|
+
### Screen preview
|
|
114
|
+
|
|
115
|
+
Tap π₯. The preview only streams while it is on and pauses automatically when the phone screen turns off.
|
|
116
|
+
|
|
117
|
+
| Preset | Frames | Width | Typical data while the screen changes |
|
|
118
|
+
|---|---|---|---|
|
|
119
|
+
| Saver | 2 fps | 640 px | β 30β60 KB/s |
|
|
120
|
+
| **Normal** (default) | 5 fps | 960 px | β 100β200 KB/s |
|
|
121
|
+
| Sharp | 8 fps | 1280 px | β 300β500 KB/s |
|
|
122
|
+
|
|
123
|
+
Fine-tune frames per second (1β15), resolution and image quality in β β *PC screen preview*. The cursor position is sent separately about 60 times a second and predicted locally while your finger moves, so the virtual cursor stays smooth even at low frame rates. When the page is opened over the internet, it starts on the saver preset.
|
|
124
|
+
|
|
125
|
+
## CLI
|
|
126
|
+
|
|
127
|
+
```text
|
|
128
|
+
ownremote interactive menu
|
|
129
|
+
ownremote run run the server in this terminal
|
|
130
|
+
ownremote start run the server in the background
|
|
131
|
+
ownremote stop stop the server
|
|
132
|
+
ownremote status show status, address and pairing code
|
|
133
|
+
ownremote --help all commands and the data folder
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Main menu: run in terminal / background, session & device management, stop, and **Settings** (port, pairing code, firewall rule, server log, data folder, **Advanced settings** and **Cloudflare Tunnel**).
|
|
137
|
+
|
|
138
|
+
### Advanced settings
|
|
139
|
+
|
|
140
|
+
| Setting | What it does |
|
|
141
|
+
|---|---|
|
|
142
|
+
| Start with Windows | Runs the server in the background at every sign-in (a hidden launcher in the Startup folder) |
|
|
143
|
+
| Startup delay | Waits 0β600 s after sign-in, e.g. for Wi-Fi to connect |
|
|
144
|
+
| Show tray icon | Tray icon in background mode: address and code (click to copy), open the menu, new code, lock pairing, stop |
|
|
145
|
+
| Notify when a device connects | Windows notification when a phone connects or starts viewing the screen |
|
|
146
|
+
| Auto-lock pairing after a new device | Rejects further devices as soon as one has paired |
|
|
147
|
+
| Allow screen preview on phone | Turns the screen preview feature off completely |
|
|
148
|
+
| Reset all devices & pairing code | Every phone has to pair again |
|
|
149
|
+
|
|
150
|
+
## Cloudflare Tunnel
|
|
151
|
+
|
|
152
|
+
Use OwnRemote from mobile data or any other network, over HTTPS, without port forwarding.
|
|
153
|
+
|
|
154
|
+
- **Quick tunnel**: *Settings β Cloudflare Tunnel β Quick tunnel*. A random `https://*.trycloudflare.com` URL appears in the dashboard, the tray menu and as a QR code. A new URL can take up to a minute before it opens, and it changes every time the server starts.
|
|
155
|
+
- **Named tunnel** (your own domain): in the Cloudflare dashboard, *Zero Trust β Networks β Tunnels β Create a tunnel*, choose *Cloudflared*, copy the token, and add a public hostname pointing to `http://localhost:8787`. Then set the token and public URL in the CLI and pick *Named tunnel*.
|
|
156
|
+
|
|
157
|
+
OwnRemote starts and supervises `cloudflared` itself (restarting it with back-off if it exits).
|
|
158
|
+
|
|
159
|
+
## Security
|
|
160
|
+
|
|
161
|
+
- New devices need the 6-digit pairing code. After 5 wrong codes an IP is blocked for 60 s; after 20 wrong codes from any addresses within 10 minutes, pairing is blocked for 10 minutes (a new code lifts it).
|
|
162
|
+
- Each phone gets its own random token; only a SHA-256 hash is stored. Revoke devices any time from *Session management*.
|
|
163
|
+
- The admin API used by the CLI only answers on `127.0.0.1`, requires a secret token, and **rejects anything that arrives through Cloudflare or another proxy**.
|
|
164
|
+
- Behind the tunnel, the real client IP comes from `CF-Connecting-IP` (trusted only for connections from localhost).
|
|
165
|
+
- On your LAN the connection is plain HTTP, so use it on networks you trust, or use the tunnel (HTTPS). When the PC is reachable from the internet, enable **Auto-lock pairing**.
|
|
166
|
+
- The screen preview is off until the phone turns it on, the tray shows a notification when it starts, the CLI marks the device with `β screen`, and you can disable the feature entirely.
|
|
167
|
+
|
|
168
|
+
## How it works
|
|
169
|
+
|
|
170
|
+
```text
|
|
171
|
+
phone browser ββHTTP + WebSocketβββΊ Express server (Node.js)
|
|
172
|
+
ββ input-helper.ps1 SetCursorPos / mouse_event / SendInput (C# via Add-Type)
|
|
173
|
+
ββ screen-helper.ps1 CopyFromScreen β JPEG, cursor position at ~60 Hz
|
|
174
|
+
ββ tray-helper.ps1 WinForms NotifyIcon (background mode)
|
|
175
|
+
ββ cloudflared optional tunnel
|
|
176
|
+
CLI (cli.js) ββlocalhost admin APIβββΊ status, sessions, settings
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
The helpers are long-running PowerShell processes that compile small C# classes at start-up, so there are no native Node modules and no Visual Studio Build Tools. They are DPI-aware per monitor, so coordinates are physical pixels even with display scaling.
|
|
180
|
+
|
|
181
|
+
## Configuration
|
|
182
|
+
|
|
183
|
+
Settings, paired devices and the log live in `%APPDATA%\OwnRemote` (`config.json`, `devices.json`, `server.log`), so updating the package keeps your phones paired. A source checkout that already has a `data/` folder keeps using it. Set `OWNREMOTE_DATA_DIR` to use another folder (for a second instance, for example). `ownremote --help` prints the folder in use.
|
|
184
|
+
|
|
185
|
+
## Troubleshooting
|
|
186
|
+
|
|
187
|
+
- **The phone cannot open the page**: allow the port in the firewall (Settings β 3). If you once pressed *Cancel* on the Node.js firewall prompt, Windows created a *Block* rule for `node.exe`; remove it in *Windows Defender Firewall β Advanced settings β Inbound Rules*. Guest Wi-Fi networks often isolate clients.
|
|
188
|
+
- **Input does not reach a window**: windows running as Administrator (and UAC prompts) ignore input from normal processes; run OwnRemote as Administrator to control them.
|
|
189
|
+
- **The screen preview says the screen cannot be captured**: Windows does not allow capturing the lock screen or a UAC prompt; it resumes when you unlock. DRM-protected video shows black.
|
|
190
|
+
- **The address changed**: the current address is always on the main menu and in the tray menu.
|
|
191
|
+
|
|
192
|
+
## Project structure
|
|
193
|
+
|
|
194
|
+
```text
|
|
195
|
+
cli.js CLI menus
|
|
196
|
+
start.bat double-click launcher
|
|
197
|
+
public/ phone web app (trackpad, keyboard, screen preview)
|
|
198
|
+
src/server.js Express + WebSocket server, admin API
|
|
199
|
+
src/input.js mouse & keyboard controller (input-helper.ps1)
|
|
200
|
+
src/screen.js screen streaming (screen-helper.ps1)
|
|
201
|
+
src/tray.js tray icon (tray-helper.ps1)
|
|
202
|
+
src/tunnel.js Cloudflare Tunnel manager
|
|
203
|
+
src/startup.js Start with Windows / hidden background launcher
|
|
204
|
+
src/daemon.js background entry point
|
|
205
|
+
src/logo.js ASCII logo
|
|
206
|
+
docs/ screenshots and trailer
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
## License
|
|
211
|
+
|
|
212
|
+
[MIT](https://github.com/Adytm404/ownremote/blob/main/LICENSE)
|