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

@fleetless/sdk

v4.4.0

Published

The official TypeScript SDK for Fleetless client apps — a ROS 2 robot as a REST and realtime API, cameras, jobs, and the app's own user accounts, federated sign-in and MCP consent.

Readme

@fleetless/sdk

npm version npm downloads license MIT node >=20

Your robot, as an API. This is the client.

Fleetless turns a ROS 2 robot into a hosted REST and realtime API. The robot runs the Fleetless Bridge, and in the Fleetless Console a developer picks which topics, services, actions, publishers and cameras it exposes, each under a stable slug and behind a role. Your app talks to those slugs over HTTPS and never learns a ROS name, a topic type or a message definition.

This package is the official TypeScript client for that API. It handles the sessions, the reconnects, the subscriptions and the errors, so your code can get on with the part that is actually about your robot. Framework-agnostic, ESM and CJS, types included.

Fleetless is in closed beta. The waiting list is at https://fleetless.dev/#waiting-list.

✨ What you can do with it

  • Find your robots and read what your role lets you do on each — slugs, units, parameter schemas — before you draw a screen.
  • Read datapoints once, subscribe to them live over one reconnecting WebSocket, or query their recorded history.
  • Run actions and call services by slug, with feedback, progress and results as they arrive.
  • Publish messages to a topic, behind a failsafe the robot enforces itself the moment your app goes quiet.
  • Show cameras: a snapshot that is always there, or live video over WebRTC that starts with the first viewer and stops with the last.
  • Follow jobs, sync assets, and render the robot's URDF with its meshes.
  • Sign your users in — registration, verification, invitations, password reset, single sign-on and MCP consent — from screens that are entirely yours. Fleetless renders no page for an app user.
  • Branch on errors instead of parsing them: every refusal is a FleetlessError with a stable code.

🚀 Getting started

npm i @fleetless/sdk

You need an app identifier and an app user of that app, both created in the console. A console login is a Fleetless user, a different identity space, and will not sign in here.

import { createClient } from '@fleetless/sdk'

const client = createClient({
  apiUrl: 'https://api.fleetless.dev',
  appIdentifier: 'warehouse_dash', // your app's identifier, shown in the console
})

await client.auth.login('[email protected]', 'correct-horse-battery')

const robotId = '4f2c1a90-7b3e-4d51-9c86-0a1b2c3d4e5f' // the console shows it

// One-shot read.
const battery = await client.datapoints.get(robotId, 'battery_percentage')
console.log(battery.value, battery.timestamp_ms)

// Live updates: the current value first, then every change.
const subscription = client.datapoints.subscribe(robotId, 'battery_percentage', {
  onEvent: (event) => console.log(event.value, event.timestamp_ms),
  onError: (error) => console.error(error.code, error.message),
})

// Later:
subscription.unsubscribe()
await client.auth.logout()

battery_percentage is a slug you chose in the console, not a ROS topic. Rename the node on the robot and your app never notices. Rename the slug and it does.

The SDK runs wherever fetch and WebSocket exist: browsers, webviews, Node 22 and newer, or server-side with a server key instead of a user session. Node 20 does REST fine but ships no global WebSocket, so realtime there needs one passed in through the WebSocket option.

📚 Documentation

Everything past this point lives at docs.fleetless.dev.

Questions, bug reports and feature requests: [email protected].

🔒 Reporting a security issue

Email [email protected] rather than opening a public issue. SECURITY.md says what is in scope for this package — tokens, the PKCE verifier, the state value — and what belongs to the platform.

🤝 Contributing

The public repository is not open yet. Until it is, send patches and questions to [email protected], after reading CONTRIBUTING.md for the setup, the checks and the Contributor Licence Agreement.

By participating you agree to the Code of Conduct.

📜 Licence

MIT — see LICENSE. Maintained by Dehne Robotik GmbH.