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

@airmark/quiver

v0.32.2

Published

Airmark Quiver — Air Force and DAF document Quills for Quillmark.

Readme

@airmark/quiver

A Quillmark source quiver of Air Force and DAF official-document quills, sourced from tonguetoquill-collection and aligned to the current Quillmark spec.

Contents

| Quill | Version | Description | |--------------|---------|-----------------------------------------------------------------------------------| | usaf_memo | 0.3.0 | USAF / DAF Official Memorandum (AFH 33-337) | | usaf_memo | 0.2.0 | Previous release, retained so documents pinned to @0.2 keep resolving | | af4141 | 0.1.0 | AF Form 4141 — Individual's Record of Duties and Experience (Ground Environment) | | daf1206 | 0.1.0 | DAF Form 1206 — Nomination for Award | | daf4392 | 0.1.0 | DAF Form 4392 — Pre-Departure Safety Briefing (Page 2) | | afmc_moa | 0.0.1 | DoD Memorandum of Agreement (DoDI 4000.19) |

Install

npm install @airmark/quiver @quillmark/quiver @quillmark/wasm

This package ships only the source-quiver assets (Quiver.yaml + quills/) and exposes no JavaScript API. Loading is @quillmark/quiver's, rendering is @quillmark/wasm's.

Usage

Load from the installed directory (Node)

Resolve this package's Quiver.yaml from your own module — your dependencies are reachable from you, not from the loader's install location — and hand its directory to fromDir:

import { createRequire } from 'node:module';
import { dirname } from 'node:path';
import { Engine, init } from '@quillmark/wasm';
import { fromDir } from '@quillmark/quiver/node';

// `init` is the only door to `Document`: there is no static export to reach early.
const { Document } = await init();

const root = dirname(createRequire(import.meta.url).resolve('@airmark/quiver/Quiver.yaml'));
const quiver = await fromDir(root);
const engine = new Engine();

const doc = Document.fromMarkdown(`~~~
$quill: [email protected]
$kind: main
memo_for: ["ORG/SYMBOL"]
memo_from: ["ORG/SYMBOL", "Organization Name", "123 Street Ave", "City ST 12345-6789"]
subject: Hello Quillmark
signature_block: ["FIRST M. LAST, Rank, USAF", "Duty Title"]
~~~

Body of the memo.`);

const quill = await quiver.getQuill(doc.quillRef);
const { artifacts } = await engine.render(quill, doc, { format: 'pdf' });

A quill from getQuill is borrowed: every caller asking for that ref gets the same instance, so it is not yours to free().

Load over HTTP (browser)

A browser cannot read the source layout, so pack it at deploy time and serve the output as static files:

import { build } from '@quillmark/quiver/node'; // build step
await build(root, './public/quivers/airmark');
import { Quiver } from '@quillmark/quiver'; // browser runtime
const quiver = await Quiver.fromBuiltUrl('/quivers/airmark/');

Layout

This package is a source quiver conforming to the canonical layout:

Quiver.yaml
quills/
  <name>/
    <x.y.z>/
      Quill.yaml
      plate.typ
      assets/
      packages/

Working on a quill

Two verbs, and they answer different questions.

Both verbs are quillkit's, the quill author's toolchain. It resolves @quillmark/quiver and @quillmark/wasm out of this collection's own node_modules, so the versions pinned here are the format the quiver is packed in and the wasm the gate renders through.

Does it work? quillkit test loads the collection with fromDir, compiles every quill, and renders each one's example document — the blueprint seeded from the example: values in Quill.yaml. It is the gate CI runs, so a validation failure surfaces here rather than on a consumer's build:

npm install
npm test

The gate renders nothing the schema did not write, so the coverage is the example: block: a field with no example is a field no render exercises.

What is it like to use? npm run dev is quillkit studio: it packs this quiver, serves the studio client over it, and repacks on every save — pick a quill, edit the seeded document, watch it paint, read the diagnostics. The client is quillkit's own, so there is nothing to install for it and nothing to keep in step.

Reload to pick up a repack. Editing a quill into an invalid state is not a failure of the loop: it packs, and the client says what is wrong with that quill and where, while the others stay usable.

The two verbs answer to different authorities. quillkit test renders through the wasm pinned here and is what CI blocks on; the client renders through the wasm it was built against, and nothing at runtime reconciles the two. The gate is authoritative, studio is advisory.

npm run site writes the arrangement a deploy serves into site/ — the client at the root, a built quiver at quiver/ beneath it — without serving it. CI uploads that on every run, so a pull request — a fork's included — is reviewed by downloading the artifact and serving the directory.

main is deployed to GitHub Pages by .github/workflows/studio.yml, which runs that same command and keeps the deploy here: nothing outside this repository holds pages: write.

License

Apache-2.0. Individual quills carry their own licensing terms; see the packages/ directory inside each quill for upstream font and template licenses.