{"id":17992793,"url":"https://github.com/leostera/ng2","last_synced_at":"2026-03-05T23:15:36.765Z","repository":{"id":10678159,"uuid":"12915802","full_name":"leostera/ng2","owner":"leostera","description":":triangular_ruler: minimalistic modular angular.js app generator (outdated as of Dec 1st, 2013)","archived":false,"fork":false,"pushed_at":"2016-02-14T10:05:45.000Z","size":922,"stargazers_count":94,"open_issues_count":4,"forks_count":6,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-08-09T12:03:37.433Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://www.ostera.io/ng2","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/leostera.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-09-18T06:31:13.000Z","updated_at":"2024-03-07T13:22:09.000Z","dependencies_parsed_at":"2022-09-24T06:21:05.982Z","dependency_job_id":null,"html_url":"https://github.com/leostera/ng2","commit_stats":null,"previous_names":["ng2/ng2","leostera/ng2"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/leostera/ng2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leostera%2Fng2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leostera%2Fng2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leostera%2Fng2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leostera%2Fng2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/leostera","download_url":"https://codeload.github.com/leostera/ng2/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leostera%2Fng2/sbom","scorecard":{"id":585299,"data":{"date":"2025-08-18","repo":{"name":"github.com/leostera/ng2","commit":"ccabb0c23e0e9b962c18a10b0d939ca4afef202f"},"scorecard":{"version":"v5.2.1-41-g40576783","commit":"40576783fda6698350fcbbeaea760ff827433034"},"score":2.6,"checks":[{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#token-permissions"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#pinned-dependencies"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 1/30 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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#code-review"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#packaging"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#binary-artifacts"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#dangerous-workflow"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#cii-best-practices"}},{"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/40576783fda6698350fcbbeaea760ff827433034/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/40576783fda6698350fcbbeaea760ff827433034/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/40576783fda6698350fcbbeaea760ff827433034/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/40576783fda6698350fcbbeaea760ff827433034/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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#branch-protection"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 1 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T20:19:38.596Z","repository_id":10678159,"created_at":"2025-08-20T20:19:38.597Z","updated_at":"2025-08-20T20:19:38.597Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30154526,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T22:39:40.138Z","status":"ssl_error","status_checked_at":"2026-03-05T22:39:24.771Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":[],"created_at":"2024-10-29T20:09:16.207Z","updated_at":"2026-03-05T23:15:36.739Z","avatar_url":"https://github.com/leostera.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ng2 – minimalistic, modular angular.js app generator\n\n\u003e Note! Please keep in mind this project is unmaintained and it's not related to AngularJS v2.x\n\n### Motivation\n\nI started this project because I wanted something like `rails g` but for Angular, and I didn't want the bloat that most generators out there have. So far this does the job alright in being very lean, extendable and fast enough for my slowest computer not to complain. Everyone is invited to collaborate and make this a tool we can all enjoy using.\n\n`ng2` is aimed at AngularJS only, so there's no need to compromise for generality, and it makes some choices for you:\n\n* Your app will be composed of discrete CommonJS modules you install with [component.io](https://github.com/component) or that you scaffold using ng2\n\n* Your app gets concatenated and served altogether from a single pair of .js and .css files\n\n* You want to reuse as much code possible from others, share all you can code with others, and write the least amount of code possible to make something work\n\nIt's the rough equivalent to rails generators (far less sophisticated yet, but we'll get there eventually) that uses a package manager (component) similar to npm (in some ways), and lets you use a synchronous require call (thus no more ugly AMD/UMD definitions and such).\n\n## Installation \nAs a regular node cli tool, you can install this with `npm --global install ng2`. It requires `component` as a `peerDep`.\n\n## Getting started\n\nLet's make a sample app here:\n\n```\n$ ng2 sampleApp\n$ cd sampleApp\n$ component install\n```\n\nNow you can start creating modules and after that, resources, like this:\n\n```\n$ ng2 module leostera/login\n$ ng2 module --owner=leostera navbar comments\n```\n\nThe `--owner` option is a shortcut so you don't have to add the prefix to every module when creating more than one.\n\nAnd you already have 3 modules created for you. Scaffolding resources is just as easy:\n\n```\n$ ng2 login script config\n$ ng2 login script routes\n$ ng2 login controller login logout\n$ ng2 login view login-form register-form\n\n$ ng2 navbar controller main\n$ ng2 navbar view navbar\n\n$ ng2 comments script config\n$ ng2 comments script routes\n$ ng2 comments controller list edit\n$ ng2 comments view list edit\n$ ng2 comments filter search\n$ ng2 comments provider comments\n```\n\nThis will generate the following structure:\n\n```\nsampleApp\n|-- component.json\n|-- components\n|-- app\n   |-- index.html\n   |-- comments\n      |-- controllers\n         |-- list.js\n         |-- edit.js\n      |-- views\n         |-- list.html\n         |-- edit.html\n      |-- filters\n         |-- search.js\n      |-- provider\n         |-- comments.js\n      |-- component.json\n      |-- index.js\n      |-- config.js\n      |-- routes.js\n   |-- login\n      |-- controllers\n         |-- login.js\n      |-- views\n         |-- login-form.html\n      |-- component.json\n      |-- index.js\n      |-- config.js\n      |-- routes.js\n   |-- navbar\n      |-- controllers\n         |-- navbar.js\n      |-- views\n         |-- navbar.html\n      |-- component.json\n      |-- index.js\n\n```\n\nWhere each of the modules you have in your application (under the app branch in that tree) are perfectly reusable and shareable CommonJS, `component` compatible modules. Something as easy as \n\n```\n$ cd app/comments\n$ git init .\n$ git remote add origin https://github.com/\u003cyour-username\u003e/\u003crepo-name\u003e.git\n$ git commit -am \"Woo lets share!\"\n$ git push\n```\n\n(Provviding your github repo exists) Will get you a module you can install directly with a simple \n\n```\ncomponent install \u003cyour-username\u003e/\u003crepo-name\u003e\n```\n\nin any other `component` project you have and since the repo is public, anyone can use it too! Isn't that neat?\n\nOk, proceeding. now that you have all this stuff, you can just build it doing\n\n```\ncomponent build\n```\n\nIf you get an error like this one:\n\u003e error : ENOENT, open '/Users/leostera/repos/ng2/test/test_7/modules/contact/views/form.js'\n\nthat means you haven't compiled the html templates into javascript. You can do that by running\n\n```\nng2 html2js\n```\n\nNow a regular `component build` should do it's work in a couple tens of milliseconds and the app is ready to be served by your webserver of choice, or just locally by running `ng2 server`.\n\nNotice there's a lot of functionality bundled with `ng2`, thou it's not really tied to it. Read more about this in the [Plugins](#plugins) section.\n\n## Usage\nIf you find yourself in trouble, running `ng2 --help` is always useful.\n\n```\n○ ng2 --help\nlog:  It worked if it ends with OK\nlog:  Usage:\nlog:\nlog:    ng2 \u003capp-name\u003e [options]\nlog:\nlog:      Create a folder \u003capp-name\u003e and start a new application inside.\nlog:      If a \u003cpath\u003e is specified then it will start it in such path\nlog:      and the application name will be the name of the last directory.\nlog:\nlog:\nlog:    ng2 [options] module \u003cmodule-name\u003e\nlog:\nlog:      Scaffold a new module named \u003cmodule-name\u003e.\nlog:\nlog:\nlog:    ng2 \u003cmodule-name\u003e [options] [generator] [params [, more params]]\nlog:\nlog:      It will use one of the following generators within the specified\nlog:      module named \u003cmodule-name\u003e.\nlog:\nlog:\nlog:  Generators:\nlog:      * controller\nlog:\nlog:  Plugins: (generators are plugins, too)\nlog:      * controller\nlog:      * module\nlog:      * server\nlog:\nlog:  For additional help on any plugin, use the --help flag\nlog:  like this: ng2 \u003cplugin-name\u003e --help\nlog:\nlog:  OK\n\n```\n\nRegularly you would use this as described in the [Getting Started](#getting-started) section.\n\n## Plugins\nThe plugin system is very simple, it looks for binaries named `ng2-` and allows you to run them thru `ng2 \u003cname\u003e`. Some examples of this are:\n\n* `ng2-server` – callable as `ng2 server`.\n* `ng2-scaffolder` – the default scaffolder.\n* `ng2-module` – the module generator\n\nAs you can see, there is also a `ng2-controller` binary. This is because  I want `ng2` to be easily extendable and customizable. Any generator will override the default `scaffolder`. You can still access the `scaffolder` as `ng2 scaffolder \u003ctemplate\u003e [params]`. This way you can specify your very own `ng2 controller` behavior but fallback to the original `scaffolder` if need be.\n\nThe current bundled plugins are listed in the `./bin` folder in this very repo. Eventually, if necessary, they will be taken out of `ng2` and required as `peerDeps` or simply external modules.\n\n\n[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/ng2/ng2/trend.png)](https://bitdeli.com/free \"Bitdeli Badge\")\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleostera%2Fng2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleostera%2Fng2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleostera%2Fng2/lists"}