Recipe Nutrition Labels

Rules the tool applies

Every rule that Recipe Nutrition Labels applies to a label, with the paragraph of 21 CFR that it comes from and the words of that paragraph. The text is quoted from eCFR, up to date as of 2026-11-12 (title 21, part 101, §§ 101.9 and 101.12), at https://www.ecfr.gov/current/title-21/chapter-I/subchapter-B/part-101. Appendix B to part 101 is shown on eCFR only as images, so it is quoted from the annual edition of the CFR on govinfo (below).

A calculation is not a lab analysis, and following these rules does not make a label right for a given food: the seller of the food is responsible for its label. This list is not regulatory or legal advice.

What goes on the label

R-ORDER: the 15 nutrients, their names and their order

Source: 21 CFR 101.9(c)

Except as provided for in paragraphs (f) or (j) of this section, nutrient information shall be presented using the nutrient names specified and in the following order in the formats specified in paragraphs (d) or (e) of this section.

Source: 21 CFR 101.9(c)(8)(ii)

The declaration of vitamins and minerals as a quantitative amount by weight and percent of the RDI shall include vitamin D, calcium, iron, and potassium in that order

What the tool does: it always declares the 15 mandatory nutrients in the order of 101.9(c): Calories, Total Fat, Saturated Fat, Trans Fat, Cholesterol, Sodium, Total Carbohydrate, Dietary Fiber, Total Sugars, Added Sugars ("Includes … Added Sugars"), Protein, then Vitamin D, Calcium, Iron and Potassium. It declares them also where 101.9(c) would let a nutrient be left out (R-NOT-APPLIED), and it declares no voluntary nutrient.

The numbers before rounding

R-AMOUNT: the amount of each ingredient

What the tool does: the buyer gives each ingredient's amount in grams, ounces, pounds, or a number of one of USDA's household portions for that food (USDA's gram weight of that portion). An ounce is 28.349523125 g and a pound 453.59237 g (avoirdupois). An amount must be a finite number above zero, and so must a portion's gram weight; anything else is refused and the label stays incomplete. This is the weight in the recipe, not a label statement; the 28 g ounce of 101.9(b)(5)(viii) is for household measures on the label, which the buyer writes (R-SERV-HOUSEHOLD).

R-PERSERVING: nutrients per serving

Source: 21 CFR 101.9(b)

Except as provided in § 101.9(h)(3), all nutrient and food component quantities shall be declared in relation to a serving as defined in this section.

What the tool does: for each nutrient, the batch's total is the sum over the ingredients of amount × (value per 100 g) ÷ 100. Per serving it is that total × serving grams ÷ batch weight (R-BATCH). Each value per 100 g comes from USDA FoodData Central (DATA.md), from the buyer's own entry (a supplier's label, converted to 100 g as value × 100 ÷ the label's serving grams), or from what the buyer filled in where USDA has none. A value USDA does not give is never taken as zero: the label shows no number for that nutrient until the buyer enters a value or marks the ingredient as having none, and the recipe's summary shows that choice. A value must be a finite number of 0 or more (an own entry, a filled-in value, and the serving of the supplier's label above zero); a negative or non-finite number is refused, never used, and the label stays incomplete. So are a serving and a package net weight that are not finite numbers above zero.

R-BATCH: the weight after cooking

Source: 21 CFR 101.9(b)(9)

The declaration of nutrient and food component content shall be on the basis of food as packaged or purchased

What the tool does: when the buyer enters the weight of the finished batch (for example after baking), per-serving values use that weight, so water lost in cooking makes each gram richer. Without it, the batch weight is the sum of the ingredients. A weight after cooking that is entered but is not a finite number above zero is refused: the label stays incomplete, with no fallback to the sum. Nutrient losses in cooking are not modelled: every nutrient of the raw ingredients is counted as still there. The exceptions in this paragraph (raw fish, foods packed in a liquid that is not eaten, declared on drained solids) are the buyer's to apply.

R-CAL-METHOD: how calories are calculated

Source: 21 CFR 101.9(c)(1)(i)

Caloric content may be calculated by the following methods. Where either specific or general food factors are used, the factors shall be applied to the actual amount (i.e., before rounding) of food components (e.g., fat, carbohydrate, protein, or ingredients with specific food factors) present per serving.

Source: 21 CFR 101.9(c)(1)(i)(B)

Using the general factors of 4, 4, and 9 calories per gram for protein, total carbohydrate, and total fat, respectively, as described in USDA Handbook No. 74 (slightly revised, 1973) pp. 9-11;

What the tool does: calories per serving = 4 × protein + 4 × total carbohydrate + 9 × total fat, on the actual (unrounded) grams per serving. USDA's own energy values are not used, so every ingredient, USDA or own entry, is counted the same way. This method does not count alcohol, and counts fiber and sugar alcohols as carbohydrate at 4 calories per gram; methods (A), (C) to (F) are not offered.

Rounding

R-TIE: what "nearest" does with a tie

What the tool does: 101.9 says "nearest" without saying which way a value exactly half-way goes. The tool rounds it up (0.75 g of fat to the nearest 0.5 g is 1 g; 137.5 mg of sodium to the nearest 5 mg is 140 mg). This is the tool's choice, not a rule of 21 CFR. It applies to every rounding below; 101.9(b)(5)(ix) says the same for serving sizes that fall half-way.

R-CAL-ROUND: calories

Source: 21 CFR 101.9(c)(1)

A statement of the caloric content per serving, expressed to the nearest 5-calorie increment up to and including 50 calories, and 10-calorie increment above 50 calories, except that amounts less than 5 calories may be expressed as zero.

What the tool does: under 5: 0. From 5 up to and including 50: nearest 5. Above 50: nearest 10. (47.5 is 50; 50 is 50; 54.9 is 50; 55 is 60.)

R-FAT: total fat

Source: 21 CFR 101.9(c)(2)

Amounts shall be expressed to the nearest 0.5 ( 1/2) gram increment below 5 grams and to the nearest gram increment above 5 grams. If the serving contains less than 0.5 gram, the content shall be expressed as zero.

What the tool does: under 0.5 g: 0 g. From 0.5 g to under 5 g: nearest 0.5 g. 5 g and more: nearest gram. (5 g exactly is 5 g by either rule.)

R-SAT: saturated fat

Source: 21 CFR 101.9(c)(2)(i)

Saturated fat content shall be indented and expressed as grams per serving to the nearest 0.5 gram ( 1/2) gram increment below 5 grams and to the nearest gram increment above 5 grams. If the serving contains less than 0.5 gram, the content shall be expressed as zero.

What the tool does: as R-FAT.

R-TRANS: trans fat

Source: 21 CFR 101.9(c)(2)(ii)

Trans fat content shall be indented and expressed as grams per serving to the nearest 0.5 ( 1/2)-gram increment below 5 grams and to the nearest gram increment above 5 grams. If the serving contains less than 0.5 gram, the content, when declared, shall be expressed as zero.

What the tool does: as R-FAT. "Trans" is set in roman type; the paragraph allows italics but does not require them.

R-CHOL: cholesterol

Source: 21 CFR 101.9(c)(3)

A statement of the cholesterol content in a serving expressed in milligrams to the nearest 5-milligram increment, except that label declaration of cholesterol information is not required for products that contain less than 2 milligrams cholesterol in a serving and make no claim about fat, fatty acids, or cholesterol content, or such products may state the cholesterol content as zero. […] If the food contains 2 to 5 milligrams of cholesterol per serving, the content may be stated as "less than 5 milligrams."

Source: 21 CFR 101.9(d)(7)(i)

The symbol "<" may be used in place of "less than."

What the tool does: under 2 mg: 0mg. From 2 mg to under 5 mg: "<5mg". 5 mg and more: nearest 5 mg.

R-SODIUM: sodium

Source: 21 CFR 101.9(c)(4)

A statement of the number of milligrams of sodium in a specified serving of food expressed as zero when the serving contains less than 5 milligrams of sodium, to the nearest 5-milligram increment when the serving contains 5 to 140 milligrams of sodium, and to the nearest 10-milligram increment when the serving contains greater than 140 milligrams.

What the tool does: under 5 mg: 0mg. From 5 up to and including 140 mg: nearest 5 mg. Above 140 mg: nearest 10 mg.

R-CARB: total carbohydrate

Source: 21 CFR 101.9(c)(6)

A statement of the number of grams of total carbohydrate in a serving expressed to the nearest gram, except that if a serving contains less than 1 gram, the statement "Contains less than 1 gram" or "less than 1 gram" may be used as an alternative, or if the serving contains less than 0.5 gram, the content may be expressed as zero. Total carbohydrate content shall be calculated by subtraction of the sum of the crude protein, total fat, moisture, and ash from the total weight of the food.

What the tool does: under 0.5 g: 0g. From 0.5 g to under 1 g: "<1g" (R-ORDER, (d)(7)(i)). 1 g and more: nearest gram. USDA's value is its "Carbohydrate, by difference" (DATA.md), which is the subtraction this paragraph describes. A buyer's own entry is whatever the supplier's label says.

R-FIBER: dietary fiber

Source: 21 CFR 101.9(c)(6)(i)

A statement of the number of grams of total dietary fiber in a serving, indented and expressed to the nearest gram, except that if a serving contains less than 1 gram, declaration of dietary fiber is not required or, alternatively, the statement "Contains less than 1 gram" or "less than 1 gram" may be used, and if the serving contains less than 0.5 gram, the content may be expressed as zero.

What the tool does: as R-CARB, and always declared. USDA's "Fiber, total dietary" is a laboratory measure; whether every fiber in it meets the definition in this paragraph (isolated or synthetic fibers must be ones FDA has listed) is the buyer's to check.

R-SUGARS: total sugars

Source: 21 CFR 101.9(c)(6)(ii)

Total sugars content shall be indented and expressed to the nearest gram, except that if a serving contains less than 1 gram, the statement "Contains less than 1 gram" or "less than 1 gram" may be used as an alternative, and if the serving contains less than 0.5 gram, the content may be expressed as zero.

What the tool does: as R-CARB, and always declared. No percent Daily Value: 101.9(c)(9) sets no DRV for total sugars.

R-ADDED: added sugars

Source: 21 CFR 101.9(c)(6)(iii)

Added sugars content shall be indented under Total Sugars and shall be prefaced with the word "Includes" followed by the amount (in grams) "Added Sugars" ("Includes 'X' g Added Sugars"). It shall be expressed to the nearest gram, except that if a serving contains less than 1 gram, the statement "Contains less than 1 gram" or "less than 1 gram" may be used as an alternative, and if the serving contains less than 0.5 gram, the content may be expressed as zero.

What the tool does: rounded as R-CARB, shown as "Includes 6g Added Sugars", always declared, with its percent Daily Value (R-DV).

R-ADDED-MARK: which ingredients are added sugars

Source: 21 CFR 101.9(c)(6)(iii)

Added sugars are either added during the processing of foods, or are packaged as such, and include sugars (free, mono and disaccharides), sugars from syrups and honey, and sugars from concentrated fruit or vegetable juices that are in excess of what would be expected from the same volume of 100 percent fruit or vegetable juice of the same type

What the tool does: USDA's data says nothing about added sugars, so the tool asks for every ingredient. The buyer marks an ingredient as an added sugar (sugar, honey, a syrup): all of its total sugars then count as added. Or the buyer marks it as having none, or enters a value (an own entry takes the supplier label's added sugars). Which ingredients are added sugars, including the exceptions for juice concentrates in this paragraph, is the buyer's decision. The same paragraph asks the manufacturer to keep records when added and naturally occurring sugars are mixed, or when added sugars ferment or brown ((g)(10) and (g)(11)); keeping them is the buyer's.

R-PROTEIN: protein

Source: 21 CFR 101.9(c)(7)

A statement of the number of grams of protein in a serving, expressed to the nearest gram, except that if a serving contains less than 1 gram, the statement "Contains less than 1 gram" or "less than 1 gram" may be used as an alternative, and if the serving contains less than 0.5 gram, the content may be expressed as zero.

Source: 21 CFR 101.9(c)(7)(i)

A statement of the corrected amount of protein per serving, as determined in paragraph (c)(7)(ii) of this section, calculated as a percentage of the RDI or DRV for protein, as appropriate, and expressed as Percent of Daily Value, may be placed on the label, except that such a statement shall be given if a protein claim is made for the product, or if the product is represented or purported to be specifically for infants through 12 months or children 1 through 3 years of age.

What the tool does: rounded as R-CARB. No percent Daily Value for protein: (c)(7)(i) makes it optional when no protein claim is made and the food is not for infants or children 1 through 3, and it would need the protein's PDCAAS, which the tool does not have. A buyer who makes a protein claim needs it ("Not applied"). The case of protein of low quality is R-PROTEIN-QUALITY.

R-PROTEIN-QUALITY: protein of low quality

Source: 21 CFR 101.9(c)(7)

When the protein in foods represented or purported to be for adults and children 4 or more years of age has a protein quality value that is a protein digestibility-corrected amino acid score of less than 20 expressed as a percent, or when the protein in a food represented or purported to be for children greater than 1 but less than 4 years of age has a protein quality value that is a protein digestibility-corrected amino acid score of less than 40 expressed as a percent, either of the following shall be placed adjacent to the declaration of protein content by weight: The statement "not a significant source of protein," or a listing aligned under the column headed "Percent Daily Value" of the corrected amount of protein per serving

What the tool does: this applies with or without a protein claim. The tool cannot know a food's PDCAAS, so every recipe asks the buyer whether the protein in the food has a PDCAAS below 20%, and the label is incomplete until the buyer answers. When the answer is yes, the label says "Protein 2g not a significant source of protein" on the protein line (on the next line if it does not fit). The other choice of this paragraph, the corrected percent Daily Value, is not offered. Finding the food's PDCAAS is the buyer's. Foods for children under 4 are not made by this tool, so the 40% case does not arise.

Percent Daily Values

R-DV: Daily Reference Values and the percent

Source: 21 CFR 101.9(c)(9)

The following DRVs, nomenclature, and units of measure are established for the following food components:

What the tool does: it uses the column "Adults and children ≥4 years" of that table, copied by ecfr.py build: total fat 78 g, saturated fat 20 g, cholesterol 300 mg, total carbohydrate 275 g, sodium 2,300 mg, dietary fiber 28 g, added sugars 50 g (protein 50 g is not used, R-PROTEIN). Trans fat and total sugars have none, so they get no percent.

Source: 21 CFR 101.9(d)(7)(ii)

A listing of the percent of the DRV as established in paragraphs (c)(7)(iii) and (c)(9) of this section shall be given in a column aligned under the heading "% Daily Value" established in paragraph (d)(6) of this section with the percent expressed to the nearest whole percent for each nutrient declared in the column described in paragraph (d)(7)(i) of this section for which a DRV has been established, except that the percent for protein may be omitted as provided in paragraph (c)(7) of this section. The percent shall be calculated by dividing either the amount declared on the label for each nutrient or the actual amount of each nutrient (i.e., before rounding) by the DRV for the nutrient

What the tool does: percent = declared amount ÷ DRV × 100, to the nearest whole percent, so that "0g" of fat always shows 0%. Where the declaration is "<1g" or "<5mg", which has no single amount, it uses the actual amount instead, which the same paragraph allows. (9 g of fat: 11.5%, shown 12%.)

R-VM: vitamin D, calcium, iron and potassium

Source: 21 CFR 101.9(c)(8)(iv)

The following RDIs, nomenclature, and units of measure are established for the following vitamins and minerals which are essential in human nutrition:

Source: 21 CFR 101.9(c)(8)(i)

All other foods shall use the RDI for adults and children 4 or more years of age.

Source: 21 CFR 101.9(c)(8)(iii)

The percentages for vitamins and minerals shall be expressed to the nearest 2-percent increment up to and including the 10-percent level, the nearest 5-percent increment above 10 percent and up to and including the 50-percent level, and the nearest 10-percent increment above the 50-percent level. Quantitative amounts and percentages of vitamins and minerals present at less than 2 percent of the RDI are not required to be declared in nutrition labeling but may be declared by a zero […] The quantitative amounts of vitamins and minerals, excluding sodium, shall be the amount of the vitamin or mineral included in one serving of the product, using the units of measurement and the levels of significance given in paragraph (c)(8)(iv) of this section, except that zeros following decimal points may be dropped, and additional levels of significance may be used when the number of decimal places indicated is not sufficient to express lower amounts

What the tool does:

Serving size and servings per container

R-RACC: the reference amount of the product category

Source: 21 CFR 101.9(b)(2)

serving size declared on a product label shall be determined from the "Reference Amounts Customarily Consumed Per Eating Occasion * * * *" (reference amounts) that appear in § 101.12(b) using the procedures described below.

Source: 21 CFR 101.12(b)

The following reference amounts shall be used as the basis for determining serving sizes for specific products:

What the tool does: the buyer picks the product category from Table 2 of 101.12(b) ("General Food Supply"), copied by ecfr.py build with its footnotes; the tool shows its reference amount and label statement. Table 1 (foods for infants and young children) and the "Dietary supplements" row are left out. When the reference amount is a single number of grams, the tool shows the serving as a percent of it and makes the checks R-SERV-SINGLE and R-SERV-DUAL. Otherwise (mL, cups, tablespoons, "amount to make …") it says so and leaves the comparison to the buyer. Choosing the category, and the serving that follows from the procedures of 101.9(b)(2) (whole units, fractions of a large unit, household measures of bulk products), is the buyer's.

R-SERV-HOUSEHOLD: the household measure

Source: 21 CFR 101.9(b)(7)

A label statement regarding a serving shall be the serving size expressed in common household measures as set forth in paragraphs (b)(2) through (b)(6) of this section and shall be followed by the equivalent metric quantity in parenthesis (fluids in milliliters and all other foods in grams) except for single-serving containers.

What the tool does: the buyer types the household measure ("2 cookies", "2/3 cup") and the serving's weight in grams; the label shows "Serving size 2 cookies (30g)". Whether the measure follows 101.9(b)(5) (cups in 1/4 or 1/3 cup steps, the allowed tablespoons and teaspoons, and so on) is the buyer's. Servings are in grams only; fluids in milliliters are not supported.

R-SERV-METRIC: the grams of the serving

Source: 21 CFR 101.9(b)(7)(ii)

The gram or milliliter quantity equivalent to the household measure should be rounded to the nearest whole number except for quantities that are less than 5 g (mL). The gram (mL) quantity between 2 and 5 g (mL) should be rounded to the nearest 0.5 g (mL) and the g (mL) quantity less than 2 g (mL) should be expressed in 0.1-g (mL) increments.

What the tool does: 5 g and more: nearest gram. From 2 g to under 5 g: nearest 0.5 g. Under 2 g: nearest 0.1 g. The nutrients are calculated on the grams as entered, before this rounding.

R-SERV-COUNT: servings per container

Source: 21 CFR 101.9(b)(8)(i)

The number of servings shall be rounded to the nearest whole number except for the number of servings between 2 and 5 servings and random weight products. The number of servings between 2 and 5 servings shall be rounded to the nearest 0.5 serving. Rounding should be indicated by the use of the term about (e.g., about 2 servings, about 3.5 servings).

What the tool does: servings = net weight of the package ÷ serving grams. From 2 up to and including 5: nearest 0.5; otherwise nearest whole number. When rounding changed the number, it is preceded by "About". "Varied" for random-weight products ((b)(8)(iii)) is not offered.

R-SERV-SINGLE: a package under 200% of the reference amount

Source: 21 CFR 101.9(b)(6)

A product that is packaged and sold individually that contains less than 200 percent of the applicable reference amount must be considered to be a single-serving container, and the entire content of the product must be labeled as one serving.

What the tool does: when the reference amount is in grams and the package's net weight is under twice it, the tool warns that, if the product is packaged and sold individually, the whole package is one serving. It does not change the serving itself: whether the product is sold that way is the buyer's to know.

R-SERV-DUAL: a package of 200% to 300% of the reference amount

Source: 21 CFR 101.9(b)(12)(i)

Products that are packaged and sold individually and that contain at least 200 percent and up to and including 300 percent of the applicable reference amount must provide an additional column within the Nutrition Facts label that lists the quantitative amounts and percent Daily Values for the entire package, as well as a column listing the quantitative amounts and percent Daily Values for a serving that is less than the entire package

What the tool does: in that range it warns that such a product needs a second column, which this tool does not make (R-NOT-APPLIED). The same holds for a discrete unit of 200% to 300% of the reference amount, 101.9(b)(2)(i)(D), which the tool does not check.

The format

R-FORMAT: the standard vertical format

Source: 21 CFR 101.9(d)(1)

In the interest of uniformity of presentation, FDA strongly recommends that the nutrition information be presented using the graphic specifications set forth in appendix B to part 101.

Source: 21 CFR 101.9(d)(1)(i)

The nutrition information shall be set off in a box by use of hairlines and shall be all black or one color type, printed on a white or other neutral contrasting background whenever practical.

Source: 21 CFR 101.9(d)(1)(ii)

All information within the nutrition label shall utilize:

Source: 21 CFR 101.9(d)(1)(ii)(A)

Except as provided for in paragraph (c)(2)(ii) of this section, a single easy-to-read type style,

Source: 21 CFR 101.9(d)(1)(ii)(C)

At least one point leading (i.e., space between two lines of text) except that at least four points leading shall be utilized for the information required by paragraphs (d)(7) and (d)(8) of this section as shown in paragraph (d)(12), and

Source: 21 CFR 101.9(d)(1)(ii)(D)

Letters should never touch.

Source: 21 CFR 101.9(d)(1)(iii)

Information required in paragraphs (d)(7) and (8) of this section shall be in type size no smaller than 8 point. Information required in paragraph (d)(5) of this section for the "Calories" declaration shall be highlighted in bold or extra bold and shall be in a type size no smaller than 16 point […] The numeric amount for the information required in paragraph (d)(5) of this section shall also be highlighted in bold or extra bold type and shall be in a type size no smaller than 22 point […] The information required in paragraphs (d)(4), (6), and (9) of this section shall be in a type size no smaller than 6 point.

Source: 21 CFR 101.9(d)(1)(iv)

The headings required by paragraphs (d)(2), (d)(3)(ii), (d)(4), and (d)(6) of this section (i.e., "Nutrition Facts," "Serving size," "Amount per serving," and "% Daily Value*"), the names of all nutrients that are not indented according to requirements of paragraph (c) of this section (i.e., "Calories," "Total Fat," "Cholesterol," "Sodium," "Total Carbohydrate" and "Protein"), and the percentage amounts required by paragraph (d)(7)(ii) of this section shall be highlighted in bold or extra bold type or other highlighting (reverse printing is not permitted as a form of highlighting) that prominently distinguishes it from other information. No other information shall be highlighted.

Source: 21 CFR 101.9(d)(1)(v)

A hairline rule that is centered between the lines of text shall separate "Nutrition Facts" from the servings per container statement required in paragraph (d)(3)(i) of this section and shall separate each nutrient and its corresponding percent Daily Value required in paragraphs (d)(7)(i) and (ii) of this section from the nutrient and percent Daily Value above and below it

Source: 21 CFR 101.9(d)(2)

The information shall be presented under the identifying heading of "Nutrition Facts" which shall be set in a type size no smaller than all other print size in the nutrition label except for the numerical information for "Calories" required in paragraph (d)(5) of this section

Source: 21 CFR 101.9(d)(3)(i)

The information required in this paragraph shall be located immediately after the "Nutrition Facts" heading and shall be in a type size no smaller than 10 point

Source: 21 CFR 101.9(d)(3)(ii)

"Serving size": A statement of the serving size as specified in paragraph (b)(7) of this section which shall immediately follow the "____servings per container" declaration. The information required in this paragraph shall be highlighted in bold or extra bold and be in a type size no smaller than 10 point […] The serving size amount must be right justified if adequate space is available.

Source: 21 CFR 101.9(d)(4)

A subheading "Amount per serving" shall be separated from the serving size information by a bar as shown in paragraph (d)(12) of this section

Source: 21 CFR 101.9(d)(5)

Information on calories shall immediately follow the subheading "Amount per serving" and shall be declared in one line.

Source: 21 CFR 101.9(d)(6)

The column heading "% Daily Value," followed by an asterisk (e.g., "% Daily Value*"), shall be separated from information on calories by a bar as shown in paragraph (d)(12) of this section.

Source: 21 CFR 101.9(d)(7)(i)

The name of each nutrient, as specified in paragraph (c) of this section, shall be given in a column and followed immediately by the quantitative amount by weight for that nutrient appended with a "g" for grams, "mg" for milligrams, or "mcg" for micrograms as shown in paragraph (d)(12) of this section.

Source: 21 CFR 101.9(d)(8)

Nutrient information for vitamins and minerals (except sodium) shall be separated from information on other nutrients by a bar and may be arrayed vertically as shown in paragraph (d)(12) of this section (e.g., Vitamin D 2 mcg 10%, Calcium 260 mg 20%, Iron 8 mg 45%, Potassium 235 mg 6%) or may be listed horizontally.

Source: 21 CFR 101.9(d)(9)

A footnote, preceded by an asterisk, shall be placed beneath the list of vitamins and minerals and shall be separated from the list by a bar […] The footnote shall state: "*The % Daily Value tells you how much a nutrient in a serving of food contributes to a daily diet. 2,000 calories a day is used for general nutrition advice."

Source: 21 CFR part 101, appendix B, "Graphic Enhancements Used by the FDA" ([83 FR 65504, Dec. 21, 2018]). Quoted from the CFR annual edition of April 1, 2025 on govinfo, https://www.govinfo.gov/content/pkg/CFR-2025-title21-vol2/pdf/CFR-2025-title21-vol2-part101-appB.pdf, because eCFR shows this appendix only as images (its image server refused dev-01 on 2026-11-14). eCFR's current appendix carries the same source note. Not checked by ecfr.py.

2. Key nutrients and their % Daily Values are set in 8 point Helvetica Black. […] 4. "Servings per container" is set in 10 point Helvetica Regular and "Serving size" is set in 10 point Helvetica Black and with 1 point of leading. "Amount per serving" is set in 6 point Helvetica Black. 5. "Calories" is set in 16 point Helvetica Black and the numerical value of calories is set in 22 point Helvetica Black. 6. Absolute measures of nutrient content (for example, "1g") and nutrient subgroups are set in 8 point Helvetica Regular with 4 points of leading. […] 8. The type for the footnote is set in 6 point Helvetica Regular with 1 point of leading. […] 1. A 7 point rule separates large groupings as shown in the example. A 3 point rule separates calorie information from the nutrient information. 2. A hairline rule or ¼ point rule separates individual nutrients, as shown in the example. […] The rule above the "Added Sugars" declaration is shortened as shown in the example. […] 1. All labels are enclosed by ½ point box rule within 3 points of text measure.

What the tool does: one layout, drawn the same way in the page, the SVG, the PDF and the PNG (site/label.js):

Data

R-DATA-FAT: what "total fat" means in USDA's data

Source: 21 CFR 101.9(c)(2)

A statement of the number of grams of total fat in a serving defined as total lipid fatty acids and expressed as triglycerides

What the tool does: it uses USDA's "Total lipid (fat)" (nutrient 1004) as total fat. That is the fat of the food as USDA measured it, not necessarily the sum of fatty acids expressed as triglycerides that this paragraph defines; the two can differ. The buyer should know this.

R-DATA-SOURCE: where the numbers come from

What the tool does: USDA FoodData Central, Foundation Foods (release 2026-10-29) and SR Legacy (2018-04, USDA's final release), as DATA.md lists, with each food's FDC ID on the calculation sheet; and the buyer's own entries, marked "own entry". Neither is a lab analysis of the buyer's food.

Not applied: the buyer's to check

The tool does not apply these; a label that needs one of them is not made by this tool, or needs the buyer's own work:

Second-model check

reviewer checks each rule above against eCFR's current text (and appendix B against govinfo), and records the result here, one line per rule, before the site goes public (README.md "Every rule has its source"):

R-ORDER: pass
R-AMOUNT: fail: gramsOf accepts a non-finite positive amount (engine.js:157-161); compute can mark the resulting label complete. Require finite positive quantities.
R-PERSERVING: fail: negative nutrient entries/fills are accepted (engine.js:173-184) and non-finite computed values can pass complete (line 289). The sum/scaling formula is correct for valid inputs; validate inputs and derived values.
R-BATCH: fail: cookedWeightG=Infinity is accepted (engine.js:239-240), producing a complete label with every nutrient and calories zero. Reject supplied invalid/non-finite weights instead of calculating or silently falling back.
R-CAL-METHOD: pass
R-TIE: pass
R-CAL-ROUND: pass
R-FAT: pass
R-SAT: pass
R-TRANS: pass
R-CHOL: pass
R-SODIUM: pass
R-CARB: pass
R-FIBER: pass
R-SUGARS: pass
R-ADDED: pass
R-ADDED-MARK: pass
R-PROTEIN-QUALITY: (new after the check of 1437fc7; to check)
R-PROTEIN: fail: the rest of 101.9(c)(7) requires either a protein-quality statement or corrected %DV for adult foods with PDCAAS below 20%. No protein claim is needed to trigger this. The tool does neither and does not exclude this case.
R-DV: pass
R-VM: pass: the stated whole-unit/tenth-unit choice follows the levels-of-significance language of (c)(8)(iii)-(iv); this does not check or adopt separate FDA guidance increments.
R-RACC: pass
R-SERV-HOUSEHOLD: pass
R-SERV-METRIC: pass
R-SERV-COUNT: pass
R-SERV-SINGLE: pass
R-SERV-DUAL: pass: the warning states the general (b)(12)(i) case; its exceptions remain the buyer's to check.
R-FORMAT: pass: checked against 101.9(d) and both pages of the cited govinfo appendix; SVG, PDF and browser PNG inspected. The 8-point serving fallback is permitted by the final sentence of (d)(3)(ii), although the description above only mentions its 10-point default.
R-DATA-FAT: pass
R-DATA-SOURCE: pass
Not applied: fail: add the low-protein-quality case of 101.9(c)(7); the present list and R-PROTEIN imply that absence of a protein claim is sufficient to omit both a qualifier and protein %DV.

Checked by Codex GPT-6.1 Sol on 2026-11-14 for ventures#253, against PR #252 head 1437fc74dc1fe0504255eca7aa39b35c192cff5d. Sources: current eCFR title 21, up to date as of 2026-11-12, and the cited 2025 govinfo appendix B. These results cover part 1 only; the page, calculation sheet and subscription gating remain for part 2.

After the check of 1437fc7: R-AMOUNT, R-PERSERVING and R-BATCH now refuse non-finite and negative numbers (engine.js isPositive, isAmount; tests "review ventures#253" in tests/engine.test.mjs); R-PROTEIN-QUALITY is new and "Not applied" names protein quality. These lines and R-PROTEIN are to be checked again.

Each line: pass, or fail: and why. The author fixes each failing rule and asks for a new check of it.

Second round — ventures#258

Checked by Codex GPT-6.1 Sol on 2026-11-14 against PR #252 head dc55127cd6f2a73bc62aa825f744c0b04a3f3f8d. These results supersede the failed results and the pending protein-quality check above; the first-round record is retained as history. Unchanged rules retain their first-round results.

R-AMOUNT: pass: finite positive amounts and portion weights are required, including after unit conversion; invalid quantities keep the label incomplete.
R-PERSERVING: pass: negative/non-finite nutrient entries and fills are rejected; supplied invalid supplier-label serving weights invalidate its nutrient values; non-finite per-serving values or calories cannot produce a complete label. Valid sum/scaling calculations remain unchanged.
R-BATCH: pass: a supplied invalid cooked weight records an error and prevents completion; omission still uses the ingredient total. The intermediate result retains that total when invalid, but is not a complete label.
R-PROTEIN: pass: the omission of protein %DV is qualified for foods without protein claims and outside the excluded age groups, with the low-quality case covered separately.
R-PROTEIN-QUALITY: pass: current 101.9(c)(7) requires the adjacent statement or corrected %DV below 20% PDCAAS for adults/children 4+; a required buyer answer selects the statement, which appears beside protein in the rendered label. Determining PDCAAS remains the buyer's responsibility.
Not applied: pass: now explicitly names PDCAAS determination and the unsupported corrected protein %DV, including its requirement with protein claims; foods for children under 4 remain excluded.

Source: [current eCFR 21 CFR 101.9](https://www.ecfr.gov/current/title-21/chapter-I/subchapter-B/part-101/subpart-A/section-101.9), title 21 up to date as of 2026-11-12. Verification: all 35 tests pass; 203 additional invalid-input checks pass; all 52 eCFR quotations verify; rebuilding the 139 RACC categories and DRV/RDI data produces no change. The worked example was rendered to SVG and PDF, and its low-quality-protein SVG was inspected in Chromium. PDF rendering, browser PNG export, USDA rebuilding and appendix B were not repeated in this round; their unchanged first-round checks are retained. The page, calculation sheet, subscription gating, deployment and physical printing are outside this part-1 review.