{"id":19353534,"url":"https://github.com/elldritch/orbit","last_synced_at":"2026-07-12T22:32:04.154Z","repository":{"id":12894149,"uuid":"15571050","full_name":"elldritch/orbit","owner":"elldritch","description":"Finally, a Node.JS framework that isn't brain surgery.","archived":false,"fork":false,"pushed_at":"2014-03-01T12:56:27.000Z","size":812,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-20T06:00:12.998Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/elldritch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-01-01T22:23:23.000Z","updated_at":"2017-07-28T03:13:50.000Z","dependencies_parsed_at":"2022-08-28T14:11:37.138Z","dependency_job_id":null,"html_url":"https://github.com/elldritch/orbit","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/elldritch/orbit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elldritch%2Forbit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elldritch%2Forbit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elldritch%2Forbit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elldritch%2Forbit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/elldritch","download_url":"https://codeload.github.com/elldritch/orbit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elldritch%2Forbit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35404819,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-12T02:00:06.386Z","response_time":87,"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":[],"created_at":"2024-11-10T04:43:12.185Z","updated_at":"2026-07-12T22:32:04.132Z","avatar_url":"https://github.com/elldritch.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Orbit\n\n[![Build Status](https://travis-ci.org/The2ndOne3/orbit.png?branch=master)](https://travis-ci.org/The2ndOne3/orbit)\n[![NPM version](https://badge.fury.io/js/generator-orbit.png)](http://badge.fury.io/js/generator-orbit)\n\nOrbit is a loosely coupled framework that minimises black magic usage. Finally, an MVC framework that isn't brain surgery.\n\n## Philosophy\nSometimes, opinionated stacks are good. Boilerplates, scaffolding, and best practice structuring are all very helpful. But what if you only want part of a framework? What if you agree with socket wrapping but not policy-based authentication? What if you want Jade instead of Dust, or vice versa? Pulling out just the pieces you want usually requires several hours of learning how a deeply connected framework works, trying to make sense of poorly documented black magic.\n\nNot so with Orbit. Loosely coupled, but still opinionated. Well-documented, familiar, and easy-to-navigate inner workings. Want to use a different module? Just swap middleware and you're good to go.\n\n## Installation\nOrbit is packaged as a Yeoman generator. To install, run `npm -g install yo generator-orbit` and run `yo orbit` to start a project.\n\n## Usage\n### Package Management\nClient-side components are handled by `bower install`, which installs into `public/components`. Server-side components are handled by `npm install` into `node_modules`.\n\n### Server Daemon\n`npm start` will call `nodemon app.js` on port 8000. Don't like `nodemon`? Try `forever`. Need programmatic daemon control? Try writing a `daemon.js` instead using `forever-monitor`, then setting `npm start` to `node daemon.js`.\n\n### Server Middleware\nOrbit's server is a standard Express stack. It takes all standard Connect-compatible middlewares. Here's the default stack:\n* [Blade](https://github.com/bminer/node-blade) for view engine\n* [Helmet](https://github.com/evilpacket/helmet) for security\n* [Enrouten](https://github.com/paypal/express-enrouten) for routing\n* [Stylus](https://github.com/learnboost/stylus) + [Nib](https://github.com/visionmedia/nib) for CSS preprocessing\n* Automatic view rendering\n* 404 and 500 pages under 'errors' view folder\n\n### Routing\nOrbit uses `express-enrouten` as its default routing engine. Enrouten scans the `controllers` directory for any modules that export a function of the signature `function(app){ ... }` and passes them the Express app. Within each controller, you can then declare an arbitrary amount of routes using `app.get` as usual. See Enrouten's documentation for more details.\n\nIf a view exists but a route with its name does not, Orbit will automatically attempt to render that view without locals. For example, if only `app.get('/alice', ...)` and `app.get('/bob', ...)` are defined, a request to `/eve` will attempt to `res.render('eve')` before falling back to a 404.\n\nWant resourceful routing? That's basically the same thing as declaring a bunch of routes on different verbs, but Orbit supports it anyway -- just plug in [express-resource](https://github.com/visionmedia/express-resource).\n\n### Templates\nOrbit uses `node-blade` as its default client-side and server-side templating solution. Server-side templates are stored in the `views` folder while client-side templates are stored in `public/templates`. See Blade's documentation for more details.\n\nWant to use Jade as your templating language instead? Check out [jade-browser](https://github.com/storify/jade-browser) for client-side rendering and [grunt-contrib-jade](https://github.com/gruntjs/grunt-contrib-jade) if you want precompilation. Server-side rendering works the same as vanilla Express.\n\n### Models\nOrbit doesn't come with a default model system, but recommends [Mongoose](https://github.com/LearnBoost/mongoose) for MongoDB databases and [Sequelize](https://github.com/sequelize/sequelize) for SQL databases. Anything that supports Express also supports Orbit right out of the box.\n\n### Testing\nOrbit uses [Mocha](https://github.com/visionmedia/mocha) for testing by default, with [Chai](https://github.com/chaijs/chai) as the assertions library and [SuperTest](https://github.com/visionmedia/supertest) for super-agent testing.\n\nOrbit doesn't come with a default client-side JavaScript testing framework, but recommends [Karma](https://github.com/karma-runner/karma) and [PhantomJS](https://github.com/ariya/phantomjs/).\n\n### Deployment\nOrbit uses a premade `Gruntfile.js` with the following default tasks:\n* `clean`\n  * Clean the `.build` folder\n* `build`\n  * Run `jshint` linting\n  * Compile Stylus files\n  * Link and optimise RequireJS files if using RequireJS\n  * Copy compiled files to `.build`\n* `test`\n  * Runs Mocha unit tests.\n\nWhen `NODE_ENV` is set to `production`, Orbit automatically compresses its responses and serves precompiled files from `.build` -- don't forget to `grunt build` beforehand!\n\n## License\nCopyright 2013 Lehao Zhang\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felldritch%2Forbit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felldritch%2Forbit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felldritch%2Forbit/lists"}