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

remoboard

v1.0.0

Published

Type into a phone running the Remoboard keyboard from Node.js — the official client for the Remoboard WebSocket protocol.

Readme

remoboard (Node.js)

Official Node.js client for Remoboard — type into a phone running the Remoboard keyboard, from code.

It connects to the WebSocket server the Remoboard keyboard extension hosts on the phone and speaks the versioned JSON protocol (v1).

Install

npm install remoboard

Requires Node 18+.

Quick start

On the phone: switch to the Remoboard keyboard. It shows a URL like http://192.168.1.20:7777 and a PIN. Use that IP and PIN:

import { RemoboardClient } from 'remoboard'

const rb = new RemoboardClient({ host: '192.168.1.20', pin: '482103' })

await rb.connect()            // resolves once the phone confirms pairing
await rb.type('Hello 世界 👋')  // appears on the phone instantly
await rb.enter()
await rb.type('second line')
rb.close()

API

new RemoboardClient(options)

| option | type | default | description | | ------------- | --------- | ------- | -------------------------------------------- | | host | string | — | Phone IP/hostname shown on the keyboard. | | pin | string | — | Pairing PIN shown on the keyboard. | | port | number | 7777 | Server port. | | pairTimeout | number | 8000 | ms to wait for the paired reply. | | reconnect | boolean | false | Auto-reconnect and re-pair on drop. |

Methods

  • connect(): Promise<this> — open + pair. Rejects with PairingError on a wrong PIN.
  • type(text) — insert text at the cursor (any Unicode; emoji/CJK safe).
  • enter() — newline / submit.
  • backspace() — delete one character back.
  • move('left'|'right'|'up'|'down') — move the cursor.
  • setClipboard(text) — write the phone's system clipboard.
  • getClipboard(): Promise<string> — read the phone's clipboard.
  • setQuickWords(string[]) — replace the user's quick words.
  • handoff(text) — hand text to the phone's host app.
  • ping() / close().

Input methods are chainable and synchronous (fire-and-forget over the socket); only connect() and getClipboard() return promises.

Events

client.on(name, handler):

  • connected — socket open (before pairing).
  • paired — pairing confirmed.
  • context{ before, after }, a live mirror of the focused phone field.
  • quickwordsstring[], the user's quick words.
  • clipboardstring, the phone's clipboard (reply to getClipboard or a push).
  • infostring, a human-readable status line.
  • close, error.

Notes

  • The phone and your machine must be on the same network and able to reach each other.
  • The server drops a connection after 5 wrong PINs.
  • The protocol is also implemented by the Python client and the MCP server.

License

MIT.