node package manager
Stop writing boring code. Discover, share, and reuse within your team. Create a free org »


appgen - Node.js module

A software development toolkit that lets you generate many different versions of the same app.

If you're using this module, feel free to contact me on twitter if you have any questions! :) @rjrodger

Current Version: 0.1.1

Tested on: node 0.8.6

The appgen module is a build tool similar to make or ant, except that it can produce multiple versions of the same app from a common set of resources. You can easily handle platform quirks, compatibility issues, skinning, feature selection by defining variations within a well-defined build structure.

The appgen module can help you build HTML5 cross-platform apps, hybrid apps, native apps, or entire services that need to have mobile, tablet, web, tv or other interfaces.

You can also buils variants of the same app, where you need to reskin for different clients, or pick and choose features. You can even build apps on demand.

You still have to provide the app source code, of course, but instead of tearing your hair out with CSS hacks, platform sniffing if statements, and last minute cut-and-paste desparation, you can get your code back under control.

Code Example

Take these as your base files, the templates from which your app is built:


  <link rel="stylesheet" href="${name}.css" />
 Hello <%="World!"%>


body {
  background-color: blue;


body {
  background-color: black;

And define a build specification to create two versions of your app: an iOS fork, and an Android fork:


module.exports = {
  conf: { title:'Generic' },
  steps: [
    { name:'fork', forks: [ 
      { name:'ios',     conf: { title:'iOS' }}, 
      { name:'android', conf: { title:'Android' }} 
    ] },
    { name:'import',   path:'${name}.css' },
    { name:'template', path:'index.html' }

This build specification also copies in ios.css or android.css depending on the name of the fork. The index.html file is a template.

Then you can run appgen to generate two versions:

$ appgen -v simple-spec.js
fork: main: {"title":"Generic"}
fork: main-ios: {"title":"iOS"}
save: {"path":"ios.css"}
save: {"path":"index.html"}
fork: main-android: {"title":"Android"}
save: {"path":"android.css"}
save: {"path":"index.html"}

By default the _gen folder contains the output versions, each in a separate folder. In this case, main-ios, and main-android. All these things are configurable.

appgen is language agnostic. While it's perfect for HTML5 apps, it will also work with any codebase. In fact, the common scenario for hybrid apps, where your app is mostly HTML-based, but you have a few platform specific plugins written in Objective-C or Java, is exactly what appgen is designed for.

What would you use appgen?

  • You need to build lots of similar apps
  • You need to support multiple configurations
  • You need to build cross-platform HTML5 apps
  • You need to let users create pre-defined apps
  • You need a ready-made way to organize your code


To install as a development tool:

npm install -g appgen

And then from the comman line:

$ appgen path/to/my-spec.js

Or, if you are using it within a service:

npm install appgen

And in your code:

var appgen = require('appgen')

var generator = new appgen.AppGen({spec:{conf:..., steps:...}})
generator.exec({title:'My Title'}, function(err,log){ ... })

Key Concepts


Transformation Steps

Settings and Context


Build Specifications



gen Schema

Build Steps


Writing Your Own Build Steps

Module API