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

anybody

v1.0.34

Published

**Anybody** is a web automation library that works for you, so you can focus on the things that matter. It handles all the tedious website interactions while you spend your time on what's important. Let it take care of the repetitive tasks, so you don't h

Downloads

77

Readme

Anybody: Works for you 😉

Anybody is a web automation library that works for you, so you can focus on the things that matter. It handles all the tedious website interactions while you spend your time on what's important. Let it take care of the repetitive tasks, so you don't have to.


Quick Start

Here’s how you can get started with Anybody in just a few lines of code:

import anybody from 'anybody';

anybody
    .online({ hidden: true })  // Start a browser
    .goto('https://example.com') // Go to a website
    .click({ text: 'Login' })    // Click a button with the text "Login"
    .type({ placeholder: 'Username' }, 'myuser')  // Type into the username field
    .type({ placeholder: 'Password' }, 'mypassword')  // Type into the password field
    .click({ text: 'Submit' })   // Click the submit button
    .close();  // Close the browser

Real-World Examples

Here are some simple examples of how you can use Anybody for everyday tasks.


Example 1: Searching on YouTube

anybody
    .online({ hidden: false })  // Show the browser window
    .goto("https://youtube.com")  // Go to YouTube
    .type("input[name='search_query']", "incredimo")  // Type a search term
    .click("button[aria-label='Search']")  // Click the search button
    .sleep({ seconds: 10 })  // Wait for 10 seconds
    .close();  // Close the browser

Example 2: Logging into Instagram

anybody
    .online({ hidden: false })  // Show the browser window
    .goto("https://instagram.com")  // Go to Instagram
    .type({ css: "input[name='username']" }, "myusername")  // Enter username
    .type({ css: "input[name='password']" }, "mypassword")  // Enter password
    .click({ css: "button[type='submit']" })  // Click the login button
    .sleep({ seconds: 10 })  // Wait for 10 seconds
    .close();  // Close the browser

Example 3: Searching on Google

anybody
    .online({ hidden: false })  // Show the browser window
    .goto("https://google.com")  // Go to Google
    .type({ tag: "input", id: "q" }, "incredimo")  // Type a search term
    .click({ tag: "button", id: "search_button" })  // Click the search button
    .wait({ until: { element: "div.g", visible: true } })  // Wait for results to load
    .close();  // Close the browser

How It Works

Anybody is designed by the lazy for the lazy. It's super smart and does all the hard work for you:

  • Dead Simple Syntax: You describe what you want to do, and it handles the rest.
  • Auto-Wait Everything: It's smart enough to wait for elements to load. (im looking at you, puppeteer)
  • Ultra Short Scripts: Write in 5 lines what would take 50 lines in other tools
  • Zero Config Required: Works out of the box with smart defaults for everything

Installation

To get started, eat bun.

bun i anybody

Requirements

  • Windows: Right now, it only works on windows. (if you'r on linux, you probably are not very lazy)

Basic Usage

Here’s a simple example to show you how Anybody works:

import anybody from 'anybody';

anybody
    .online({ hidden: true })  // Start a browser
    .goto('example.com') // Go to a website (https:// is a given duh!)
    .click({ text: 'Login' })    // Click a button with the text "Login"
    .type({ placeholder: 'Username' }, 'myuser')  // Type into the username field
    .type({ placeholder: 'Password' }, 'mypassword')  // Type into the password field
    .click({ text: 'Submit' })   // Click the submit button
    .sleep({ seconds: 10 })  // A little nap, just coz we can!
    .close();  // Close the browser. keep it clean!

Thousand ways to find elements

If i gave you text selectors, you'd complain about type safety. So ill let you choose your own way.

// By CSS selector
.click('.login-button')

// By text content
.click({ text: 'Login' })

// By placeholder
.type({ placeholder: 'Enter username' }, 'myuser')

// By test ID
.click({ testid: 'login-button' })

// By ARIA label
.click({ aria: 'Login button' })

// By ID
.click({ id: 'login-btn' })

// By class
.click({ class: 'primary-button' })

// By XPath
.click({ xpath: '//button[contains(text(), "Login")]' })

// When you put 2 selectors, it will wait for both to be present
.click({ text: 'Login', css: 'button' }) // will wait for both to be present

// Incase if you need either one or the other. you'r covered there too!
.click({ or: [{ text: 'Login' }, { css: 'button' }] }) // will wait for either to be present

Chaining Actions

You can chain actions together to create a sequence of steps:

anybody
    .online({ hidden: true })
    .goto('https://example.com')
    .click({ text: 'Login' })
    .type({ placeholder: 'Username' }, 'myuser')
    .type({ placeholder: 'Password' }, 'mypassword')
    .click({ text: 'Submit' })
    .close();

Configuration

You can customize Anybody’s behavior with these options:

anybody.online({
    hidden: true,  // Run in hidden mode
    debug: true,     // logs shit like an annoying girlfriend
    timeout: 10000,  // Set a global timeout (in milliseconds)
    // sneaky : true, // 😉 coming soon (stealth mode)
});

Contributing

If you find Anybody useful and want to contribute, feel free to submit a Pull Request. I’d love to see what you come up with!


License

Anybody is licensed under the MIT License. See the LICENSE file for details.


I built Anybody to solve my own problems, and I hope it can help you too. Give it a try, and let me know what you think! 🚀