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

@nospt/backstage-plugin-apigee-backend

v0.1.1

Published

Backstage backend plugin bootstrap for Apigee integration

Readme

@nospt/backstage-plugin-apigee-backend

Backend package for the bootstrap stage of the Backstage Apigee plugin.

Included

  • New Backend System plugin registration
  • Minimal router mounted at /api/apigee
  • Placeholder health endpoint at /api/apigee/health

Development

cd plugins/apigee-backend
yarn start
yarn test
yarn lint
yarn build

Repository Stitching

A Backstage CatalogProcessor (ApigeeStitchingProcessor) links a backend Component to its proxy API entity by emitting the native providesApi / apiProvidedBy relations. This surfaces the standard "Provided APIs" card on the component page and the "Providers" card on the API page — with zero custom UI. A repository opts in by adding nos.pt/apigee-* annotations to its catalog-info.yaml.

Annotation styles

Direct mapping (active in this release):

apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
  name: orders-service
  annotations:
    nos.pt/apigee-api-name: my-proxy
    nos.pt/apigee-project-id: apigee-x-public-p-123
spec:
  type: service
  owner: team-orders
  lifecycle: production

TargetServer-based mapping (documented; resolution planned, not yet active):

metadata:
  annotations:
    nos.pt/apigee-targetserver-hostname: backend.nos.pt
    nos.pt/apigee-targetserver-port: "443"

Precedence rule

When both styles are present, the TargetServer-based mapping is the preferred resolution path (STITCH-02). The direct API-name mapping is the fallback, used when no TargetServer annotation is present or when TargetServer resolution is ambiguous (for example, a generic load balancer shared by many proxies).

In this release only the direct-mapping path is implemented. TargetServer resolution is planned but not yet active — no TargetServer data is captured by the entity provider yet (see 04-CONTEXT D-01). The processor is structured around a resolution-strategy seam so the TargetServer branch slots in without rework.

Apigee → Backstage mapping

| Apigee concept | Backstage entity | |----------------|------------------| | API proxy (implementation) | kind: Component, spec.type: api-proxy | | API proxy (contract) | kind: API, spec.type from API Hub (default other) | | Sharedflow | kind: Component, spec.type: library | | Backend repo component ↔ proxy API | providesApi / apiProvidedBy relation |

Resolution detail

The target API entity ref is deterministic: api:default/<slugify(nos.pt/apigee-api-name)>. The processor reads the annotations, synthesizes the ref, and emits the relation pair — no live catalog lookup is needed. A partial annotation set (e.g. nos.pt/apigee-api-name without nos.pt/apigee-project-id) or an empty/unresolvable value is skipped with a warning (warn-and-skip), so no malformed relations are emitted.

Example fixture

See examples/components.yaml for ready-to-register sample Component entities exercising both annotation styles — useful for local smoke testing of the stitching processor.