Skip to content
Grasshopper is a feature-rich and flexible MVC framework for web applications and services built on node.js.
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


A simple MVC framework for web applications built on node.JS. Follow the instructions to install node.JS. Join the mailing list for further help and feedback.

This framework is licensed under the terms of Apache License, Version 2.0.


  • Integrated support for dependency injection.
  • Filters for intercepting requests.
  • Allows adding view helpers to enable smarter views.
  • Supports i18n out of the box.
  • Handles updation and validation of models from forms.
  • Layout and "include" support for views.
  • Automatic selection of view file based on request's extension.
  • Session management with support for custom session storage.
  • Simple API to create and consume cookies.
  • Fast file uploads using node-formidable.
  • Makes sending files as response attachments using 'Content-Disposition' simple.
  • Supports partial download of static files.
  • Supports if-modified-since, if-none-match and if-range headers.
  • Plenty of documentation through examples (Wiki will be updated with more tutorials).

Hello World

  1. Clone the repository using git clone git:// && cd grasshopper/ && git submodule update --init.
  2. Create a directory for your application and symlink the cloned repository to it.
  3. Create a file named hello.js in your application's directory with the following content.

    var gh = require('./grasshopper');
    gh.get('/', function() {
            this.renderText('Hello World!');
  4. From your applications directory invoke the command node hello.js.

  5. Point your browser at http://localhost:8080.

Arguments in URL and Template Files

Arguments passed as part of the URL can be obtained with an additional parameter in the controller function, to which a hash of arguments defined between {} in your route and their values would be passed.

Template File Format (GHP - GrassHopper Pages)

  1. Text inside <% and %> are evaluated as Javacript code.
  2. Text inside <%= and %> are evaluated as Javascript code and its result is included into the output.

  3. Create a file named greeting.html in your application's directory with the following content. This would act as your template file.

            <title>Template Sample</title>
            <h1>Welcome, <%= name %>!</h1>
  4. Create a file named template.js in your application's directory with the following content. The 'model' property of 'this' must be setup with the data items used in the template. The render function must be invoked with the name of a template file (without extension). The extension of the template file to use is determined by the extention of the request URL (.html, if none specified).

    var gh = require('./grasshopper');
    gh.get('/greetings/{name}', function(args) {
            this.model['name'] =;
  5. From your applications directory invoke the command node template.js.

  6. Point your browser at http://localhost:8080/greetings/ABC.

Dependency Injection

Hashes containing the necessary dependencies can be added to the this context of your controller functions, using the gh.addToContext() function. You can either specify all the hashes to be included in a single invocation or in multiple invocations. For example,

var gh = require('./grasshopper');

var dependencies = {
    dataService: {
        getStock: function() {
            return 100;

gh.get('/', function() {
    this.renderText('There are ' + this.dataService.getStock() + ' units in stock!');


To Do

  • Support flash messages.
  • Improve template engine to allow callbacks in helpers.
Something went wrong with that request. Please try again.