npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

open-mouse

v2.0.0

Published

Control your computer's mouse and keyboard from another device

Readme

Open Mouse

Turn any phone, tablet, or laptop into a wireless trackpad and keyboard for your computer. Run one command on the machine you want to control, open the printed URL on any other device on your network, and start controlling.

Open Mouse is free — no ads, no account, no companion app to install. Nothing passes through anyone's servers: your input goes directly from your browser to your computer over your own network.

Quick start

npm install -g open-mouse
open-mouse

Then open the URL it prints (e.g. http://192.168.1.50:3000) on your phone. Both devices must be on the same network.

Features

  • Trackpad gestures (from a phone or tablet):
    • One finger — move the pointer, with speed-based acceleration
    • Tap — left click
    • Two-finger drag — smooth scrolling with inertia (flick and it glides)
    • Two-finger tap — right click
    • Double-tap and drag — click-and-drag / text selection
  • Desktop client mode — open the page on another computer and click the trackpad to pointer-lock for 1:1 mouse control, with full keyboard passthrough (ESC to release)
  • Clicks — left, middle, and right click buttons
  • Keyboard — send text as you type (paste works too), plus Enter/Esc/Tab/arrows and media keys (volume, mute, play/pause)
  • Settings — pointer speed, scroll speed, and natural-scrolling toggle, saved on the device
  • Smooth scrolling everywhere — pixel-accurate deltas with fractional carry, converted to native scroll units per platform (pixel scrolling on macOS, high-resolution wheel-delta units on Windows, wheel clicks on Linux/X11)
  • Built for low latency — compact binary input frames, same-tick sends, TCP_NODELAY, no compression, and a live round-trip-time readout in the status pill
  • Cross-platform — macOS, Windows, and Linux servers; any modern browser as the client

How it works

Open Mouse runs a tiny local web server on the computer you want to control. Any device with a browser connects to it over your local network and gets a full-screen trackpad UI. Input events stream back over a WebSocket and are injected as real mouse and keyboard events via robotjs.

┌─────────────┐   WebSocket (LAN)   ┌──────────────────┐
│ Your phone   │ ──────────────────▶ │ Your computer     │
│ (browser UI) │   mouse/keys/scroll │ (open-mouse + OS) │
└─────────────┘                     └──────────────────┘

No video streaming, no polling, no cloud relay — just a lightweight local event stream, so latency stays low even on modest Wi-Fi.

Why not a "remote mouse" app?

Most remote-mouse products route your input through their servers: an app on your phone, a second app on your computer, an account to create, and a subscription to keep it switched on. Your tap travels to a data center — possibly in another country — and back to a machine sitting a few feet away, adding latency for no technical reason.

Open Mouse removes both the phone app and the server. Your device already ships with a universal client — the browser — so the only software runs on the computer being controlled, and your input takes the shortest path between your two devices: your own Wi-Fi. Nothing is metered, so nothing is billed.

Requirements

  • Node.js 14+ on the computer being controlled
  • Build tools for the robotjs native module if a prebuilt binary isn't available for your platform (Xcode Command Line Tools on macOS, build-essential on Linux, windows-build-tools on Windows)
  • Optional, Windows only: Python 3 with pyautogui (pip install pyautogui) — Open Mouse detects it automatically and uses it for much faster typing. Everything still works without it.

Run from source

Grab the package tarball from npm and run it directly:

npm pack open-mouse
tar -xzf open-mouse-*.tgz
cd package
npm install
npm start

Usage tips

  • Bigger trackpad: the keyboard panel is collapsed by default — toggle it with the ⌨ button in the header. Your choice is remembered.
  • Scroll feel: open settings (gear icon) to adjust scroll speed or flip natural scrolling. "Natural" means the content follows your fingers, like scrolling on the phone itself.
  • Dragging: double-tap and keep your finger down after the second tap, then move — the mouse button stays held until you lift.
  • From another computer: scrolling with a mouse wheel or trackpad on the page works directly; click the pad to pointer-lock for full control including keyboard shortcuts.

Troubleshooting

The pointer doesn't move (macOS) Grant accessibility permission to the terminal app running the server: System Settings → Privacy & Security → Accessibility. You may need to restart the server afterwards.

robotjs fails to install robotjs is a native module. Make sure you have build tools installed (see Requirements), then retry npm install. On Apple Silicon, ensure your Node and toolchain architectures match.

The page won't load from my phone

  • Confirm both devices are on the same network (guest Wi-Fi networks often isolate clients)
  • Use the LAN IP the server prints, not localhost
  • Check that a firewall isn't blocking port 3000
  • If port 3000 is taken by another app, stop it — the server will tell you on startup

Typing feels slow on Windows Install the optional Python helper: pip install pyautogui, then restart the server. You should see Python helper ready in the console.

Security note

Open Mouse gives full mouse and keyboard control to anyone who can reach the page — there is no authentication. It's designed for trusted local networks only. Do not expose port 3000 to the internet or run it on networks you don't trust.

License

PolyForm Shield 1.0.0. In plain terms: download it, use it — personally or at work — modify it, and share it freely. What you may not do is sell it or offer a competing product built from it. See the LICENSE file for the exact terms.