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

@langri-sha/projen-dagger

v0.2.0

Published

A [projen] component for [Dagger] TypeScript module repositories.

Readme

@langri-sha/projen-dagger

A projen component for Dagger TypeScript module repositories.

It synthesizes each module's dagger.json, adds the dagger:develop and check:types tasks, ignores the SDK output the Dagger CLI generates, and synthesizes a workflow that regenerates every module against its pinned engine and fails on drift.

@langri-sha/projen-project reaches it through its dagger option, which also keeps Prettier off the SDK-managed files and points Renovate at the engine version. Prefer that over constructing the component yourself.

Usage

npm install -D projen @langri-sha/projen-dagger
import { Project } from 'projen'
import { Dagger } from '@langri-sha/projen-dagger'

const project = new Project({
  name: 'my-modules',
})

const dagger = new Dagger(project, {
  engineVersion: 'v0.21.7',
  modules: {
    tailscale: {},
    paperclip: {
      dependencies: ['../tailscale'],
    },
  },
})

project.synth()

Modules live in top-level directories, each with its own dagger.json.

Modules

Each entry under modules is keyed by the module directory and synthesizes a dagger.json there. The name defaults to the directory, the SDK to typescript. A dependency given as a string is its source ref, named after the last path segment the way dagger install records it:

new Dagger(project, {
  engineVersion: 'v0.21.7',
  modules: {
    'hermes-workspace': {
      dependencies: [
        '../tigerfs',
        '../hermes',
        { name: 'net', source: '../tailscale' },
      ],
    },
  },
})

Call dagger.addModule(directory, options) to add one after construction.

Manifests are written in the field order and formatting the Dagger CLI marshals, without the projen marker, so dagger develop reads them back and leaves them untouched.

Engine versions

engineVersion is declared once, in the projenrc, and written into every manifest from there. Declaring a module without one is an error — the manifests are generated, so there is nowhere else for the pin to live.

Renovate reads it out of the projenrc rather than out of dagger.json, the same way the preset tracks minNodeVersion. An upgrade is then one edit to one file, and the post-upgrade job that runs projen on dependency PRs propagates it to the manifests before the checks run.

Keep it ahead of, or equal to, the engine you develop against locally. The CLI stamps the version it ran into dagger.json, so an older pin and a newer local engine leave synthesis and dagger develop rewriting the field past each other.