- ⚡️ Gatsby 5
 - ⚛️ React 18
 - ⛑ TypeScript
 - 🐐 Tests — Vitest and Testing Library out of the box
 - 📏 ESLint — To find and fix problems in your code
 - 💖 Prettier — Code Formatter for consistent style
 - 🐶 Husky — For running scripts before committing
 - 🚓 Commitlint — To make sure your commit messages follow the convention
 - 🖌 Renovate — To keep your dependencies up to date (being configured)
 - 🚫 lint-staged — Run ESLint and Prettier against staged Git files (needs attention)
 - 👷 PR Workflow — Run Type Check & Linters on Pull Requests
 - ⚙️ EditorConfig - Consistent coding styles across editors and IDEs
 - 🗂 Path Mapping — Import components or images using the 
@prefix 
The best way to start is to clone this repo:
git clone https://github.com/usds/gastby-uswds-ts-starter.git your-project-name
To start the project locally:
- Git clone the starter repo (above) in a terminal
 - If you don't have node 18, install and verify that 
node -vreturn 18.x. You can usenvmorasdf - run 
nvm use 18 - Ensure that 
pnpmandgatsby-cliare globally installed: 
$ npm list -g --depth=0
/Users/username/.nvm/versions/node/v18.12.1/lib
├── [email protected]
├── [email protected]
├── [email protected]
└── [email protected]
- run 
pnpm install - run 
pnpm clean && pnpm start 
Open http://localhost:8000 with your browser to see the result.
- Node.js >= 18
 - pnpm 7
 
__helpers__— Helpers files for testing configuration.__mocks__— Mocks for testing..github— GitHub configuration including the CI workflow..husky— Husky configuration and hooks.src— Application source code, including pages, components, styles.
pnpm start— Starts the application in development mode athttp://localhost:8000.pnpm build— Compile your application and make it ready for deployment.pnpm serve— Serve the production build of your sitepnpm clean— Wipe out the cache (.cachefolder).pnpm type-check— Validate code using TypeScript compiler.pnpm lint— Runs ESLint for all files in thesrcdirectory.pnpm format— Runs Prettier for all files in thesrcdirectory.pnpm test— Run tests with Vitest.pnpm test:watch— Run tests on watch mode.
TypeScript are pre-configured with custom path mappings. To import components or files, use the @ prefix.
import { Button } from '@/components/Button';
// To import images or other files from the static folder
import avatar from '@/static/avatar.png';- works with trusswork components
 - can use USWDS tokens as mixins in sass modules (at component level)
 - works with i18n using format.js (react-intl)
 - has a generator script to quickly create components
 
pnmp run type-checkpnmp run lintpnmp run formatpnmp run testpnmp run intl:extract
The steps involved with creating i18n content is as follows:
- Use 
react-intlas demonstrated in various pages and/or components. - When new content is added, run 
pnpm intl:extract. This will update the json object inlang/en-US-extract.json. - Run 
pnpm intl:createEnJson. This will modify the extracted JSON file into an AST that the library expects and remove console errors. - Translate the 
en-US.jsonfile to anes-MX.json. Each key from theen-US.jsonfile should have a spanish value ines-MX.json. 
Currently this repo is using Github actions (see .github/workflows in the root directory) for deployment to AWS with the support of Geoplatform.
These actions will
- creates a staging link (see deploy-staging.yml) as a comment in every PR made against 
mainthat passes all checks (type-check, linting, testing, format, commit messages) - update the production folder on AWS
 - remove any artifacts of the PR when the PR is closed (see close-pr.yml)
 
In order for these actions to work as is, the following secrets need to be added in your repo:
- AWS_ACCESS_KEY_ID
 - AWS_SECRET_ACCESS_KEY
 - STAGE_SITE_URL
 
The AWS_ACCESS_KEY_ID and the AWS_SECRET_ACCESS_KEY will allow for programmatic (via CLI) access to your AWS resources. See the programmatic access section on here.
The STAGE_SITE_URL should point to the name of your S3 bucket or CDN.
This project is licensed under the MIT License - see the LICENSE.md file for more information.