{"id":13799643,"url":"https://github.com/loranallensmith/brightwheel","last_synced_at":"2026-01-22T19:39:06.137Z","repository":{"id":88611228,"uuid":"68232618","full_name":"loranallensmith/brightwheel","owner":"loranallensmith","description":"Build beautiful Electron user interfaces with Photon and Etch","archived":false,"fork":false,"pushed_at":"2020-10-06T13:50:17.000Z","size":229,"stargazers_count":113,"open_issues_count":7,"forks_count":11,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-09-17T19:11:49.964Z","etag":null,"topics":["electron","gui","hacktoberfest","javascript","jsx","photon","react"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/loranallensmith.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null}},"created_at":"2016-09-14T18:34:05.000Z","updated_at":"2023-09-05T17:06:48.000Z","dependencies_parsed_at":null,"dependency_job_id":"feb7bdaf-f602-4c0a-8b94-8067f846a34c","html_url":"https://github.com/loranallensmith/brightwheel","commit_stats":{"total_commits":151,"total_committers":3,"mean_commits":"50.333333333333336","dds":"0.013245033112582738","last_synced_commit":"aa4f54dfb86ed884a87ff19e31838f82d86d6cc4"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/loranallensmith/brightwheel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loranallensmith%2Fbrightwheel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loranallensmith%2Fbrightwheel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loranallensmith%2Fbrightwheel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loranallensmith%2Fbrightwheel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/loranallensmith","download_url":"https://codeload.github.com/loranallensmith/brightwheel/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loranallensmith%2Fbrightwheel/sbom","scorecard":{"id":598972,"data":{"date":"2025-08-11","repo":{"name":"github.com/loranallensmith/brightwheel","commit":"aa4f54dfb86ed884a87ff19e31838f82d86d6cc4"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/6 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.2.1 not signed: https://api.github.com/repos/loranallensmith/brightwheel/releases/7526692","Warn: release artifact v0.2.0 not signed: https://api.github.com/repos/loranallensmith/brightwheel/releases/7264420","Warn: release artifact v0.2.1 does not have provenance: https://api.github.com/repos/loranallensmith/brightwheel/releases/7526692","Warn: release artifact v0.2.0 does not have provenance: https://api.github.com/repos/loranallensmith/brightwheel/releases/7264420"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 25 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T23:52:50.849Z","repository_id":88611228,"created_at":"2025-08-20T23:52:50.849Z","updated_at":"2025-08-20T23:52:50.849Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28669437,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T19:36:09.361Z","status":"ssl_error","status_checked_at":"2026-01-22T19:36:05.567Z","response_time":144,"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":["electron","gui","hacktoberfest","javascript","jsx","photon","react"],"created_at":"2024-08-04T00:01:04.788Z","updated_at":"2026-01-22T19:39:06.114Z","avatar_url":"https://github.com/loranallensmith.png","language":"JavaScript","funding_links":[],"categories":["Components"],"sub_categories":["Using Electron"],"readme":"# [brightwheel](https://github.com/loranallensmith/brightwheel)\n\n[![NPM version](http://img.shields.io/npm/v/brightwheel.svg?style=flat-square)](https://www.npmjs.com/package/brightwheel)\n[![NPM downloads](http://img.shields.io/npm/dm/brightwheel.svg?style=flat-square)](https://www.npmjs.com/package/brightwheel)\n[![Build Status](http://img.shields.io/travis/loranallensmith/brightwheel/master.svg?style=flat-square)](https://travis-ci.org/loranallensmith/brightwheel)\n[![Dependency Status](http://img.shields.io/david/loranallensmith/brightwheel.svg?style=flat-square)](https://david-dm.org/loranallensmith/brightwheel)\n\n\u003e Build beautiful Electron user interfaces with Photon and Etch\n\n### About\n\nBrightwheel is a JavaScript library that lets you use [Etch](https://github.com/atom/etch) and [Photon](http://photonkit.com/) to construct and manage the state of user interfaces for [Electron](https://electron.atom.io) applications.\n\n![Electron app using Brightwheel](https://cloud.githubusercontent.com/assets/3477155/18810114/c9912f0a-825b-11e6-822f-39e4d238571e.png)\n\n\n\n### Getting Started\n\n#### Installation\n\nAdd Brightwheel and Photon to your project's dependencies.\n```sh\n$ npm install --save brightwheel photonkit\n```\n\n#### Usage\n\nInclude Photon styles in your HTML file's `\u003chead\u003e`.\n\n```html\n\u003clink rel=\"stylesheet\" href=\"node_modules/photonkit/dist/css/photon.css\"\u003e\n```\nTo use Brightwheel, simply import the library in any modules that use components from it.\n```javascript\n// Import and namespace all components\nconst UI = require('brightwheel')\n```\n\n## Creating Components\n\n#### Expressive construction with JSX\nBrightwheel works with JSX, which allows you to be more expressive about nested component construction and application layout.  Extending Brightwheel components allows you to create more complex applications and is the recommended way to use this library.\n\n**To use JSX:**\n1. Make sure your project includes all of the necessary presets and plugins for transpiling JSX.  There are several tutorials available online depending on your particular setup.\n2. Create custom components that extend the `BrightwheelComponent` class and define their structure by overriding the `render()` method.\n3. Implement custom behavior in your components via additional methods.\n\n\n**Note:** _As of v0.2.0, Brightwheel supports Etch's `ref` functionality, which allows you to access nested components programmatically via their associated ref.  Event handling via Etch's `on` property will be available in a future release. More info about these Etch features is available [here](https://github.com/atom/etch/tree/3ff41a03b5bf5c4d576681ada3644913f3a2598c#references)._\n\n```javascript\n// The pragma below instructs etch to preprocess the JSX in this file\n//\n/** @jsx etch.dom */\n\n// Require Brightwheel library and Etch for the preprocessing JSX\nconst UI = require('brightwheel')\nconst etch = require('etch')\n\n// Import other custom components\nconst ToolBarTop = require('./components/toolbar-top')\nconst NavPane = require('./components/nav-pane')\n\n// Define your own custom components by extending BrightwheelComponent.\n// Override the render method to define the structure of your component.\n// You can nest components within components and mix stock Brightwheel\n// components with custom components.\n// You can also create custom Etch components and use those as well.\nclass MainWindowLayout extends UI.BrightwheelComponent {\n  render () {\n    return (\n      \u003cUI.Window\u003e                 // Stock component\n        \u003cToolbarTop\u003e              // Custom components\n            \u003cAddFileButton /\u003e     // ...\n        \u003c/ToolbarTop\u003e             // ...\n        \u003cUI.WindowContent\u003e\n          \u003cUI.PaneGroup\u003e\n            \u003cNavPane /\u003e\n            \u003cUI.Pane classNames='padded-more' /\u003e\n          \u003c/UI.PaneGroup\u003e\n        \u003c/UI.WindowContent\u003e\n      \u003c/UI.Window\u003e\n    )\n  }\n}\n\n// You can also extend individual components to add custom behavior\n// for state management and event handling\nclass AddFileButton extends UI.Button {\n  constructor (properties, children) {\n    super(properties, children)\n    this.properties.icon = 'plus'\n    this.properties.size = 'large'\n    this.update(this.properties, this.children)\n  }\n\n  loadFile(target) {\n    // define custom component behavior\n  }\n}\n\n// To a use component, add its element to the DOM\nlet mainWindowLayout = new MainWindowLayout()\nlet pagebody = document.querySelector('body')\npagebody.insertBefore(mainWindowLayout.element, pagebody.firstChild)\n\n```\n\n##### With JavaScript\nBecause Brightwheel components are just JavaScript objects, you can manage them programmatically like other objects.  While this approach will work for simple scenarios, it can make your code unwieldy in a more complex application.\n\n```javascript\nlet mySubmitButton = new UI.Button({\n  type: 'positive',\n  size: 'mini',\n  text: 'Submit'\n  // specify other properties as needed\n}, []);\n\nlet myCancelButton = new UI.Button({\n  type: 'default',\n  size: 'mini',\n  text: 'Cancel'\n  // specify other properties as needed\n}, []);\n\n\n// Nest components within parent components\nlet myActions = new UI.FormActions({\n  // specify properties as needed\n}, [\n  mySubmitButton,\n  myCancelButton\n]);\n\n// Nest the elements within the DOM\ndocument.querySelector('#form-1').appendChild(myActions.element);\n\n```\n\n## Contributing\n\nPull Requests are welcome!\n\nFor an outline of the overall development priorities, have a look at the current [`ROADMAP.md`](https://github.com/loranallensmith/brightwheel/blob/master/ROADMAP.md) file.\n\nPlease follow the steps below to contribute to this project:\n- Look for an open issue (or open one if it doesn't already exist)\n- Fork this repository\n- Be sure to write tests for the changes you're proposing\n- Open a Pull Request and mention @loranallensmith\n- To help with discoverability down the road, it helps to reference the original Issue your changes address in the body of your Pull Request\n\n\n### How to Test\n\nRun one, or a combination of the following commands to lint and test your code:\n\n```sh\n$ npm test              # Run unit tests with Mocha\n```\n\n\n### License\n\nMIT © 2016 Allen Smith \u0026lt;loranallensmith@github.com\u0026gt;\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floranallensmith%2Fbrightwheel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Floranallensmith%2Fbrightwheel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floranallensmith%2Fbrightwheel/lists"}