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

@tutti-os/workspace-app-center

v0.0.256

Published

Host-neutral workspace app center contracts, validation, status mapping, view-model derivation, shared React UI, and package i18n defaults.

Readme

Workspace App Center

Host-neutral workspace app center contracts, validation, status mapping, view-model derivation, shared React UI, and package i18n defaults.

The package does not construct daemon clients, access desktop preload APIs, resolve host paths, spawn processes, or register workbench or dock contributions.

Runtime Refresh Policy

createWorkspaceAppCenterController defaults to refreshPolicy: "poll" for backward compatibility. In this mode, the controller schedules bounded refreshes while installs and transient runtime states are active.

Event-driven hosts can pass refreshPolicy: "event". This disables the controller's per-app install refreshes and transient-runtime refresh timer. The host must then subscribe to its daemon/runtime event stream and forward each app change through controller.applyAppUpdate(...) with an operationCursor:

controller.applyAppUpdate({
  app,
  operationCursor: {
    desiredGeneration,
    operationId,
    sequence
  },
  workspaceId
});

Within an operation, sequence must increase. A replacement operation must use a greater desiredGeneration and a new operationId; stale, duplicate, or ambiguous updates are discarded. Event updates are accepted only while that workspace's polling lifecycle is active. endWorkspacePolling is a full workspace teardown and rejects late events from the disposed stream.

Event mode deliberately does not provide an app-state polling fallback. The host owns reconnect handling. For a reconnect of the same active workspace, first pause and guard delivery from the old stream, call resetWorkspaceEventCursors(workspaceId), fetch and apply a full WorkspaceAppCenterSnapshot, and then resume ordered applyAppUpdate events from the replacement stream. The reset keeps pending install/report state, while the fresh snapshot establishes the new event-ordering baseline. Do not call endWorkspacePolling for a reconnect; reserve it for leaving or disposing the workspace. The catalog-loading refresh remains workspace-scoped and is independent of app runtime event delivery.

View State

WorkspaceAppCenterViewState preserves the selected app tab and may include an openAppId. Hosts can use that id to replace the app list with the running app in the same presentation region, then clear it to return to the preserved list. The package only owns this host-neutral state contract; rendering and webview lifecycle remain host responsibilities.

Developer Sources

Developer/source presentation is host-controlled. AppCenterPanel and AppCard accept showDeveloperSources, default it to false, and render the developer/source row from app metadata only when enabled. The shared package does not own the preference or persistence policy.

Desktop owns the showAppDeveloperSources preference, persists it through the desktop-preferences service, and passes the resulting value into the App Center pane. Keep preference UI, daemon storage, and host-specific source links out of this package.

Visible App Tabs

AppCenterPanel shows the recommended, community, and my-apps tabs by default. Hosts can restrict or reorder them with visibleAppTabs. For example, a host that only exposes the official catalog can render:

<AppCenterPanel visibleAppTabs={["recommended"]} {...props} />

If the controlled active tab is not visible, the panel renders the first visible tab. An empty configuration falls back to the recommended tab.