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

@metorial-outpost/status-page

v0.1.1

Published

A small, self-contained React status page for an Outpost instance -- the equivalent of Tailscale's "This device" screen. `@metorial/outpost-instance` always mounts it at the proxy's root path (`/`), so every running Outpost has a human-friendly overview a

Readme

@metorial/outpost-status-page

A small, self-contained React status page for an Outpost instance -- the equivalent of Tailscale's "This device" screen. @metorial/outpost-instance always mounts it at the proxy's root path (/), so every running Outpost has a human-friendly overview available even if none of its adapters expose anything there.

The page shows ids, connection status, uptime, which services are running and at which paths, and the organization/project/instance compartments this outpost has been granted access to. It never renders private keys or instance tokens -- it's served without authentication to anyone who can reach the outpost, so keep anything added to OutpostStatusPageData to data that's fine to expose that way.

This package deliberately does not depend on @metorial/ui, @metorial/ui-product, or @metorial-enterprise/nexus-basic-layout -- an Outpost instance is meant to run standalone, so its UI is a handful of plain React components and one CSS file, styled to resemble the dashboard's nexus-basic layout without depending on it.

Installation

npm install @metorial/outpost-status-page
yarn add @metorial/outpost-status-page
bun add @metorial/outpost-status-page
pnpm add @metorial/outpost-status-page

Building the client

The server half (createOutpostStatusPage) is consumed as plain TypeScript, like every other outpost-* package. The React page, though, needs to be bundled first:

bun run build   # runs the "prebuild" script (`vite build`) before type-checking

prebuild runs vite build, producing dist/index.html and dist/assets/**. Run it once as part of your deploy before starting an app that uses this package -- if dist/index.html doesn't exist yet, createOutpostStatusPage serves a plain "not built yet" placeholder instead of crashing.

Use bun run dev to iterate on the page itself with Vite's dev server (data comes from whatever /outpost-status/api/status responds with at http://localhost:5190 -- proxy that to a real running outpost, or mock it, while working on the UI).

Usage

import { createOutpostStatusPage } from '@metorial-outpost/status-page';
import { createOutpostProxy } from '@metorial-outpost/proxy';

let statusPage = createOutpostStatusPage({
  getData: () => ({
    outpostId: 'otp_123',
    outpostName: 'Acme Corp Outpost',
    credentialId: 'otc_456',
    instanceId: 'oti_789',
    registered: true,
    tokenExpiresAt: Date.now() + 60_000,
    baseUrl: 'https://abc.outpost.example',
    startedAt: Date.now() - 60_000,
    upstream: { kind: 'metorial', host: 'outpost.metorial.com' },
    services: [
      { id: 'mcp_connection_proxy', version: '1.0.0', granted: true, paths: ['/connect/mcp'] }
    ],
    access: [
      {
        organizationId: 'org_123',
        projectId: 'proj_456',
        instanceId: 'inst_789',
        services: ['mcp_connection_proxy']
      }
    ]
  })
});

let proxy = createOutpostProxy({ adapters: [statusPage] });

getData is called fresh on every GET /outpost-status/api/status request, so it should read from live in-memory state (a closure over the running instance) rather than doing its own caching -- the page itself polls that endpoint every 15s to keep the dot colors and uptime current.

License

This project is licensed under the Apache License 2.0.