# Vera Design System Documentation
> Vera design system provides tools, components and guidance to ensure a unified, cohesive user experience across Volue's product landscape.
# Get started
## Developing
Wave has everything you need to get started building web interfaces at Volue. Develop a consistent and accessible user interfaces much faster using a range of pre-built components.
### Developing
### Authenticating to package registry
Since `@volue` is a private NPM scope, your project (both locally and in CI pipeline) needs to be authenticated with NPM registry to fetch packages.
Wave packages are published to both official [npmjs.com registry](https://www.npmjs.com/) and our organization's [Github Package Registry](https://github.com/orgs/Volue/packages).
{'NPM'}{'GitHub packages'}
The best way to authenticate with [npmjs.com registry](https://www.npmjs.com/) is using an [access token](https://docs.npmjs.com/about-access-tokens).
You can find pre-generated authentication token with read-only permissions required to download Wave packages in the [wiki page on GitHub](https://github.com/Volue/vera/wiki/NPM-authentication-token).
```bash
# 1. Do this on your local machine and commit the `.npmrc` to git
cd path/to/your/app
echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}' >> .npmrc
# 2. Add this environment variable locally
# Substitute `READ_ONLY_NPM_TOKEN` with a real token:
# https://github.com/Volue/vera/wiki/NPM-authentication-token
export NPM_TOKEN=READ_ONLY_NPM_TOKEN
# 3. When using Github Actions for CI/CD pipeline, point `NPM_TOKEN` environment
# variable to org-wide `secrets.VOLUE_PLATFORM_NPM_TOKEN`, otherwise define a new
# secret using the token from previous step.
```
If, for some reason, you're not able to access the [NPM authentication token page](https://github.com/Volue/vera/wiki/NPM-authentication-token), please contact the [Design System team](https://github.com/orgs/Volue/teams/design-system).
By default, the `npm` CLI utility is configured to download packages from [official NPM registry](https://www.npmjs.com/).
To fetch Wave from [Github Packages](https://docs.github.com/packages), you need to change registry url and specify a [Personal Access Token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) with read-only permissions inside _.npmrc_ file.
```bash
# 1. Do this on your local machine and commit the `.npmrc` to git
cd path/to/your/app
cat > .npmrc << EOF
registry=https://npm.pkg.github.com/volue
//npm.pkg.github.com/:_authToken=${GITHUB_PACKAGES_PAT}
EOF
# 2. Add this environment variable both locally and on your CI/CD
# Substitute `READ_ONLY_GITHUB_PAT` with a real token:
export GITHUB_PACKAGES_PAT=READ_ONLY_GITHUB_PAT
```
`READ_ONLY_GITHUB_PAT` should be a [classic personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#personal-access-tokens-classic) with `read:packages` scope.
---
### Installation
Inside your project directory, install Wave by running either of the following:
```bash
npm install @gemini-suite/vera @gemini-suite/vera-react --save
```
```bash
yarn add @gemini-suite/vera @gemini-suite/vera-react
```
Bleeding edge pre-release version with the most recent features, can be installed by appending `@next` tag to the package names:
```bash
yarn add @gemini-suite/vera@next @gemini-suite/vera-react@next
```
---
### Include Vera core assets
The guide below is useful for custom setups. As long as you're using [one of our starter project templates](#example-react-projects), you can skip these instructions, as these templates are already preconfigured.
For Wave to work correctly, you need to include its core assets, such as stylesheets, icons and web fonts.
To copy core assets from `node_modules/@gemini-suite/vera` to a location where you store your other bundled and minified assets for production, you may use `copy-wave-assets` command:
```bash
npx copy-wave-assets ./dist
# or
yarn copy-wave-assets ./dist
```
`copy-wave-assets` will create a directory named `wave` in the location you’ve specified (`./dist` in the example above). See `copy-wave-assets -h` for more information.
It is recommended to add a script to your `package.json` that runs `copy-wave-assets` and call it whenever the build is executed to make sure you’ve always got the latest assets copied over:
```js
"scripts": {
"sync-wave-assets": "npx copy-wave-assets ./public",
"build": "npm run sync-wave-assets && react-scripts build",
"start": "npm run sync-wave-assets && react-scripts start"
}
}
```
Alternatively, you could use tools such as [CopyWebpackPlugin](https://webpack.js.org/plugins/copy-webpack-plugin/) to move core Wave resources to your assets directory as part of your build process.
#### Include assets in your HTML template
Once you have a copy task in place and and the assets are copied over, you can serve them using `` tags in your root HTML template.
- Add links to favicons
- Add inline style with @font-face rules in the `
` to load initial, highly optimized versions of our web fonts.
Remember to preload the initial web fonts using ``.
- Inline `wave-head.min.js` in the `` of your HTML template. This is a small chunk of logic that will asynchronously load full versions of our web fonts to enable more stylistic variants and features.
`wave-head.min.js` could be specified as `