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

@dtmd/temper

v0.0.20

Published

The temper authoring face — the six-noun model as typed modules: harness(), kind<T>(), clause values, needs, and file()/text/blocks(). Emit compiles to the declaration rows the engine reads, a byte-faithful projection, and the lock.

Readme

@dtmd/temper

A type system for the documents that program agents.

One package, two faces: the temper CLI (a prebuilt binary that needs no runtime once it is on disk) and the typed SDK for authoring a Claude Code harness as a program. The full story, the CLI reference, and the spec corpus live in the repository.

Check a harness

Point it at any repo with a .claude/. No config, no project file, nothing installed:

npx @dtmd/temper check --harness .

It validates every member Claude Code reads, from skills and rules to hooks, MCP servers, and plugin manifests, against the documented Anthropic schemas and best practices, then reports what is malformed, what Claude Code silently ignores, and what a requirement you declared would strand. Every finding arrives with its guidance attached.

Wire the gate into a project

npx @dtmd/temper install

install opens with a report of what it finds in your harness, then asks one question: represent it as a temper program? Answering no wires the advisory session-start report alone, one settings entry. Answering yes converts each discovered artifact into a typed member module, your prose byte-for-byte intact, and runs the first emit.

Author the harness as a program

A harness is a small typed program: members are typed values, composition is ordinary imports, and requirements are declared next to the members that fill them:

import { emit, harness } from "@dtmd/temper";
import { memory_CLAUDE } from "./memory/CLAUDE.ts";
import { rule_collaboration } from "./rules/collaboration.ts";
import { skill_captureFriction } from "./skills/capture-friction.ts";

const program = harness({
  require: {
    "friction-capture-procedure": {
      prose: "an agent that hits harness friction needs a procedure for filing the capture",
      required: true,
    },
  },
  members: [memory_CLAUDE, rule_collaboration, skill_captureFriction],
});

process.stdout.write(emit(program).seam);

temper emit compiles the program into the projected .claude/** files and a lock, byte-for-byte reproducible; it verifies itself by emitting twice. temper check gates against the lock, so it can answer what fills each requirement and what would strand it. A hand edit to a generated file surfaces as drift routed to its authored source, never merged around. The SDK implements no semantics: every type erases at the seam, and the engine consumes only declared data, offline, no Node.

Documentation

Platforms

Prebuilt binaries ship for Linux and Windows (x64), macOS next. On other platforms, build from source with a Rust 1.96+ toolchain (cargo install --path . from a clone of the repository).

License

Dual-licensed under MIT OR Apache-2.0. You may use temper under the terms of either.