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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@jitsi/robotjs

v0.6.13

Published

Node.js Desktop Automation.

Downloads

11,303

Readme

Important note

This repository is a fork of the original robotjs so we can generate prebuilt packages. All changes have been upstreamed, and should they be applied and prebuilt packages provided this fork shall be abandoned.

Node.js Desktop Automation. Control the mouse, keyboard, and read the screen.

RobotJS supports Mac, Windows, and Linux.

This is a work in progress so the exported functions could change at any time before the first stable release (1.0.0). Ideas?

Check out some of the cool things people are making with RobotJS! Have your own rad RobotJS project? Feel free to add it!

Contents

Installation

Install RobotJS using npm:

npm install @jitsi/robotjs

It's that easy! npm will download one of the prebuilt binaries for your OS.

You can get npm here if you don't have it installed.

If you need to build RobotJS, see the building section. Instructions for Electron.

Examples

Mouse
// Move the mouse across the screen as a sine wave.
var robot = require("@jitsi/robotjs");

// Speed up the mouse.
robot.setMouseDelay(2);

var twoPI = Math.PI * 2.0;
var screenSize = robot.getScreenSize();
var height = (screenSize.height / 2) - 10;
var width = screenSize.width;

for (var x = 0; x < width; x++)
{
	y = height * Math.sin((twoPI * x) / width) + height;
	robot.moveMouse(x, y);
}
Keyboard
// Type "Hello World" then press enter.
var robot = require("@jitsi/robotjs");

// Type "Hello World".
robot.typeString("Hello World");

// Press enter.
robot.keyTap("enter");
Screen
// Get pixel color under the mouse.
var robot = require("@jitsi/robotjs");

// Get mouse position.
var mouse = robot.getMousePos();

// Get pixel color in hex format.
var hex = robot.getPixelColor(mouse.x, mouse.y);
console.log("#" + hex + " at x:" + mouse.x + " y:" + mouse.y);

Read the Wiki for more information!

API

The RobotJS API is hosted at https://robotjs.io/docs/syntax.

Building

Please ensure you have the required dependencies before installing:

  • Windows
    • windows-build-tools npm package (npm install --global --production windows-build-tools from an elevated PowerShell or CMD.exe)
  • Mac
    • Xcode Command Line Tools.
  • Linux
    • Python (v2.7 recommended, v3.x.x is not supported).
    • make.
    • A C/C++ compiler like GCC.
    • libxtst-dev and libpng++-dev (sudo apt-get install libxtst-dev libpng++-dev).

Install node-gyp using npm:

npm install -g node-gyp

Then build:

node-gyp rebuild

See the node-gyp readme for more details.

Plans

  • √ Control the mouse by changing the mouse position, left/right clicking, and dragging.
  • √ Control the keyboard by pressing keys, holding keys down, and typing words.
  • √ Read pixel color from the screen and capture the screen.
  • Find an image on screen, read pixels from an image.
  • Possibly include window management?

Progress

| Module | Status | Notes | | ------------- |-------------: | ------- | | Mouse | 100% | All planned features implemented. | | Keyboard | 100% | All planned features implemented. | | Screen | 85% | Image search, pixel search. | | Bitmap | 0% | Saving/opening, png support. |

FAQ

Does RobotJS support global hotkeys?

Not currently, and I don't know if it ever will. I personally use Electron/NW.js for global hotkeys, and this works well. Later on I might add hotkey support or create a separate module. See #55 for details.

Can I take a screenshot with RobotJS?

Soon! This is a bit more complicated than the rest of the features, so I saved it for last. Luckily the code is already there, I just need to write the bindings, and I've already started. Subscribe to #13 for updates.

Why is <insert key> missing from the keyboard functions?

We've been implementing keys as we need them. Feel free to create an issue or submit a pull request!

How about multi-monitor support?

The library doesn't have explicit multi-monitor support, so anything that works is kind of on accident. Subscribe to #88 for updates.

For any other questions please submit an issue.

Story

I'm a huge fan of AutoHotkey, and I've used it for a very long time. AutoHotkey is great for automation and it can do a bunch of things that are very difficult in other languages. For example, it's imagesearch and pixel related functions are hard to reproduce on Mac, especially in scripting languages. These functions are great for automating apps that can't be automated like Netflix. This has never been a big deal since I've always used Windows at work, but for the past few years I've been using Mac exclusively.

I like AutoHotkey, but I like Node.js more. By developing RobotJS I get an AutoHotkey replacement on Mac (finally!), and I get to use my favorite language.

TLDR: There's nothing like AutoHotkey on Mac, so I'm making it.

Publishing

On every push to main branch, the .github/workflows/ci.yml will create a new version and publish to npm.

If a major or minor release is required, use respective key words in the commit message, see https://github.com/phips28/gh-action-bump-version#workflow

License

MIT

Based on autopy. Maintained by Jason Stallings.