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

remote-clicker

v1.0.0

Published

Turns your laptop into a simple remote clicker for slide presentations

Readme

Remote Clicker

A small Node.js app that turns your laptop into a simple remote clicker for slide presentations. Run it on your laptop, open the web UI on your phone over Wi‑Fi, and tap Back or Next to send Left/Right Arrow keypresses to Keynote, PowerPoint, PDF viewers, or any app that advances slides with the keyboard.

What it does

  • HTTP API: POST /api/next and POST /api/prev trigger system-wide Right Arrow and Left Arrow keypresses on the laptop.
  • Web remote: Open /remote in a browser on your phone to get two large, touch-friendly buttons that call those endpoints.
  • No GUI framework: Headless service you start with node server.js; no Electron or Tauri.

Install and run

Global install (run from anywhere):

npm install -g remote-clicker
remote-clicker

Local install (in a project folder):

npm install remote-clicker
npx remote-clicker

Or clone and run from source:

npm install
npm start

Then:

Use a different port with the PORT environment variable:

PORT=8080 npm start

Opening the remote from your phone

  1. Ensure your phone and laptop are on the same Wi‑Fi network.
  2. When you start the server, it prints something like: On phone: http://192.168.1.x:38472/remote.
  3. Open that URL in your phone’s browser and use the Back / Next buttons.

If the IP isn’t shown, find your laptop’s local IP (e.g. in System Settings → Network) and use: http://<laptop-ip>:38472/remote.

macOS: Accessibility permission

For key simulation to work on macOS, the process running Node must have Accessibility permission:

  1. Open System Settings (or System Preferences) → Privacy & SecurityPrivacyAccessibility.
  2. Add your terminal app (Terminal, iTerm, etc.) or Node if you run the app directly.
  3. Restart the server after granting permission.

Without this, the app will run but keypresses will not be sent to other applications.

Configuration

  • PORT — HTTP port (default: 38472).
  • NEXT_KEY / PREV_KEY — Key names for next/prev (optional). Supported values in inputController.js include: Right, Left, Space, PageDown, PageUp, B. Defaults are Right and Left.

Online mode (Firebase)

When direct connection is blocked (e.g. port blocked, different network, or WebSocket unavailable), you can run the app in online mode so commands go through Firebase Realtime Database instead of direct HTTP.

  1. Create a Firebase project and enable Realtime Database. In the Firebase Console, get your project’s Web config (apiKey, authDomain, databaseURL, etc.) and download a service account key (JSON) for the Admin SDK.

  2. Add config in the project root:

    • Copy config.example.json to config.json.
    • Fill in firebase.server.databaseURL and firebase.server.serviceAccountPath (path to the service account JSON file).
    • Fill in firebase.client with the Web app config from the Firebase Console so the remote UI can write commands.
    • Optionally set firebase.commandPath (default: remoteClicker/command).
  3. Start with the --online flag:

    node server.js --online

    The server will listen on Firebase for commands at the configured path. The remote page still loads from your server; when you open /remote, it fetches /api/config, sees online: true, and sends Back/Next/touchpad actions to Firebase. The server (running on your laptop) receives them via a Firebase real-time listener and runs the same actions (keys, mouse move, click).

  4. Realtime Database rules: Restrict read/write to your command path as needed (e.g. allow authenticated users or a secret path). For quick testing you can allow read/write on remoteClicker; tighten rules before using on untrusted networks.

Online mode is a bit slower than direct HTTP but works when the phone cannot reach the laptop’s port directly.

Security note

This is an early version intended for trusted home/office networks. The server binds to 0.0.0.0 and has no authentication. Before using on untrusted networks, you should:

  • Restrict binding to 127.0.0.1 if you only need local access, or
  • Add a simple shared-secret token check on the API endpoints.

See comments in server.js for where to add these.

Publishing (maintainers)

  • GitHub: Create a new repo on GitHub, then:

    git remote add origin https://github.com/crownemmanuel/remoteClicker.git
    git branch -M main
    git push -u origin main

    Repository: github.com/crownemmanuel/remoteClicker.

  • npm: After logging in with npm login:

    npm publish

    Users can then install with npm install -g remote-clicker and run remote-clicker.

License

MIT