Bootstraped Admin GUI addon for mongoose, jugglingdb, or just as a form generator
JavaScript CSS HTML
Latest commit 9a6f4b6 Jan 18, 2017 @refack refack committed on GitHub Merge pull request #139 from robbyoconnor/patch-1
Fix Travis badge
Failed to load latest commit information.
.idea/runConfigurations dev overhead Dec 21, 2016
.tmp fix for static user Jun 29, 2014
assets issue #117 - already escaped by $.params Aug 29, 2014
example Much more stable Dec 21, 2016
generated small templaet fix Jul 30, 2014
lib Much more stable Dec 21, 2016
test working with `grist` Sep 30, 2014
utils pre-push Feb 27, 2014
views small templaet fix Jul 30, 2014
.bowerrc Moving to bower Apr 4, 2014
.gitattributes settings May 14, 2014
.gitignore rebasing work Jul 5, 2014
.jshintignore overheads Feb 27, 2014
.travis.yml bump travis Dec 20, 2016
LICENSE License Aug 7, 2013 Fix Travis badge Jan 18, 2017
bower.json debounce select2 Jul 16, 2014
package.json 3.3.0 Dec 21, 2016


Bootstraped Admin GUI addon for Mongoose, JugglingDB, or just as a form generator. Originally forked from mongoose-admin.

Build Status


Example Usage

var express = require('express'),
    app = express();

require('formage').init(app, express, models);

Look at the \example directory.


// Site-wide options, and their default values
require('formage').init(app, express, models, {
    title: 'Admin',
    root: '/admin',
    default_section: 'main',
    username: 'admin',
    password: 'admin',
    admin_users_gui: true

Model options

var model = new mongoose.model('songs', schema);

// external files specific to this model
model.header_lines = [
   '<script src="/js/songs.js"></script>',
   '<style href="/css/songs.css"></style>'

model.formage = {
    // one-document models
    is_single: true,

    // labels
    label: 'My Songs',
    singular: 'Song',

    filters: ['artist', 'year'],

    // additional actions on this model
    actions: [
          id: 'release',
          label: 'Release',
          func: function (user, ids, callback) {
             console.log('You just released songs ' + ids);

    // list of fields to be displayed by formage for this model
    list: ['number', 'title', 'album', 'artist', 'year'],
    // order documents, save order in this field (type: Number)
    sortable: 'order',

    // list of order fields
    order_by: ['-year', 'album', 'number'],

    // list of fields that must be populated
    // (see
    list_populate: ['album'],

    // list of fields on which full-text search is available
    search: ['title', 'album', 'artist']


Formage comes with the following built-in fields, but custom fields can be written if needed.

You can pass options to the underlying fields and widgets:

var schema = new mongoose.Schema({
    artist: { type: String, label: 'Who made it?' },
    location: { type: Schema.Types.GeoPoint, widget_options: { lang: 'nl' }}

(The map widget lang setting is a two-letter ISO 639-1 code.)