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

@abstractframework/code

v0.10.2

Published

Browser-based coding assistant for AbstractFramework - connects to AbstractGateway for durable agent sessions

Downloads

1,345

Readme

AbstractCode Web (Gateway-First)

The browser client for AbstractCode, published to npm as @abstractframework/code. Like the terminal client, it is a gateway-first host UI:

  • talks only to AbstractGateway (/api/gateway/*)
  • renders by replaying/streaming the ledger
  • resumes waits by submitting durable commands

Run it without installing anything:

npx @abstractframework/code      # serves on http://127.0.0.1:3002

The server listens on 127.0.0.1 by default; pass --host 0.0.0.0 to accept other machines directly (it then prints a warning that it is exposed beyond this machine). AbstractGateway (0.7.0 or later) can also start it and serve it at /apps/code/ on the gateway's own address, which is the one address to expose or tunnel for a remote machine. Launch flags: --gateway-url <url>, --port <n>, --host <addr>, --help; without --gateway-url the server uses the gateway installed on this computer (~/.abstractframework/gateway.json), else http://127.0.0.1:8080.

The interface uses AbstractUIC themes, authentication, settings, and reusable workflow chat. It builds without a sibling checkout: the shared @abstractframework/* components install from npm like any other dependency, at the ranges declared in package.json.

The interface adapts to phones, tablets, laptop windows and wide screens: side panes become drawers below 1024 px, dialogs become bottom sheets on phones, and touch devices get 44 px targets. See responsive layout.

You can open it from another computer at the gateway's plain http address (LAN or Tailscale); voice needs an https address there. See opening the app from another computer over http.

Docs:

Local dev

cd web
npm ci
npm run dev

In the UI:

  • set Gateway URL (e.g. http://127.0.0.1:8080), or configure it on the server with --gateway-url (the packaged server; npm start -- --gateway-url …)
  • set Gateway user and that user's Gateway token

When a Gateway user is provided, the web server exchanges the token for a Gateway browser session and stores only app-scoped session cookies. The raw token is not persisted in browser settings. Vite development and the packaged server use the same session proxy; the browser keeps API requests same-origin.

Choose a workflow in the toolbar: Gateway default (the coding agent your gateway's operator set, resolved by the gateway when the turn starts), or a coding agent listed under Shared (made available by your gateway's admin) or Mine (agents you published or imported). The list holds only the workflows the gateway says this app can run for you (GET /api/gateway/bundles?executable_for=abstractcode.agent.v1); there is no "show all" switch — ask your admin when a workflow is missing. The Files tab shows the conversation's workspace on the gateway with previews, Settings → Stream replies shows replies as the model writes them (on gateways that support it), and About lists the app's and the gateway's versions. Agent tasks use the composer; structured workflows use Inputs. Questions, tool approvals, and event waits appear in the conversation. Runs and history remain on the gateway when you close the browser. Unsent drafts and queued turns do not survive reload.

Whether a browser may change the Gateway URL is decided by the browser's address: only a browser on this machine may reconfigure it (forwarded headers count only from a loopback peer such as the gateway's /apps/code/ relay), and a sign-in over a loopback connection must name a loopback host. The server-configured Gateway URL is authoritative for everyone else. Set ABSTRACTCODE_ALLOW_REMOTE_BROWSER_GATEWAY_CONFIG=1 to allow it from anywhere, behind your own access control. Behind a reverse proxy every peer is the proxy, so loopback carries no meaning there — set ABSTRACTCODE_TRUST_PROXY_HEADERS=1 to refuse browser-supplied changes regardless of peer, and add the env var above if you still want to permit them.