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

@freelensapp/extensions

v2.0.0

Published

Freelens - Free IDE for Kubernetes: extensions

Readme

@freelensapp/extensions

The extension API of Freelens: the Common, Main and Renderer namespaces an extension is written against.

The published package is a small runtime shim over globalThis.FreelensExtensionApi, which the running application assigns at startup, paired with the rolled-up type declaration. Nothing of the host is bundled into an extension by depending on it.

Host-provided libraries

These libraries are provided by the host at runtime and are declared as optional peer dependencies:

| Peer dependency | Read from the global as | | --------------- | ----------------------------------- | | react | FreelensExtensionApi.React | | react-dom | FreelensExtensionApi.ReactDom | | mobx | FreelensExtensionApi.Mobx | | mobx-react | FreelensExtensionApi.MobxReact | | monaco-editor | FreelensExtensionApi.MonacoEditor |

@types/react and @types/react-dom are optional peers too, so that the declaration compiles against the same React types as your own code.

They are optional because an extension needs an installed copy only of the ones it actually imports — for types and for its own build — and monaco-editor alone is close to 100 MB. Install what you import, at the version the host runs; the rest are neither needed nor installed. The peer ranges are how your package manager tells you that a copy does not match the host.

Being optional does not make bundling them safe. What keeps a second copy of React or mobx out of your bundle is marking the specifier external in your bundler and reading it back off globalThis.FreelensExtensionApi: two instances of these modules misbehave, React by throwing "invalid hook call" and mobx by silently no longer reacting. Each process publishes the set it has — the renderer publishes all of them, the main process publishes Mobx only.

The host's dependency-injection library, @ogre-tools/injectable, is not among them: it is internal to the host and not published on the global. An extension that wants dependency injection bundles its own copy, at any version, with its own container.

electron is an optional peer on the same grounds: the host provides it, and only an extension that names it needs it installed.

Everything else this package depends on — chart.js, react-select, conf, immer, rfc6902, type-fest — is free to bundle. react-select requires react and react-dom as peers, so a React is installed in your tree even if you import none; mark the host-provided modules external all the same.

Documentation

The template also ships two agent skills, in the Agent Skills format that coding agents read:

Install them into the extension's repository, both or one by name:

npx skills add freelensapp/freelens-example-extension
npx skills add freelensapp/freelens-example-extension --skill port-freelens-extension-to-v2