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

@ukrobotics/create-revo-plugin

v0.5.0

Published

Scaffold a Revolution plugin: npm create @ukrobotics/revo-plugin

Readme

@ukrobotics/create-revo-plugin

Scaffolds a plugin for Revolution. The package is public on npm, so it installs without logging in.

Creating a plugin

npm create @ukrobotics/revo-plugin@latest sample-report

It asks what kind of plugin you want (UI or Service), then the backend (Python or .NET, where there is a choice), each from a menu. Use the arrow keys and Enter, or press the option's number. It then checks the tools that template needs (Python 3.11+, the .NET 9 SDK, npm) and says what is missing and what for. After that it asks for a plugin name, your organisation, the client id and the Revo host, and offers to install the dependencies and generate your keys. Finally it writes a configured project. That covers every placeholder substituted, both .env files created, a session secret generated and, optionally, your signing key pair made with its kid written into .env.

Templates

| Template | Type | Backend | Frontend | |---|---|---|---| | python-react (default) | UserInterface | Python 3.11+ / FastAPI | React 19 + Vite | | dotnet-react | UserInterface | .NET 9 / ASP.NET Core | React 19 + Vite | | dotnet-service | Service | .NET 9 / ASP.NET Core | none |

UserInterface vs Service is the first decision, and it is not cosmetic. Revolution refuses client_credentials to a plugin registered as a user interface, and the authorization-code flow to one registered as a service.

The .NET templates carry the plugin SDK inside them as a .nupkg under backend/packages, so they restore with no feed to configure. You need the .NET 9 SDK and access to nuget.org for their other dependencies.

Non-interactive

npm create @ukrobotics/revo-plugin@latest sample-report -- --organisation abc-corp --yes

With npm create, options go after --. With npx @ukrobotics/create-revo-plugin they do not.

| Option | Default | |---|---| | [directory] | the plugin name | | --type | ui or service; asked when there is a terminal, otherwise ui | | --backend | python or dotnet; asked when there is a choice, otherwise python for UI | | -t, --template | a template name, instead of --type and --backend | | --plugin-name | the directory name | | --organisation | required (--company also accepted) | | --client-id | com.<organisation>.<plugin-name> | | --revo-host | https://labrevolution.com | | --tenant-id | dotnet-service only; optional, but the service will not start without it | | --install / --no-install | asked; never assumed without a terminal | | --generate-keys / --no-generate-keys | asked; never assumed without a terminal | | -y, --yes | never prompt |

Installing puts Python packages in backend/.venv, never the system Python, which current macOS and Linux refuse to install into anyway. For .NET it runs dotnet restore, and for a frontend npm install. Every UI project also gets frontend/.env.development.local (git-ignored) naming the backend port that npm run dev proxies /api to.

Key generation runs the template's own tool: backend/scripts/make_keys.py for Python, which needs the backend's requirements (cryptography), so it uses backend/.venv once installed, and the SDK's --generate-keys for .NET, which builds the project first. If that fails, the project is still created and the next steps say how to generate the keys yourself.

Then

  1. Register the plugin under Settings → Tenant Settings → External Plugins with the client id you chose and the contents of backend/keys/public.jwks.json as its JWKS.
  2. Run the backend and the frontend. The generated README.md covers both.

Releasing this package: see RELEASING.md.