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

catering-portions

v1.1.0

Published

Catering quantity data for 33 dishes, with both cooked serving weight and purchase yield, so you order the right amount instead of half of it.

Readme

catering-portions

Catering quantity data for 23 common dishes, with the one distinction most portion charts leave out: how much you serve is not how much you buy.

npm license

npm install catering-portions

Why this exists

Search "how many pounds of brisket for 50 people" and you get a single number. That number is almost always the cooked serving weight, and the person asking is usually standing over a supplier order form. A whole packer brisket loses roughly half its weight to trimming and rendering, so ordering the cooked weight leaves you short by nearly half.

Every dish here carries both figures:

| Field | Meaning | | --- | --- | | servingOz | Cooked weight actually served per guest | | yield | Purchase weight divided by cooked weight |

  • yield > 1 means buy more than you serve. Meat, from trim and cook loss.
  • yield < 1 means buy less than you serve. Dry pasta and rice absorb water.
  • yield = 1 means what you buy is what you serve. Deli meat, ready-made salads.

Usage

import { DISHES_BY_SLUG, rowFor, rowsFor, traysFor } from "catering-portions";

const brisket = DISHES_BY_SLUG["brisket"];

rowFor(brisket, 50);
// { guests: 50, served: "16.6 lb", purchase: "33.1 lb", trays: "3 full trays" }

Serving 50 people brisket means putting out 16.6 lb of cooked meat, which means buying about 33.1 lb raw. That gap is the entire point of the package.

rowsFor(brisket);          // a row for every guest count the dish tabulates
traysFor(50, 18);          // "3 full trays", from servings and per-tray yield

Two halves are promoted into one full tray, because no caterer writes "2 half trays" on an order sheet.

API

| Export | Description | | --- | --- | | DISHES | DishSpec[], the full dataset | | DISHES_BY_SLUG | Record<string, DishSpec> lookup | | rowFor(dish, guests) | Served weight, purchase weight, and tray count for one guest count | | rowsFor(dish) | rowFor across the dish's tabulated guest counts | | traysFor(servings, perTray) | Readable half and full tray count | | hasYieldGap(dish) | True when buying differs from serving | | titleName(dish) / lowerName(dish) | Display forms that keep acronyms intact (BBQ stays BBQ) |

Each DishSpec also carries yieldNote (why the yield is what it is), purchaseAs (what you actually order, such as "raw packer brisket"), answer (a one-line plain-language answer), and notes (operational caveats, like brisket dropping to a quarter pound per person when served alongside a second meat).

Fully typed. Zero dependencies. ESM.

Honest limits

These are standard food-service planning figures, not laboratory constants. Real yield moves with cut, trim level, cooking method, and holding time. Treat them as a starting point and calibrate against your own results. If you have measured figures that differ, please open an issue with what you observed, since that is exactly the kind of correction this dataset should absorb.

The dataset covers US-style catering portions and imperial units.

Contributing

Corrections to the numbers are more valuable than new features. Open an issue with your observed yield and the conditions behind it.

License

MIT. Extracted from the portion engine behind ZiaPilot, which quotes catering orders from a restaurant's own menu and tray sizes. The interactive version of this data lives at ziapilot.com/catering-portions.