{"id":14111068,"url":"https://github.com/scaleway/ultraviolet","last_synced_at":"2026-04-02T11:25:16.490Z","repository":{"id":37024075,"uuid":"320307811","full_name":"scaleway/ultraviolet","owner":"scaleway","description":"A monorepo Design System with React components.","archived":false,"fork":false,"pushed_at":"2026-03-26T17:00:12.000Z","size":123150,"stargazers_count":118,"open_issues_count":19,"forks_count":29,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-03-26T17:37:48.132Z","etag":null,"topics":["form","react","react-hook-form","scaleway","styled-components","typescript","ui","ui-components","ui-library","ultraviolet","vanilla-extract"],"latest_commit_sha":null,"homepage":"https://ultraviolet.scaleway.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/scaleway.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-12-10T15:09:06.000Z","updated_at":"2026-03-26T16:55:08.000Z","dependencies_parsed_at":"2023-09-26T02:01:30.370Z","dependency_job_id":"267d84f6-db3d-4d26-a38a-0d0664c0e5c2","html_url":"https://github.com/scaleway/ultraviolet","commit_stats":{"total_commits":5455,"total_committers":51,"mean_commits":"106.96078431372548","dds":0.6593950504124657,"last_synced_commit":"fd23364541db15381bccc7546591a145b980efd2"},"previous_names":["scaleway/ultraviolet","scaleway/scaleway-ui"],"tags_count":2477,"template":false,"template_full_name":null,"purl":"pkg:github/scaleway/ultraviolet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scaleway%2Fultraviolet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scaleway%2Fultraviolet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scaleway%2Fultraviolet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scaleway%2Fultraviolet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scaleway","download_url":"https://codeload.github.com/scaleway/ultraviolet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scaleway%2Fultraviolet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31305375,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T09:48:21.550Z","status":"ssl_error","status_checked_at":"2026-04-02T09:48:19.196Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["form","react","react-hook-form","scaleway","styled-components","typescript","ui","ui-components","ui-library","ultraviolet","vanilla-extract"],"created_at":"2024-08-14T10:03:07.760Z","updated_at":"2026-04-02T11:25:16.484Z","avatar_url":"https://github.com/scaleway.png","language":"TypeScript","readme":"![](.storybook/assets/logo-dark.png#gh-dark-mode-only)\n![](.storybook/assets/logo-light.png#gh-light-mode-only)\n\n![Codecov](https://img.shields.io/codecov/c/github/scaleway/ultraviolet)\n![GitHub last commit](https://img.shields.io/github/last-commit/scaleway/ultraviolet)\n![GitHub closed issues](https://img.shields.io/github/issues-closed/scaleway/ultraviolet)\n![GitHub contributors](https://img.shields.io/github/contributors/scaleway/ultraviolet)\n![GitHub commit activity](https://img.shields.io/github/commit-activity/m/scaleway/ultraviolet)\n![GitHub](https://img.shields.io/github/license/scaleway/ultraviolet)\n\n# Ultraviolet Core\n\nWelcome to the Ultraviolet Core repository! This is the main repository for the Ultraviolet project, which is a set of packages and tools designed to help you build fast and efficient applications.\n\n- [Ultraviolet UI](https://github.com/scaleway/ultraviolet/tree/main/packages/ui): The main UI library that includes a set of components and utilities to build fast application.\n- [Ultraviolet Form](https://github.com/scaleway/ultraviolet/tree/main/packages/form): A library to build forms with Ultraviolet UI components, it is using React Final Form under the hood.\n- [Ultraviolet Themes](https://github.com/scaleway/ultraviolet/tree/main/packages/themes): A set of themes for the Ultraviolet UI library (default theme is included in `@ultraviolet/ui`).\n- [Ultraviolet Icons](https://github.com/scaleway/ultraviolet/tree/main/packages/icons): A library that provides a set of icons to use with Ultraviolet UI.\n- [Ultraviolet Illustrations](https://github.com/scaleway/ultraviolet/tree/main/packages/illustrations): A library that provides of illustrations.\n- [Ultraviolet Fonts](https://github.com/scaleway/ultraviolet/tree/main/packages/fonts): A library that provides a set of fonts to use with Ultraviolet UI.\n\n## Installation\n\n### Quick start\n\n```sh\npnpm add @ultraviolet/ui @ultraviolet/fonts\n```\n\n```tsx\nimport { ThemeProvider } from '@ultraviolet/themes'\nimport { Button, normalize, theme } from '@ultraviolet/ui'\nimport '@ultraviolet/ui/styles'\nimport '@ultraviolet/fonts/fonts.css'\nimport '@ultraviolet/themes/global' // for normalized css\n\nconst App = () =\u003e (\n  \u003cThemeProvider\u003e\n    \u003cButton onClick={() =\u003e console.log('clicked')}\u003eClick Me\u003c/Button\u003e\n  \u003c/ThemeProvider\u003e\n)\n```\n\nIf you use typescript please read the [full documentation](https://github.com/scaleway/ultraviolet/tree/main/packages/ui#typescript) for have correct types.\n\n## Development\n\nBefore any command, install dependencies running following command:\n\n```sh\npnpm install\n```\n\n### Storybook\n\nOur storybook includes `@ultraviolet/ui`, `@ultraviolet/form` and `@ultraviolet/icons`.\n\nIn order to start storybook without errors you will need to build the project once\n(this is because `@ultraviolet/form` uses `@ultraviolet/ui` build to run).\n\n```sh\npnpm run start\n```\n\nStorybook documentation will then be available on [http://localhost:6006](http://localhost:6006)\n\n### Test\n\n#### Unit\n\n```sh\npnpm run test:unit # Will run all tests\npnpm run test:unit:update # Will update all snapshots\npnpm run test:unit:watch # Will watch tests and only rerun the one who are modified\npnpm run test:unit:coverage # Will generate a coverage report\npnpm run testunit::coverage --coverageReporters lcov \u0026\u0026 open coverage/lcov-report/index.html # Will generate an open an html code coverage report\npnpm run e2e # Will run all e2e tests\n```\n\n#### Lint\n\n```sh\npnpm run lint\npnpm run lint:fix\n```\n\n#### Typecheck\n\nRunning `npx typecheck --noEmit` won't work at root of the project. To run type check for all packages you need to run the following command:\n\n```sh\npnpm run typecheck # this is a package json script that will run typecheck for all packages recursively\n```\n\nIf you still want to use npx you will need to run it inside the package you want to check:\n\n```sh\ncd packages/ui\nnpx typecheck --noEmit\n```\n\n### Build\n\n```sh\npnpm run build\npnpm run build:profile # Will open a visual representation of the modules inside the compile package\n```\n\n### Use a locally built package\n\nYou might want to test your local changes against a React application.\n\n\u003e [`yalc`](https://github.com/whitecolor/yalc) is a tool aiming to simplify working with local npm packages by providing a different workflow than `npm/pnpm link`, hence avoiding most of their issues with module resolving.\n\n```bash\npnpm install --global yalc # Make sure to have the yalc binary\n```\n\nHere is an example for using `@ultraviolet/ui` as a local package:\n\n```bash\npnpm run build \u0026\u0026 cd packages/ui \u0026\u0026 yalc publish\n# Now it's ready to install in your project\ncd ../project-something\nyalc add @ultraviolet/ui\ncd ../ultraviolet\n# If you do some changes into your package\npnpm run build \u0026\u0026 yalc publish --push --sig # --push will automatically update the package on projects where it have been added, --sig updates the signature hash to trigger webpack update\n```\n\nYou can redo the same with `@ultraviolet/form` if you want to test it\n\n\u003e :warning: since [1.0.0.pre.51 (2021-04-23)](https://github.com/wclr/yalc/blob/master/CHANGELOG.md#100pre51-2021-04-23), `yalc publish` needs the `--sig` option to trigger webpack module actual update.\n\n\u003e :warning: `yalc` create a `yalc.lock` and updates the `package.json` in the target project. **Make sure to not commit these changes**\n\n\u003e :warning: if you are trying to yalc @ultraviolet/ui \u0026 @ultraviolet/form in your application and hope to see the change of @ultraviolet/ui into the component used by @ultraviolet/form you should be sure to not have any peerDeps of @ultraviolet/ui installed as it's will be resolve. If your are using pnpm and vite you can add `pnpm.override: { \"@ultraviolet/ui\": \"$@ultraviolet/ui\" }`. If this rfc is accepted this will solve our issue https://github.com/pnpm/rfcs/blob/main/text/0001-catalogs.md\n\n---\n\n## Versioning\n\nWe are using [Changeset](https://github.com/changesets/changesets) to manage our versioning.\n\nOnce your modifications are ready to be released, you can run `pnpm run changeset` to create a new changeset.\nIt will ask you to describe your changes and will create a new changeset file in the `changesets` folder.\n\nRead more about it [here](/CONTRIBUTING.md#versioning).\n\n## Documentation\n\nCheckout our [documentation website](https://storybook.ultraviolet.scaleway.com/).\n\n## Contributing\n\n📝 You can participate in the development and [start contributing](/CONTRIBUTING.md) to it.\n","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscaleway%2Fultraviolet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscaleway%2Fultraviolet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscaleway%2Fultraviolet/lists"}