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

@turystack/cli

v10.0.1

Published

Scaffold Turystack applications from the command line.

Readme

@turystack/cli

Local-first scaffolding for Turystack products. It creates monorepos, and only monorepos: a product with one API and a product with six apps have the same tree, because a domain is a package either way.

Quick start

npx @turystack/cli create acme
cd acme
pnpm install
pnpm docker:up
pnpm db:generate && pnpm db:migrate
pnpm dev

That repository already signs people in. The API comes up on :3000 and the sign-in application on :3100.

What create produces

apps/api          the API, its auth audience, and the authorization server
apps/auth         the sign-in application — every auth screen in the repository
domains/identity  the person, and how they prove it
packages/
├── exceptions    @repo/exceptions — the product's one error catalogue
├── database      @repo/database — schema, relations, migrations
├── ui            @repo/ui — the design, as one stylesheet
└── oauth-clients @repo/oauth-clients — who may sign a person in

Nothing here is a placeholder waiting to be replaced. domains/identity stores real people, hashes real passwords and links real provider accounts; the auth routes complete a real Authorization Code + PKCE flow.

Growing the repository

turystack add audience admin    # an API surface and the app that consumes it
turystack add domain order      # domains/order — @repo/order
turystack skills                # the Turystack skills, into .claude/skills

add audience is one command because an audience and an application are one decision. It writes /api/v1/admin, creates apps/admin, registers the OAuth client in packages/oauth-clients, adds ADMIN_ORIGIN to the root .env, and wires the controller, the origin and the OpenAPI project into the API.

The application it creates contains no authentication code. One line in src/routes/__root.tsx is the whole integration:

<AuthProvider client="admin">

Sources: local or published

The default writes Turystack dependencies as local file: specs, which keeps a generated repository connected to a checkout while its package manager still resolves peer dependencies in the generated app's own context.

# from a Turystack checkout
pnpm --dir cli build
node cli/dist/index.js create acme --local-root .

# published versions instead
node cli/dist/index.js create acme --registry

Every generated package is formatted with Biome before the CLI finishes — backend packages with the backend config, frontend ones with the frontend config. This happens with --skip-install too; the CLI carries its own formatter for that case.

Non-interactive

node cli/dist/index.js create acme --yes --local-root .
node cli/dist/index.js add audience admin --yes --port 3001 --local-root .
node cli/dist/index.js add domain order --yes --local-root .

Run node cli/dist/index.js --help for all options.

pnpm only

pnpm-workspace.yaml is what the law detects a Turystack repository by, and supporting four package managers would mean four workspace layouts, of which three would never be exercised.

Source organization

src/index.ts only routes. src/workspace/ holds what every command needs — workspace discovery, the package table, env merging, Biome config resolution. src/commands/create/templates/ holds one module per generated package, and src/commands/add/ holds the commands that grow an existing repository.

Documentation

Options, API reference and examples:

https://tury.dev/libs/cli

Development

pnpm install
pnpm typecheck
pnpm check
pnpm test
pnpm build