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

@neottia/issues

v0.2.1

Published

Filesystem-canonical issue management with a disposable SQLite FTS5 cache

Readme

@neottia/issues

Filesystem-canonical issue management for Neottia. Each issue is a deterministic YAML file in .neottia/issues; .neottia/cache/issues.sqlite is a disposable FTS5/BM25 projection and is never authority.

pnpm add @neottia/issues

Read the Issues user guide and library reference.

import { IssueStore, loadIssueConfig } from "@neottia/issues";

const cwd = process.cwd();
const store = new IssueStore(loadIssueConfig(cwd, { enabled: true }), cwd);
const issue = await store.create({
  type: "story",
  title: "Add a deployment status page",
  created_by: "user:owner",
});
console.log(issue.id, issue.revision);

Configure

Issues contributes modules.issues to the shared @neottia/config platform:

version: 1
modules:
  issues:
    enabled: true
    root: .neottia/issues
    prefix: issue-
    cache:
      stale_policy: rebuild

Register issueConfigContribution in a multi-module registry and pass the immutable shard to new IssueStore(snapshot.get(issueConfigContribution), cwd). Direct typed IssueConfig values remain supported. loadIssueConfig() is the synchronous standalone compatibility wrapper; it still accepts the deprecated skills.issues path, Issues-only file/path variables, all NEOTTIA_ISSUES_* value bindings, and explicit overrides. Resolution order is defaults, global file, project file, selected global/project profile, environment, then explicit overrides. See the Issues configuration guide for module settings and the unified configuration guide for shared files, profiles, provenance, and migration.

Use IssueStore directly or ISSUE_TOOLS for the shared Zod-validated 17-tool surface. Mutations use repository-wide leases, durable batches, exact v1:<sha256> byte revisions, and complete graph validation. Explicit no-op writes repair noncanonical YAML without changing updated_at. Update/transition/archive/restore and destructive relation/link calls require the latest revision. Search clamps caller budgets to security ceilings, uses BM25, and rereads canonical YAML before returning results. Its disposable cache health-checks structured metadata, hierarchy, relationships, comments, links, and revision projections without making them authority.

Hosts compose typed design-document validation by injecting DesignDocumentReferenceResolver. The MCP createIssueServer, Pi registerIssueTools, and OpenCode createIssuesPlugin APIs all accept this seam. Import previews by default; legacy decimal IDs/comments are preserved, while path links require importLegacyPath mapping. Operational errors retain machine-readable category/code/retryability/details.

Commit .neottia/issues/**/*.yml; do not commit .neottia/cache/. Root components cannot end in a period. Never configure the issue root as .neottia or to overlap .neottia/cache or .neottia/repository-store.

The user guide covers schemas, tools, migration, recovery, and troubleshooting.