Cross-platform desktop automation

Automate your
desktop with
Node.js

The powerful, intuitive library for desktop automation, E2E testing, and building intelligent desktop agents. Control mouse, keyboard, and screen across Windows, macOS, and Linux.

Prebuilt binaries
No build tools needed
automation.ts
import {
    mouse, Button, keyboard, straightTo, centerOf, getActiveWindow
} from "@nut-tree/nut-js";
import { useElementInspector } from "@nut-tree/element-inspector";
import { elements } from "@nut-tree/element-inspector/win";

useElementInspector();

// Get the active window
const window = await getActiveWindow();

// Find a button by its label and click it
const submitBtn = await window.find(
    elements.button({ title: "Submit" })
);
await mouse.move(straightTo(centerOf(submitBtn.region)));
await mouse.click(Button.LEFT);

// Type text with natural speed
await keyboard.type("Hello, nut.js!");

Trusted by developers and teams worldwide working on

Windows,macOSorLinux

Everything you need for
desktop automation

nut.js provides a comprehensive toolkit for controlling desktop applications programmatically with an intuitive, promise-based API.

Mouse Control

Precise mouse movements, clicks, drags, and scrolling with configurable speed and easing functions.

Keyboard Input

Type text, press key combinations, and simulate any keyboard interaction with ease.

Smart Element Search

Find elements by image, text, color, or UI structure. Locate buttons, inputs, and controls directly.

Screen Capture

Capture screenshots, specific regions, or read screen content programmatically.

Window Management

Find, focus, resize, and manage application windows across your desktop.

Blazing Fast

Optimized native bindings deliver high performance for demanding automation tasks.

Built for every use case

From testing to automation to AI agents, nut.js adapts to your needs.

๐Ÿงช

E2E Testing

Test desktop applications with the same ease as web apps. Validate UI states, automate user flows, and catch bugs before your users do.

  • Visual regression testing
  • Jest & Mocha integration
  • CI/CD pipeline ready
Learn more
โšก

Desktop Automation

Eliminate repetitive tasks. Automate data entry, file management, application workflows, and everything in between.

  • Workflow automation
  • Batch processing
  • Legacy app integration
Learn more
๐Ÿค–

Desktop Agents

Build intelligent agents that interact with desktop applications. Perfect for AI-powered assistants and autonomous workflows.

  • LLM integration ready
  • Visual understanding
  • Action execution
Learn more
๐ŸŽฎ

Game Testing

Automate QA for game development. Run E2E tests, catch visual regressions, and script complex gameplay scenarios across platforms.

  • E2E & regression testing
  • Visual QA automation
  • CI-ready test scripts
Learn more

Simple, powerful API

Get started in minutes with an intuitive, promise-based interface.

e2e-test.spec.ts
import {
    mouse, Button, keyboard, straightTo, centerOf, getActiveWindow
} from "@nut-tree/nut-js";
import { useElementInspector } from "@nut-tree/element-inspector";
import { elements } from "@nut-tree/element-inspector/win";

useElementInspector();

describe("Login Flow - UI Elements", () => {
  it("should login successfully", async () => {
    const window = await getActiveWindow();

    // Find login button by UI element
    const loginBtn = await window.find(
      elements.button({ title: "Sign In" })
    );
    await mouse.move(straightTo(centerOf(loginBtn.region)));
    await mouse.click(Button.LEFT);

    // Find input field and enter credentials
    const emailField = await window.find(
      elements.textInput({ id: "email" })
    );
    await mouse.move(straightTo(centerOf(emailField.region)));
    await mouse.click(Button.LEFT);
    await keyboard.type("user@test.com");
  });
});
desktop-agent.ts
import {
    screen, mouse, Button, straightTo
} from "@nut-tree/nut-js";

async function executeAction(action: Action) {
    // Capture current screen state
    const screenshot = await screen.capture();

    // Let AI analyze the screen
    const target = await analyzeWithLLM(
        screenshot, action.description
    );

    await mouse.move(straightTo(target.coordinates));
    await mouse.click(Button.LEFT);
}
3
Platforms supported
1
Command to install
0
Build steps required
100%
Prebuilt & ready to go

Simple, transparent pricing

Choose the plan that fits your needs. All plans include prebuilt packages with zero setup hassle.

Core

Essential desktop automation

$20/month

or $220/year(1 month free)

  • Prebuilt @nut-tree/nut-js packages
  • Mouse & keyboard control
  • Screen capture
  • Window management
  • Cross-platform (Windows, macOS, Linux)
  • Stable and snapshot releases
Get Started
Most Popular

Solo

Full power for professionals

$75/month

or $825/year(1 month free)

  • Everything in Core, plus:
  • @nut-tree/bolt โ€” Input monitoring, window search and more
  • @nut-tree/nl-matcher โ€” On-screen image search
  • @nut-tree/plugin-ocr โ€” On-device text recognition (OCR) and search
  • @nut-tree/plugin-azure โ€” Azure AI Vision based text recognition (OCR) and search
  • @nut-tree/element-inspector โ€” UI element detection
  • All future plugins included
  • Priority support
Get Started

Team

For teams and enterprises

Custom

Volume discounts

  • Everything in Solo, plus:
  • Multi-user license management
  • Centralized access control
  • Volume discounts based on team size
  • Priority support for all team members
  • Custom invoicing options
Contact Sales

All prices include VAT where applicable. Prices shown are representative for Germany and may vary by country.
View full pricing details ยท Looking for the open-source version? Check out GitHub

Loved by developers

"nut.js provides a wide range of desktop automation, including mouse manipulation, keyboard input, and screen recognition. Thanks to its high-quality support, we had no concerns."

Shiro Fukuda
Shiro Fukuda

CEO, AUTORO Inc.

"nut.js is an impressive library for desktop automation. Its user-friendly API and professional collaboration make integration seamless, helping us achieve new levels."

Daniel Gal
Daniel Gal

CEO, nele.ai

"@Simon I applied all your recommendations and now the whole test application is way more robust and performant."

Benjamin Mahr
Benjamin Mahr

octologs.com

"Man, honestly, it's such a nice project! I actually tried it already in a Mac, a Linux and a Windows machine and for all of them ๐Ÿ‘Œ"

Reddit User

Reddit

"Thank you for your hard work! I use it a lot."

Reddit User

Reddit

"Are you kidding, this is the real deal. Keep it up!"

Discord User

Discord

"Hey Simon, just joined to say nut.js is awesome, thanks for making it! ๐Ÿ™‚"

Discord User

Discord

"I can't wait to find a good idea to give this a shot. It looks super clean."

Discord User

Discord

"Very nice! Kind of like webdriver but for the desktop ๐Ÿ˜„"

Discord User

Discord

"Works perfect, and x100 times faster than robotjs! Great job!"

Discord User

Discord

"Great plugin btw. Leaves robotjs in the dust."

Discord User

Discord

"I've been using nut.js since end of 2021, and it's one of the most amazing tools I've ever used."

Discord User

Discord

"Kudos to nut js!! Such a nice library @s1hofmann"

GitHub User

GitHub

Expert Services

Need help with your automation project?

With almost a decade of experience in desktop automation, I've helped companies tackle their most challenging automation and testing scenarios. From legacy applications to cutting-edge AI agentsโ€”I've seen it all.

  • Native application testing
  • Game automation
  • Citrix & virtual apps
  • Remote desktop & VNC
S

Simon Hofmann

Desktop Automation Expert

Creator of nut.js, the #1 Node.js desktop automation framework. I've spent years building tools and solutions for desktop automation challenges that others thought were impossible.

E2E TestingDesktop AutomationAI AgentsConsulting
nut.js logo

Ready to crack the nut?

Start automating your desktop in minutes. No build tools needed, no complex setupโ€”just purchase a license and go.