{"id":21126245,"url":"https://github.com/ember-admin/ember-cli-admin","last_synced_at":"2025-12-12T04:05:39.011Z","repository":{"id":9769516,"uuid":"11739501","full_name":"ember-admin/ember-cli-admin","owner":"ember-admin","description":"Ember-cli-admin is a powerful admin dashboard for ember-cli projects","archived":false,"fork":false,"pushed_at":"2017-04-18T05:01:46.000Z","size":30902,"stargazers_count":174,"open_issues_count":25,"forks_count":23,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-08-17T08:56:43.609Z","etag":null,"topics":["admin","admin-dashboard","ember-cli","ember-cli-admin"],"latest_commit_sha":null,"homepage":"http://ember-admin.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ember-admin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-07-29T12:52:07.000Z","updated_at":"2025-07-07T22:46:24.000Z","dependencies_parsed_at":"2022-09-11T02:10:15.910Z","dependency_job_id":null,"html_url":"https://github.com/ember-admin/ember-cli-admin","commit_stats":null,"previous_names":["ember-admin/ember-admin.js"],"tags_count":43,"template":false,"template_full_name":null,"purl":"pkg:github/ember-admin/ember-cli-admin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ember-admin%2Fember-cli-admin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ember-admin%2Fember-cli-admin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ember-admin%2Fember-cli-admin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ember-admin%2Fember-cli-admin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ember-admin","download_url":"https://codeload.github.com/ember-admin/ember-cli-admin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ember-admin%2Fember-cli-admin/sbom","scorecard":{"id":374706,"data":{"date":"2025-08-11","repo":{"name":"github.com/ember-admin/ember-cli-admin","commit":"567b3e8c96ff4b8682967819a83ee607d559d6f7"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.9,"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":"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":"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":"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":"Code-Review","score":2,"reason":"Found 6/25 approved changesets -- score normalized to 2","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":"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":"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":"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":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"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":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"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 13 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-18T13:58:17.322Z","repository_id":9769516,"created_at":"2025-08-18T13:58:17.322Z","updated_at":"2025-08-18T13:58:17.322Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273718274,"owners_count":25155486,"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-09-05T02:00:09.113Z","response_time":402,"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":["admin","admin-dashboard","ember-cli","ember-cli-admin"],"created_at":"2024-11-20T04:40:23.440Z","updated_at":"2025-12-12T04:05:38.603Z","avatar_url":"https://github.com/ember-admin.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ember-Cli-Admin\n\n[![Build Status](https://travis-ci.org/ember-admin/ember-cli-admin.svg?branch=master)](https://travis-ci.org/ember-admin/ember-cli-admin)\n[![npm version](https://badge.fury.io/js/ember-cli-admin.svg)](http://badge.fury.io/js/ember-cli-admin)\n[![Ember Observer Score](http://emberobserver.com/badges/ember-cli-admin.svg)](http://emberobserver.com/addons/ember-cli-admin)\n\nEmber-cli-admin is a powerful admin dashboard for ember-cli projects that is built on ideas of [ActiveAdmin][2] and [AbAdmin][3].\n\n## See example\n\n[Ember-cli-admin example](http://rails.ember-admin.com/#/products)\n\n## Quick Setup Steps\n\n### Install\n\nRun `ember install ember-cli-admin`\n\nOr if you're using Ember CLI between 0.2.2 and 0.1.4:\n\nRun `ember install:addon ember-cli-admin`\n\nOr if you're using Ember CLI 0.1.4 or older:\n\n```\nnpm install ember-cli-admin --save-dev\nember g ember-cli-admin\n```\n\n### Generate\n\n1. Run `ember g admin-app \"My Awesome App Name\"`\n2. Run `ember g table-view-resource my-resources`\n\nThat's all!\n\nAlso you can see your [wiki](https://github.com/ember-admin/ember-cli-admin/wiki/Manual-installation) if you want more details about installation or just need to do it manually.\n\n## Blueprints\n\n[Ember-Cli-Admin](https://github.com/ember-admin/ember-cli-admin) provides some default blueprints.\n\nThese are:\n- **admin-app** - generates basic ember-cli-admin app scaffold;\n- **table-view-controller** - generates TableViewController;\n- **tree-view-controller** - generates TreeViewController;\n- **table-view-resource** - generates model, TableViewController and register them in MetaRouter and Navigation;\n- **tree-view-resource** - same as table-view-resource, but with TreeViewController and model suited for it;\n\n## Plugins\n\nEmber-Cli-Admin has some useful plugins that you can use to extend default dashboard functionality:\n\n1. [Ember-Cli-Admin-Auth][5] - adds authorization to Ember-Cli-Admin\n\n2. [Ember-Cli-Admin-Languages][6] - adds multilanguage inputs in forms\n\n## Features overview\n\n### Form fields\n\nYou can specify the attributes to use in admin form with ```formAttributes``` property in the controller:\n\n```javascript\n//app/controllers/users.js\nimport Ember from 'ember';\nimport TableViewController from 'ember-cli-admin/mixins/controllers/table-view';\n\nexport default Ember.Controller.extend(TableViewController,{\n  formAttributes: ['email', 'name']\n});\n```\n\n### Table fields\n\nYou can specify the attributes to use in admin table with the ```tableAttributes``` property in the controller:\n\n```javascript\n//app/controllers/users.js\nimport Ember from 'ember';\nimport TableViewController from 'ember-cli-admin/mixins/controllers/table-view';\n\nexport default Ember.Controller.extend(TableViewController,{\n  tableAttributes: ['email', 'name']\n});\n```\n\n### Item Actions\n\nYou can customize item actions with ```itemActions``` property in the controller:\n\n```javascript\n//app/controllers/users.js\nimport Ember from 'ember';\nimport TableViewController from 'ember-cli-admin/mixins/controllers/table-view';\n\nexport default Ember.Controller.extend(TableViewController,{\n  itemActions: [{title: \"Edit\",\n      \"class\": \"btn btn-small btn-primary\",\n      action: \"edit\",\n      iconClass: \"glyphicon glyphicon-pencil\"}]\n});\n```\n\nOr you can add custom actions with ```additionalActions``` property in the controller:\n```javascript\n//app/controllers/users.js\nimport Ember from 'ember';\nimport TableViewController from 'ember-cli-admin/mixins/controllers/table-view';\n\nexport default Ember.Controller.extend(TableViewController,{\n  additionalActions: [{title: \"my action\", class: \"btn my-action-css\", action: \"my\"}],\n  actions: {\n    my: function(model){\n        return alert('hi!');\n    }\n  }\n});\n```\n\nMaybe you have model depends actions, so you can add in your model:\nOr you can add custom actions with ```additionalActions``` property in the model:\n```javascript\n//app/models/user.js\nadditionalActions: function(){\n    var actions = [];\n    if(this.get('is_active')){\n      actions.pushObject({title: \"Toggle Active\", class: \"btn btn-small btn-warning\", action: \"toggleActive\", iconClass: \"glyphicon glyphicon-remove\"});\n    }\n    else{\n      actions.pushObject({title: \"Toggle Active\", class: \"btn btn-small btn-green\", action: \"toggleActive\", iconClass: \"glyphicon glyphicon-ok\"});\n    }\n    return actions;\n  }.property('is_active')\n```\n\n### Batch Actions\nYou can specify the batch actions with ```batchActions``` property in the controller:\n```javascript\n//app/controllers/users.js\nimport Ember from 'ember';\nimport TableViewController from 'ember-cli-admin/mixins/controllers/table-view';\n\nexport default Ember.Controller.extend(TableViewController,{\n  batchActions: [{title: \"my action\", confirm: \"Are you sure you to do it\", action: \"my\"}],\n  actions: {\n    my: function(model){\n        return alert('hi!');\n    }\n  }\n});\n```\n### Ember-cli-admin also uses [ember-cli-map][4]\n\nWe currently support ```google-map``` component which can be added to your resource form with the following simple setup\n\n```javascript\n//app/models/user.js\n...\nexport default DS.Model.extend({\n  ...\n  lat:                        DS.attr('number')\n  long:                       DS.attr('number')\n  zoom:                       DS.attr('number')\n\n  asGoogleMap: ['lat', 'long', 'zoom']\n\n});\n```\n\nFor more info see [ember-cli-map README][4].\n\n### Fileuploads\n\nSay, our user has one main avatar and/or many avatar pictures.\n\nTo display and upload them in admin interface, do the following setup.\n\nFirst add avatar model, extending it from ember-cli-admin Asset:\n\n```javascript\n//app/models/avatar.js\nimport Asset from 'ember-cli-admin/logics/asset';\nimport DS from 'ember-data';\n\nexport default Asset.extend();\n```\n\nAdd avatar/avatars to User model, and specify them on ```fileuploads``` property:\n\n```javascript\n//app/models/user.js\n...\nexport default DS.Model.extend({\n  ...\n  avatar:                     DS.belongsTo('avatar'),\n  avatars:                    DS.hasMany('avatar', {async: true}),\n\n  fileuploads: [\"avatar\", \"avatars\"]\n});\n```\nThen add an Avatar adapter like this:\n\n```javascript\n//app/adapters/avatar.js\nimport FileuploadAdapterMixin from 'ember-cli-admin/mixins/fileupload-adapter';\nimport ApplicationAdapter from './application';\n\nvar avatar = ApplicationAdapter.extend(FileuploadAdapterMixin, {\n});\n\nexport default avatar;\n```\nBy default, FileuploadAdapterMixin Asset type property is ```Asset```.\n\nIf your backend API expect for different type request parameters property you can specify it in your asset model.\n\nLet's say your API excepts Avatar type to be \"Avatar\", not \"Asset\".\n\nAlso, you need to define ```content_type``` property in your model. Ember-Cli-admin accepts standart MIME types and guesses how to display your assets based on it.\n\nYou can do this by editing your Avatar model like this:\n\n```javascript\n//app/models/avatar.js\n...\n\nvar avatar = Asset.extend({\n  type: DS.attr('string', {defaultValue: 'Avatar'}),\n  content_type: DS.attr('string')\n});\n\n...\n```\n\nAfter that you should specify ```sortAssetsBy: 'assetOrderProperty'``` in controller.\n\n### Set title\nBy default, navigation bar title display your application's module prefix. You can change this to any name of you choice by adding 'appName' property to your application config file.\n\nHere you can also change where the title link actually points to via 'titleLinksTo' property. If this property is not set, it will point to the root URL by default.\n\n```javascript\n//config/environment.js\n...\nvar ENV = {\n  ...\n  EmberENV: {\n    appName: 'application name of your choice',\n    titleLinksTo: '/example/url/'\n    ...\n    }\n  ...\n  }\n```\n\nThat's it!\n\n## Customize Templates\n\nYou can also provide your own template for the show, edit and new actions. These can override the global defaults as well as for specific resources.\n\n### Global Overrides\n\nPut your template in the `app/templates/admin` directory. For example:\n```\n#app/templates/admin/show.hbs\n#app/templates/admin/new.hbs\n#app/templates/admin/edit.hbs\n#app/templates/admin/form.hbs\n```\n\n### Resource Specific Override\n\nPut your template in `app/templates/[controllerName]` directory. For users resource:\n```\n#app/templates/users/show.hbs\n#app/templates/users/new.hbs\n#app/templates/users/edit.hbs\n```\n\nIf you have `admin/new.hbs` and `users/new.hbs` templates, the latter will be used for your users resource, and the first for all the other resources.\n\n## Searching\n\nAll model attributes, except of relations, are searchable in **search form** on resource index page.\nFor now, we render text inputs for all attributes. This will be fixed in future.\n\nIn your resource controller, you can specify search attributes that appear in this form:\n\n```javascript\n//app/controllers/users.js\n...\nisShowSearchForm: true,\nsearchForm: (function() {\n  return new SearchLogic().form(this.get('q'), function() {\n    this.input('email');\n    this.input('name', {type: 'autocomplete', url: '/api/users/autocomplete'});\n    this.input('price', {type: 'number'});\n  });\n}).property('q')\n...\n```\n\nYou can also provide your own search form template:\n```\n#app/templates/admin/search.hbs\n...\n```\nMore options for autocomplete check in `app/components/admin-typeahead.js`\n\n## Sorting\n\nYou can sort records on resource index page by attributes in ascending or descending order.\nTo specify fields for sorting, add `sortFields` property in your resource controller:\n```javascript\n//app/controllers/users.js\nimport SearchLogic from 'ember-cli-admin/dsl/search'\n...\n  sortFields: ['id', 'name'],\n...\n```\n\n## Sidebar\nYou can put sidebar for each resource:\n```javascript\n//app/controllers/users.js\n...\n  isShowSidebar: true,\n  sidebarTitle: 'Hi i am sidebar',\n  sidebarContent: '\u003cp\u003eSome Content\u003c/p\u003e'\n...\n```\nYou can also provide your own sidebar template:\n```\n#app/templates/users/sidebar.hbs\n...\n```\n\n### Nested Tree View\nYou can display **nested trees** of records in Ember-Cli-Admin.\nThey are implemented following the [nested set model pattern](http://en.wikipedia.org/wiki/Nested_set_model).\n\nIn your model:\n```javascript\n//app/models/catalogue.js\n...\nexport default DS.Model.extend({\n  name: DS.attr('string'),\n  parent_id: DS.attr('number'), //necessary\n\n  catalogues: DS.hasMany('catalogue', {async: true, inverse: null}),\n\n  children: Ember.computed.alias('catalogues'),        //necessary\n\n  rebuildUrl: function(){\n     return '/api/v1/catalogues';   //necessary\n  }.property()\n\n});\n```\n\nAdd `TreeViewController` Mixin to your resource controller:\n```javascript\n//app/controllers/catalogues.js\nimport TreeViewController from 'ember-cli-admin/mixins/controllers/tree-view';\n\nexport default Ember.Controller.extend(TreeViewController, {\n  formAttributes: ['name']\n});\n```\n\n## Show/hide table column\nYou can chose what table columns to display via table settings icon next to the 'Batch actions' button in the table header.\n\nEach controller has its own set of table settings that persist via browser local storage.\n\n## Integration with [elasticsearch](http://www.elasticsearch.org/)\nNow you can integrate admin with elasticsearch server. You need use [elasticsearch adapter](https://github.com/api-hogs/ember-data-elasticsearch-kit/blob/master/dist/ember-data-elasticsearch-kit.js) download into vendor and import it to app.\nThen you need turn CORS in elasticsearch, and create resource route:\n```javascript\n  //routes/users.js\n\n  /* global EDEK*/\n  import Ember from 'ember';\n  import BaseAdminRouteMixin from 'ember-cli-admin/mixins/routes/base';\n  import ElasticSearch from 'ember-cli-admin/mixins/routes/elasticsearch';\n\n  BaseAdminRouteMixin.reopen(ElasticSearch);\n\n  export default Ember.Route.extend(BaseAdminRouteMixin, {\n\n    //you need implement this method for ES search\n    _queryElasticsearch: function(query, params){\n      var fields = [];\n      var text = \"\";\n      for (var value in params){\n        fields.pushObject(value);\n        text += params[value].value;\n      }\n\n      if(fields.length === 0){\n        return query;\n      }\n\n      return  EDEK.QueryDSL.query(function(){\n        return this.flt({\n          fields: fields,\n          like_text: text,\n          max_query_terms: 12\n        });\n      });\n    }\n  });\n```\n\n## Change case for text in table, breadcrumbs, searchbar, etc.\n\nYou can change how text is dispayed in table, breadcrumbs, searchbar, etc.\n\nTo do this you should specify `caseType` property in controller.\n\nFor example,\n\n```javascript\n  //controllers/users.js\n\n  import TableViewController from 'ember-cli-admin/mixins/controllers/table-view'\n\n  export default Ember.Controller.extend(TableViewController, {\n    caseType: 'title'\n  });\n```\nYou have these options for case changing by default:\n\n- `title`\n- `upper`\n- `lower`\n\nBy default all text is lowercased.\n\nFor breadcrumbs:\n```javascript\n//config/environment.js\n...\nvar ENV = {\n  ...\n  EmberENV: {\n    appName: 'application name of your choice',\n    titleLinksTo: '/example/url/',\n    caseType: 'title'\n    ...\n    }\n  ...\n  }\n```\n## Contribution\nSee our wiki pages on [contributing](https://github.com/ember-admin/ember-cli-admin/wiki/Contributing) and [the roadmap](https://github.com/ember-admin/ember-cli-admin/wiki/Roadmap).\n\n## License\n\n\n[Licensed under MIT license] [1]\n\n[1]:http://opensource.org/licenses/mit-license.php\n[2]:https://github.com/activeadmin/activeadmin\n[3]:https://github.com/leschenko/ab_admin\n[4]:https://github.com/ember-admin/ember-cli-map\n[5]:https://github.com/ember-admin/ember-cli-admin-auth\n[6]:https://github.com/ember-admin/ember-cli-admin-languages\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fember-admin%2Fember-cli-admin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fember-admin%2Fember-cli-admin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fember-admin%2Fember-cli-admin/lists"}