{"id":15022884,"url":"https://github.com/dazzlingfugu/ember-feature-controls","last_synced_at":"2025-10-24T22:30:33.400Z","repository":{"id":37057726,"uuid":"124090533","full_name":"DazzlingFugu/ember-feature-controls","owner":"DazzlingFugu","description":"Hot plug your features.","archived":false,"fork":false,"pushed_at":"2025-04-08T16:13:28.000Z","size":2336,"stargazers_count":8,"open_issues_count":1,"forks_count":3,"subscribers_count":31,"default_branch":"master","last_synced_at":"2025-08-22T13:33:26.594Z","etag":null,"topics":["ember","ember-addon","feature-flag","feature-flags","feature-toggle","feature-toggles","features-switch","hacktoberfest"],"latest_commit_sha":null,"homepage":"https://dazzlingfugu.github.io/ember-feature-controls/","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/DazzlingFugu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"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}},"created_at":"2018-03-06T14:30:14.000Z","updated_at":"2025-02-23T16:14:53.000Z","dependencies_parsed_at":"2023-02-18T12:03:40.525Z","dependency_job_id":"572a7a7d-ba3b-4c93-830d-acf4040c627c","html_url":"https://github.com/DazzlingFugu/ember-feature-controls","commit_stats":{"total_commits":317,"total_committers":17,"mean_commits":"18.647058823529413","dds":0.3091482649842271,"last_synced_commit":"a000450ffa07e0e47d02c90d301c4b38a31a2f9a"},"previous_names":["peopledoc/ember-feature-controls"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/DazzlingFugu/ember-feature-controls","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DazzlingFugu%2Fember-feature-controls","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DazzlingFugu%2Fember-feature-controls/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DazzlingFugu%2Fember-feature-controls/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DazzlingFugu%2Fember-feature-controls/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DazzlingFugu","download_url":"https://codeload.github.com/DazzlingFugu/ember-feature-controls/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DazzlingFugu%2Fember-feature-controls/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280878370,"owners_count":26406641,"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","status":"online","status_checked_at":"2025-10-24T02:00:06.418Z","response_time":73,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["ember","ember-addon","feature-flag","feature-flags","feature-toggle","feature-toggles","features-switch","hacktoberfest"],"created_at":"2024-09-24T19:58:29.329Z","updated_at":"2025-10-24T22:30:33.069Z","avatar_url":"https://github.com/DazzlingFugu.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ember-feature-controls\n\n[![CI](https://github.com/DazzlingFugu/ember-feature-controls/actions/workflows/ci.yml/badge.svg)](https://github.com/DazzlingFugu/ember-feature-controls/actions/workflows/ci.yml) [![Ember Observer Score](https://emberobserver.com/badges/ember-feature-controls.svg)](https://emberobserver.com/addons/ember-feature-controls) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nHot plug your features: `ember-feature-controls` provides an administration panel to enable or disable feature flags.\n\nDemo is available here: [https://dazzlingfugu.github.io/ember-feature-controls/](https://dazzlingfugu.github.io/ember-feature-controls/).\n\n## Compatibility\n\n- Ember.js v4.8 or above\n- Ember CLI v4.8 or above\n- Node.js v18 or above\n\n## Installation\n\n```\nember install ember-feature-controls\n```\n\n## Usage\n\nThis addon works with [ember-feature-flags](https://github.com/kategengler/ember-feature-flags).\nIt displays an administration panel to enable or disable feature flags.\n\n![Screenshot](/docs/screenshot.png)\n\n### Within a template\n\nThe addon provides a component `\u003cFeatureControls /\u003e` to add in a template of your app.\nThis component basically displays the table with actions buttons.\n\n```hbs\n\u003cFeatureControls /\u003e\n```\n\n#### Options\n\n```hbs\n\u003cFeatureControls @showRefresh={{false}} @showReset={{false}} /\u003e\n```\n\n- `showRefresh`: Show the refresh button, true by default\n- `showReset`: Show the refresh button, true by default\n\n### Within the router\n\nYou can configure a route for feature-controls in your app. This will add a route under the name `features-list` and the path `features` by default. You can use an object as second parameter to configure the route like any route in your app. For example:\n\n```js\n// app/router.ts\nimport EmberRouter from \"@ember/routing/router\";\nimport config from \"dummy/config/environment\";\nimport featureControlsRouteSetup from \"ember-feature-controls/route-setup\";\n\nexport default class Router extends EmberRouter {\n  location = config.locationType;\n  rootURL = config.rootURL;\n}\n\nRouter.map(function () {\n  featureControlsRouteSetup(this, { path: \"__features\" });\n});\n```\n\n## Configuration\n\n`config.featureFlags`\n\nDefine a set of custom feature flags by defining the `featureFlags` property in `config/environment.js`.\n\nThen, you can configure a set of metadata for your feature flags by defining the property `featureControls`. This is an easy way to change settings for a given environment. For example:\n\n```js\n// config/environment.js\nmodule.exports = function (environment) {\n  var ENV = {\n    featureFlags: {\n      \"show-spinners\": true,\n      \"download-cats\": false,\n    },\n    featureControls: {\n      useLocalStorage: true,\n      metadata: [\n        {\n          key: \"show-spinners\",\n          description: \"Show spinners\",\n        },\n        {\n          key: \"download-cats\",\n          description: \"Add button to download cats image\",\n          reload: true,\n        },\n        {\n          key: \"easter-egg\",\n          hide: true,\n        },\n      ],\n    },\n  };\n\n  return ENV;\n};\n```\n\nAbout `useLocalStorage`: this property is not mandatory, but setting it to true register the new value of some flag in the local storage. This way, the values for all flags remain the same after refreshing your application.\n\nAbout `reload`: this property is not mandatory. It forces the browser to reload if this flag change. This is needed for flags involved in the setup of your application.\n\nAbout `hide`: this property is not mandatory. It forces to hide the feature flag in the listing.\n\n## Contributing\n\nSee the [Contributing](CONTRIBUTING.md) guide for details.\n\n## Contributors\n\n\u003c!-- readme: contributors,ember-tomster/- -start --\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/GreatWizard\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/1322081?v=4\" width=\"100;\" alt=\"GreatWizard\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eGreatWizard\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/MrChocolatine\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/47531779?v=4\" width=\"100;\" alt=\"MrChocolatine\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eMrChocolatine\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/romgere\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/13900970?v=4\" width=\"100;\" alt=\"romgere\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eromgere\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/saintsebastian\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/8288415?v=4\" width=\"100;\" alt=\"saintsebastian\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003esaintsebastian\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/yonmey\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/3025706?v=4\" width=\"100;\" alt=\"yonmey\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eyonmey\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/cah-danmonroe\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/11519684?v=4\" width=\"100;\" alt=\"cah-danmonroe\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003ecah-danmonroe\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/amessinger\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/3007703?v=4\" width=\"100;\" alt=\"amessinger\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eamessinger\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/BlueCutOfficial\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/22059380?v=4\" width=\"100;\" alt=\"BlueCutOfficial\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003eBlueCutOfficial\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n        \u003ca href=\"https://github.com/Pixelik\"\u003e\n            \u003cimg src=\"https://avatars.githubusercontent.com/u/1423394?v=4\" width=\"100;\" alt=\"Pixelik\"/\u003e\n            \u003cbr /\u003e\n            \u003csub\u003e\u003cb\u003ePixelik\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\u003c!-- readme: contributors,ember-tomster/- -end --\u003e\n\n## License\n\nThis project is licensed under the [MIT License](LICENSE.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdazzlingfugu%2Fember-feature-controls","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdazzlingfugu%2Fember-feature-controls","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdazzlingfugu%2Fember-feature-controls/lists"}