{"id":16357820,"url":"https://github.com/moduscreateorg/gimbal","last_synced_at":"2025-07-09T17:08:22.180Z","repository":{"id":34881723,"uuid":"179113507","full_name":"ModusCreateOrg/gimbal","owner":"ModusCreateOrg","description":"Web Performance Auditing tooling","archived":false,"fork":false,"pushed_at":"2023-07-17T18:56:21.000Z","size":5549,"stargazers_count":116,"open_issues_count":31,"forks_count":8,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-07-06T23:06:44.727Z","etag":null,"topics":["angular","javascript","lighthouse","lighthouse-audits","performance","performance-test","react","vue"],"latest_commit_sha":null,"homepage":"https://labs.moduscreate.com/gimbal-web-performance-audit-budgeting","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ModusCreateOrg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-02T16:04:36.000Z","updated_at":"2025-03-27T19:01:36.000Z","dependencies_parsed_at":"2024-06-19T02:41:48.857Z","dependency_job_id":"23312837-2749-44b7-80bb-5b8085533bbc","html_url":"https://github.com/ModusCreateOrg/gimbal","commit_stats":null,"previous_names":[],"tags_count":45,"template":false,"template_full_name":null,"purl":"pkg:github/ModusCreateOrg/gimbal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ModusCreateOrg%2Fgimbal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ModusCreateOrg%2Fgimbal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ModusCreateOrg%2Fgimbal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ModusCreateOrg%2Fgimbal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ModusCreateOrg","download_url":"https://codeload.github.com/ModusCreateOrg/gimbal/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ModusCreateOrg%2Fgimbal/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264502167,"owners_count":23618557,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["angular","javascript","lighthouse","lighthouse-audits","performance","performance-test","react","vue"],"created_at":"2024-10-11T02:04:11.901Z","updated_at":"2025-07-09T17:08:22.138Z","avatar_url":"https://github.com/ModusCreateOrg.png","language":"TypeScript","readme":"# Gimbal - Web Performance Budgeting Automation\n\n[![npm (scoped)](https://img.shields.io/npm/v/@modus/gimbal.svg)](https://www.npmjs.com/package/@modus/gimbal)\n[![npm](https://img.shields.io/npm/dm/@modus/gimbal.svg)](https://www.npmjs.com/package/@modus/gimbal)\n[![CircleCI](https://circleci.com/gh/ModusCreateOrg/gimbal.svg?style=svg\u0026circle-token=070b2e28332dfe71ad3b6b8ab9ee5d472a1d7f76)](https://circleci.com/gh/ModusCreateOrg/gimbal)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)\n[![MIT Licensed](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](./LICENSE)\n[![Powered by Modus_Create](https://img.shields.io/badge/powered_by-Modus_Create-blue.svg?longCache=true\u0026style=flat\u0026logo=data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzIwIDMwMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8cGF0aCBkPSJNOTguODI0IDE0OS40OThjMCAxMi41Ny0yLjM1NiAyNC41ODItNi42MzcgMzUuNjM3LTQ5LjEtMjQuODEtODIuNzc1LTc1LjY5Mi04Mi43NzUtMTM0LjQ2IDAtMTcuNzgyIDMuMDkxLTM0LjgzOCA4Ljc0OS01MC42NzVhMTQ5LjUzNSAxNDkuNTM1IDAgMCAxIDQxLjEyNCAxMS4wNDYgMTA3Ljg3NyAxMDcuODc3IDAgMCAwLTcuNTIgMzkuNjI4YzAgMzYuODQyIDE4LjQyMyA2OS4zNiA0Ni41NDQgODguOTAzLjMyNiAzLjI2NS41MTUgNi41Ny41MTUgOS45MjF6TTY3LjgyIDE1LjAxOGM0OS4xIDI0LjgxMSA4Mi43NjggNzUuNzExIDgyLjc2OCAxMzQuNDggMCA4My4xNjgtNjcuNDIgMTUwLjU4OC0xNTAuNTg4IDE1MC41ODh2LTQyLjM1M2M1OS43NzggMCAxMDguMjM1LTQ4LjQ1OSAxMDguMjM1LTEwOC4yMzUgMC0zNi44NS0xOC40My02OS4zOC00Ni41NjItODguOTI3YTk5Ljk0OSA5OS45NDkgMCAwIDEtLjQ5Ny05Ljg5NyA5OC41MTIgOTguNTEyIDAgMCAxIDYuNjQ0LTM1LjY1NnptMTU1LjI5MiAxODIuNzE4YzE3LjczNyAzNS41NTggNTQuNDUgNTkuOTk3IDk2Ljg4OCA1OS45OTd2NDIuMzUzYy02MS45NTUgMC0xMTUuMTYyLTM3LjQyLTEzOC4yOC05MC44ODZhMTU4LjgxMSAxNTguODExIDAgMCAwIDQxLjM5Mi0xMS40NjR6bS0xMC4yNi02My41ODlhOTguMjMyIDk4LjIzMiAwIDAgMS00My40MjggMTQuODg5QzE2OS42NTQgNzIuMjI0IDIyNy4zOSA4Ljk1IDMwMS44NDUuMDAzYzQuNzAxIDEzLjE1MiA3LjU5MyAyNy4xNiA4LjQ1IDQxLjcxNC01MC4xMzMgNC40Ni05MC40MzMgNDMuMDgtOTcuNDQzIDkyLjQzem01NC4yNzgtNjguMTA1YzEyLjc5NC04LjEyNyAyNy41NjctMTMuNDA3IDQzLjQ1Mi0xNC45MTEtLjI0NyA4Mi45NTctNjcuNTY3IDE1MC4xMzItMTUwLjU4MiAxNTAuMTMyLTIuODQ2IDAtNS42NzMtLjA4OC04LjQ4LS4yNDNhMTU5LjM3OCAxNTkuMzc4IDAgMCAwIDguMTk4LTQyLjExOGMuMDk0IDAgLjE4Ny4wMDguMjgyLjAwOCA1NC41NTcgMCA5OS42NjUtNDAuMzczIDEwNy4xMy05Mi44Njh6IiBmaWxsPSIjRkZGIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz4KPC9zdmc+)](https://moduscreate.com)\n\n\n[Installation](#installation-and-usage) |\n[Documentation](./packages/gimbal/docs) |\n[Contributing](./.github/CONTRIBUTING.md) |\n[Code of Conduct](./CODE_OF_CONDUCT.md) |\n[Twitter](https://twitter.com/ModusCreate)\n\n\u003cimg align=\"left\" width=\"75\" height=\"75\" src=\"https://res.cloudinary.com/modus-labs/image/upload/c_scale,dpr_auto,e_trim:10,f_auto,w_150/v1559132943/labs/gimbal.png\"\u003e\nGimbal uses industry-standard audits to analyze application performance. Continuously track performance to ensure your apps are within acceptable 🏎performance budgets.\n\nGimbal ❤️ CIs like [Circle CI](https://github.com/ModusCreateOrg/gimbal/tree/master/packages/gimbal/docs/ci/circleci),  [Travis CI](https://github.com/ModusCreateOrg/gimbal/tree/master/packages/gimbal/docs/ci/travisci), Jenkins, and [GitHub Actions](https://github.com/ModusCreateOrg/gimbal/tree/master/packages/gimbal/docs/ci/github).\n\n## Getting Started\n\nYou can install Gimbal globally using `npm` or `yarn`:\n\n```sh\n# with npm\nnpm install --global @modus/gimbal\n\n# or with yarn\nyarn global add @modus/gimbal\n\ngimbal --help\n```\n\nNow the `gimbal` is executable throughout your system for any projects you want to audit.\n\nYou can also install it to a specific project as a development dependency.\n\n```sh\n# with npm\nnpm install --save-dev @modus/gimbal\n\n# or with yarn\nyarn add --dev @modus/gimbal\n```\n\nYour project should have been built in order to execute gimbal.\n\nYou can execute it via a npm script: (`package.json`):\n\n```json\n{\n  \"scripts\": {\n    \"audit\": \"gimbal audit\"\n  }\n}\n```\n\n```sh\n# with npm\nnpm run audit\n\n# or with yarn\nyarn audit\n```\n\n### Configuration\n\nYou don't need to [Configure Gimbal](./packages/gimbal/docs/config), but we understand that defaults are _optimistic_, at least for existing projects that want to introduce performance budgeting.\n\nTo ease you be ready to use, let's start with some **sample `.gimbalrc.yml` config** files:\n\n1. Minimal\n2. Minimal with all native audits\n3. Using other audit plugins and more sample configurations\n\nPlease, make sure your project was build before executing gimbal.\n\nYou may save them as your `.gimbalrc.yml` file and run `gimbal`.\n\n#### 1) Minimal sample `.gimbalrc.yml` config file:\n\n```yml\naudits:\n  - size\n\nconfigs:\n  buildDir: build\n```\n\n#### 2) Minimal sample `.gimbalrc.yml` config file running all native audits:\n\n```yml\naudits:\n  - size\n  - lighthouse\n  - heap-snapshot\n  - unused-source\n\nconfigs:\n  buildDir: build\n```\n\n#### 3) Sample `.gimbalrc.yml` config file running audit plugins and more configurations:\n\nBefore executing this config file you should install mentioned plugins. For instance:\n\n```sh\n# with npm\nnpm install @modus/gimbal-plugin-axe @modus/gimbal-plugin-last-value @modus/gimbal-plugin-sqlite\n\n# or with yarn\nyarn add @modus/gimbal-plugin-axe @modus/gimbal-plugin-last-value @modus/gimbal-plugin-sqlite\n```\n\nIn case you don't use `build` as your build directory and an exception raises with an error \nconcerning a nonexistent `build` directory, please create one and run gimbal again.\n\nConfig file:\n\n```yml\n# Specify audits to run. Also include any plugins (like axe)\naudits:\n    - axe\n    - size\n    - lighthouse\n    - heap-snapshot\n    - unused-source\n\nconfigs:\n  comment:\n    # Only show failures in GitHub PR comments.\n    # Useful to pinpoint why a build has failed\n    onlyFailures: true\n\n  # Heap snapshot settings\n  heap-snapshot:\n    threshold:\n      Documents: 11\n      Frames: 5\n      JSHeapTotalSize: 13356000\n      JSHeapUsedSize: 10068000\n      Nodes: 800\n      RecalcStyleCount: 15\n      LayoutCount: 15\n\n  # Lighthouse settings\n  lighthouse:\n    skipAudits:\n      - uses-http2\n      - redirects-http\n      - uses-long-cache-ttl\n      - uses-text-compression\n    outputHtml: artifacts/lighthouse.html\n    threshold:\n      accessibility: 90\n      \"best-practices\": 92\n      performance: 64\n      pwa: 52\n      seo: 100\n\n  # File and directory size settings\n  size:\n    - path: ./build/precache-*.js\n      maxSize: 10 KB\n    - path: ./build/static/js/[0-9]*.chunk.js\n      maxSize: 1 MB\n    - path: ./build/static/js/*.chunk.js\n      maxSize: 1 MB\n    - path: ./build/static/js/runtime*.js\n      maxSize: 10 KB\n    - path: ./build/index.html\n      maxSize: 10 KB\n    - path: ./build/favicon.ico\n      maxSize: 10 KB\n    - path: ./build/\n      maxSize: 18 MB\n\n  # Unused source settings\n  unused-source:\n    threshold:\n      - path: \"**/*(private).*.chunk.css\"\n        maxSize: 60%\n      - path: \"**/!(private).*.chunk.css\"\n        maxSize: 60%\n      - path: \"**/*([0-9]).*.chunk.js\"\n        maxSize: 90%\n      - path: \"**/!([0-9]|main).*.chunk.js\"\n        maxSize: 45%\n      - path: \"**/(main).*.chunk.js\"\n        maxSize: 50%\n\n# Locations of reports. Useful for storing artifacts in CI\noutputs:\n  # Only show failures in CLI\n  cli:\n    onlyFailures: true\n  html: artifacts/results.html\n  json: artifacts/results.json\n  markdown: artifacts/results.md\n\n# Plugins\nplugins:\n  # Compare metrics to last-saved values\n  # Install the Last Value plugin with\n  #     npm i @modus/gimbal-plugin-last-value --save-dev \n  - plugin: \"@modus/gimbal-plugin-last-value\"\n    saveOnlyOnSuccess: false\n\n  # Save reports to a database. Needed for gimbal-plugin-last-value\n  # Install the Sqlite plugin with\n  #     npm i @modus/gimbal-plugin-sqlite --save-dev \n  - plugin: \"@modus/gimbal-plugin-sqlite\"\n    lastValue: true\n\n  # Axe a11y audits\n  # Install Axe plugin with\n  #     npm i @modus/gimbal-plugin-axe --save-dev \n  - plugin: \"@modus/gimbal-plugin-axe\"\n    thresholds:\n      aria-allowed-attr: critical\n      color-contrast: serious\n      landmark-one-main: moderate\n      landmark-complementary-is-top-level: moderate\n      meta-viewport: critical\n      region: moderate\n      page-has-heading-one: moderate\n      scrollable-region-focusable: moderate\n\n```\n\n### CI Integration\n\nConsult with our docs for sample CI configuration files:\n\n* [GitHub Actions](https://github.com/ModusCreateOrg/gimbal/tree/master/packages/gimbal/docs/ci/github)\n* [Circle CI](https://github.com/ModusCreateOrg/gimbal/tree/master/packages/gimbal/docs/ci/circleci)\n* [Travis CI](https://github.com/ModusCreateOrg/gimbal/tree/master/packages/gimbal/docs/ci/travisci)\n\n### Docker\nDocker images are available in Docker Hub as [moduscreate/gimbal](https://hub.docker.com/r/moduscreate/gimbal/tags).\n\n## Packages\n\nThis repo is organized as a [monorepo](https://en.wikipedia.org/wiki/Monorepo) that uses [Lerna](https://lerna.js.org/). Packages:\n\n- [Gimbal](./packages/gimbal)\n- [Gimbal Core](./packages/gimbal-core)\n- [Axe Plugin](./packages/plugin-axe)\n- [Last Value Plugin](./packages/plugin-last-value)\n- [MySQL Plugin](./packages/plugin-mysql)\n- [SQLite Plugin](./packages/plugin-sqlite)\n\n## Questions and Support\n\nIf you have a problem running Gimbal, [please submit an issue](https://github.com/ModusCreateOrg/gimbal/issues). The more information you give us the faster we can get back with a good answer.\n\n### How to Improve Web Application Speed and Increase Revenue with Gimbal\n[![How to Improve Web Application Speed and Increase Revenue with Gimbal](https://img.youtube.com/vi/Lq9cRXr0X_Y/0.jpg)](https://youtu.be/Lq9cRXr0X_Y)\n\n### Manage UI Performance Budgets with Gimbal\n[![Manage UI Performance Budgets with Gimbal](https://img.youtube.com/vi/7nOH3EG4nV4/0.jpg)](https://youtu.be/7nOH3EG4nV4?t=138)\n\n### How to Develop High Performing Web Applications\n[![How to Develop High Performing Web Applications](https://img.youtube.com/vi/EBDtUhqNZjQ/0.jpg)](https://www.youtube.com/watch?v=EBDtUhqNZjQ)\n\n## Modus Create\n\n[Modus Create](https://moduscreate.com) is a digital product consultancy. We use a distributed team of the best talent in the world to offer a full suite of digital product design-build services; ranging from consumer facing apps, to digital migration, to agile development training, and business transformation.\n\n[![Modus Create](https://res.cloudinary.com/modus-labs/image/upload/h_80/v1533109874/modus/logo-long-black.png)](https://moduscreate.com)\n\nThis project is part of [Modus Labs](https://labs.moduscreate.com).\n\n[![Modus Labs](https://res.cloudinary.com/modus-labs/image/upload/h_80/v1531492623/labs/logo-black.png)](https://labs.moduscreate.com)\n\n## Licensing\n\nThis project is [MIT licensed](./LICENSE).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoduscreateorg%2Fgimbal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmoduscreateorg%2Fgimbal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoduscreateorg%2Fgimbal/lists"}