Components

Packages

USWDS component packages allow you to import only the components your project needs.

Introducing packages

Few USWDS projects need to use the entire design system. Include only the code your project needs with USWDS packages.

Packages are discrete units of functionality. Most USWDS packages are components (like usa-search, usa-banner, or usa-accordion), but packages can also include items like fonts (uswds-fonts), bundles of components (uswds-form-controls), or simply USWDS mixins, functions, and tokens (uswds-core).

Instead of including everything the design system offers by using the uswds package with code like the following:

@forward "uswds";

You can include only the code you need, with something like:

@forward "usa-accordion";
@forward "usa-button";
@forward "usa-banner";
@forward "usa-identifier";

Using packages helps reduce unused code, reduces the size of the final compiled CSS, and typically results in faster compile times. The uswds package included by default in most projects is 73 KB gzipped. Using packages typically cuts that number by half.

With packages and Sass module syntax in USWDS 3.0, you can be confident that packages that share code dependencies will only include those dependencies once in a project.

The uswds-core package

The uswds-core package is a new package in USWDS 3.0. uswds-core is the engine of the design system, and includes all the functions, mixins, placeholders, tokens, and fonts necessary to write USWDS Sass.

Any custom Sass you write needs to @use "uswds-core" at the top of the file to load the USWDS design language. We suggest using @uswds "uswds-core" as * to add USWDS to the global namespace. For example:

/* custom-styles.scss */

@use "uswds-core" as *;

.custom-component {
  @include u-bg("primary-vivid");
}

...

Included packages

USWDS includes 74 packages — a package for each component or named class group (prefixed with usa-), and a handful of bundle packages that collect multiple components together (prefixed with uswds-).

Using any package in your code will install the code for the component, plus dependency code related to that component. The following table shows each USWDS package with its gzipped size, full size, source code size, and dependencies.

Package name Gzip size Full size Source size Dependencies
usa-accordion 1.85 KB 10 KB 3 KB usa-icon, uswds-fonts
usa-alert 2.405 KB 13 KB 7 KB usa-icon, uswds-fonts
usa-banner 5.92 KB 32 KB 7 KB usa-media-block, uswds-fonts
usa-breadcrumb 2.22 KB 12 KB 6 KB usa-icon, uswds-fonts
usa-button 2.96 KB 16 KB 9 KB uswds-fonts
usa-button-group 3.33 KB 18 KB 3 KB usa-button
usa-card 2.035 KB 11 KB 5 KB uswds-fonts
usa-character-count 0.185 KB 1 KB 0.2 KB uswds-core
usa-checkbox 1.85 KB 10 KB 3 KB usa-fieldset, usa-input-list, usa-legend, uswds-fonts
usa-checklist 1.295 KB 7 KB 0.7 KB usa-icon, uswds-fonts
usa-collection 1.665 KB 9 KB 3 KB uswds-fonts
usa-combo-box 1.85 KB 10 KB 3 KB usa-icon, usa-select
usa-content 0.037 KB 0.2 KB 0.2 KB uswds-core
usa-dark-background 0.074 KB 0.4 KB 0.4 KB uswds-core
usa-date-picker 3.145 KB 17 KB 10 KB usa-icon, usa-input, uswds-fonts
usa-date-range-picker 3.145 KB 17 KB 0 KB usa-date-picker
usa-display 1.295 KB 7 KB 0.8 KB uswds-fonts
usa-embed-container 0.0555 KB 0.3 KB 0.3 KB uswds-core
usa-error-message 1.11 KB 6 KB 0.1 KB uswds-fonts
usa-fieldset 1.295 KB 7 KB 0.2 KB usa-input, uswds-fonts
usa-file-input 1.85 KB 10 KB 4 KB uswds-fonts
usa-footer 7.955 KB 43 KB 7 KB usa-button, usa-form, usa-icon, usa-input, usa-label, usa-list, uswds-fonts
usa-form 1.48 KB 8 KB 1 KB uswds-fonts
usa-form-group 1.11 KB 6 KB 1 KB uswds-fonts
usa-graphic-list 4.625 KB 25 KB 0.9 KB usa-layout-grid, uswds-fonts
usa-header 6.845 KB 37 KB 6 KB usa-accordion, usa-button, usa-nav, usa-search, usa-skipnav, uswds-fonts, uswds-helpers
usa-hero 4.625 KB 25 KB 0.7 KB usa-layout-grid, uswds-fonts
usa-hint 1.295 KB 7 KB 0.2 KB usa-input, uswds-fonts
usa-icon 0.074 KB 0.4 KB 0.4 KB uswds-core
usa-icon-list 4.07 KB 22 KB 16 KB usa-input, uswds-fonts
usa-identifier 1.665 KB 9 KB 3 KB uswds-core, uswds-fonts
usa-input 1.295 KB 7 KB 0.5 KB uswds-fonts
usa-input-prefix-suffix 1.48 KB 8 KB 1 KB usa-icon, usa-input
usa-intro 1.11 KB 6 KB 0.2 KB uswds-fonts
usa-label 1.11 KB 6 KB 0.3 KB uswds-fonts
usa-layout-docs 0.037 KB 0.2 KB 0.2 KB uswds-core
usa-layout-grid 3.33 KB 18 KB 18 KB uswds-core
usa-legend 1.11 KB 6 KB 0.3 KB uswds-fonts
usa-link 1.48 KB 8 KB 1 KB usa-icon, uswds-fonts
usa-list 0.0925 KB 0.5 KB 0.5 KB
usa-media-block 0.0185 KB 0.1 KB 0.1 KB
usa-memorable-date 1.295 KB 7 KB 0.6 KB usa-form-group, usa-input, uswds-fonts
usa-modal 3.33 KB 18 KB 3 KB usa-button, uswds-fonts
usa-nav 5.55 KB 30 KB 9 KB usa-accordion, usa-icon, usa-search, uswds-fonts
usa-pagination 1.48 KB 8 KB 2 KB uswds-fonts
usa-paragraph 0.037 KB 0.2 KB 0.2 KB uswds-core
usa-process-list 1.48 KB 8 KB 2 KB uswds-fonts
usa-prose 4.44 KB 24 KB 18 KB uswds-fonts
usa-radio 1.48 KB 8 KB 1 KB usa-fieldset, usa-input-list, usa-legend, uswds-fonts
usa-range 1.48 KB 8 KB 2 KB usa-label, uswds-fonts
usa-search 3.33 KB 18 KB 1 KB usa-button, usa-icon, usa-input, uswds-fonts, uswds-helpers
usa-section 0.111 KB 0.6 KB 0.6 KB uswds-core
usa-select 1.48 KB 8 KB 1 KB usa-icon, usa-input, uswds-fonts
usa-sidenav 1.48 KB 8 KB 2 KB uswds-fonts
usa-site-alert 3.145 KB 17 KB 4 KB usa-alert
usa-site-title 0.0 KB 0 KB 0 KB
usa-skipnav 1.295 KB 7 KB 0.6 KB uswds-fonts
usa-step-indicator 2.22 KB 12 KB 6 KB uswds-fonts, uswds-helpers
usa-summary-box 1.295 KB 7 KB 0.9 KB usa-list, uswds-fonts
usa-table 3.885 KB 21 KB 15 KB uswds-fonts
usa-tag 1.295 KB 7 KB 1 KB uswds-fonts
usa-textarea 1.295 KB 7 KB 0.5 KB uswds-fonts
usa-time-picker 1.295 KB 7 KB 0.1 KB usa-hint, usa-input, usa-label, uswds-fonts
usa-tooltip 1.295 KB 7 KB 1 KB uswds-fonts
usa-validation 4.81 KB 26 KB 0 KB usa-alert, usa-button, usa-checklist, usa-fieldset, usa-form, usa-input, usa-label, usa-legend
uswds 72.89 KB 394 KB 0 KB
uswds-core 0.0 KB 0 KB 0 KB
uswds-elements 0.1295 KB 0.7 KB 0.7 KB
uswds-fonts 1.11 KB 6 KB 6 KB
uswds-form-controls 6.105 KB 33 KB 0 KB usa-character-count, usa-checkbox, usa-combo-box, usa-date-picker, usa-error-message, usa-fieldset, usa-file-input, usa-form, usa-form-group, usa-hint, usa-input, usa-input-prefix-suffix, usa-label, usa-legend, usa-memorable-date, usa-radio, usa-range, usa-select, usa-textarea, usa-time-picker
uswds-global 1.665 KB 9 KB 0 KB normalize, uswds-core, uswds-elements, uswds-fonts, uswds-helpers
uswds-helpers 0.037 KB 0.2 KB 0.2 KB sr-only, usa-focus
uswds-typography 4.995 KB 27 KB 0 KB usa-content, usa-dark-background, usa-display, usa-intro, usa-link, usa-list, usa-paragraph, usa-prose
uswds-utilities 36.63 KB 198 KB 198 KB

What’s in a package

As of USWDS 3.0, the USWDS codebase is organized around packages. Packages live in the top-level packages directory, and include not only Sass styles, but JavaScript, Twig templates, tests, assets, and sometimes content. Here’s what you’ll find in the usa-accordion package:

├── packages/
│   ...
│   ├── usa-accordion/
│   │   ├── src/
│   │   │   ├── content/
│   │   │   │   ├── index.js
│   │   │   │   ├── usa-accordion.json
│   │   │   │   ├── usa-accordion~bordered.json
│   │   │   │   ├── usa-accordion~multiselectable.json
│   │   │   ├── styles/
│   │   │   │   ├── _index.scss
│   │   │   │   └── accordion.scss
│   │   │   ├── test/
│   │   │   │   ├── accordion.spec.js
│   │   │   │   └── template.html
│   │   │   ├── index.js
│   │   │   ├── usa-accordion.stories.js
│   │   │   └── usa-accordion.twig
│   │   └── _index.scss

The /[package]/_index.scss file is the Sass entry point for the package styles. It forwards any package style dependencies in addition to the component source itself, which lives in [package]/src/styles/. The usa-search package entry point looks something like this:

/* ./packages/usa-search/_index.scss */

//dependencies
@forward "uswds-fonts";
@forward "uswds-helpers";
@forward "usa-button";
@forward "usa-icon";
@forward "usa-input";

// src
@forward "src/styles";

Importing package source only

Developers can save some compile time by bypassing the package Sass entry point, and forwarding straight to the package source. Only usa- prefixed packages have their own source files available to this technique.

Using this technique speeds up compiles, but requires that developers forward any package dependency manually. For instance, let’s imagine a project with the following packages in its Sass entry point:

@forward "usa-accordion";
@forward "usa-banner";
@forward "usa-button";
@forward "usa-identifier";
@forward "uswds-helpers";

Using only package source would result in the following:

@forward "usa-accordion/src/styles";
@forward "usa-banner/src/styles";
@forward "usa-button/src/styles";
@forward "usa-icon/src/styles";
@forward "usa-identifier/src/styles";
@forward "usa-layout-grid/src/styles";
@forward "usa-list/src/styles";
@forward "usa-media-block/src/styles";
@forward "uswds-core";
@forward "uswds-fonts";
@forward "uswds-helpers";

If you suffer from slow compiles, it may be worth experimenting with source forwarding.

Package Sass requirements: Load paths

Using USWDS 3.0 and packages requires compiling your Sass with load paths. Load paths tell your Sass compiler where to look for USWDS packages. Any compiler needs to include a load path to the @uswds/uswds/packages directory:

"./node_modules/@uswds/uswds/packages"

In a gulpfile, use includePaths in your sass() function.

  sass({
    includePaths: [
      "./node_modules/@uswds/uswds/packages",
    ],
  })

In webpack, include includePaths within the sassOptions of your Sass loader:

loader: "sass-loader",
options: {
  sassOptions: {
    includePaths: [
      "./node_modules/@uswds/uswds/packages",
    ],
  },
},

Using uswds-compile sets load paths automatically and can be a good way to build a reliable compile workflow into your project.

Latest updates

Meaningful code and guidance updates are listed in the following table:

Date Description
2022-04-28

Updated instructions for using packages with USWDS 3.0. Added Sass module syntax, updated package list, and updated load paths. More information: uswds-site#1538