AllcountJS

The fastest way to deliver web & mobile applications with business value

A.app({
  appName: "Hello World",
  appIcon: "heart",
  menuItems: [
    {
      name: "Gifts",
      icon: "gift",
      entityTypeId: "Gift"
    }
  ],
  entities: function(Fields) {
    return {
      Gift: {
        title: 'Gifts',
        fields: {
          item: Fields.text("Item"),
          date: Fields.date("Giving Date")
        }
      }
    }
  }
});

Fully customizable open source framework for rapid application development with Node.js

FollowAskChatMIT Licensed

What is it?

AllcountJS is an open source full-stack Node.js framework for rapid application development. AllcountJS is designed to build production-ready web and mobile CRUD-based applications in matter of minutes.


Forever free

AllcountJS is licensed under MIT license and free for both personal and commercial use.

No need to be a JS Guru

You can start develop production-grade applications even with minimal JavaScript background.

For Gurus

AllcountJS helps you significantly reduce code scattering for advanced projects.


Start your development with production-ready skeleton

A.app({
  appName: "Hello World",
  appIcon: "heart",
  menuItems: [
    {
      name: "Gifts",
      icon: "gift",
      entityTypeId: "Gift"
    }
  ],
  entities: function(Fields) {
    return {
      Gift: {
        title: 'Gifts',
        fields: {
          item: Fields.text("Item"),
          date: Fields.date("Giving Date")
        }
      }
    }
  }
});

Off-the-shelf Features

Auto-generated UI

AllcountJS provides nice Auto-generated UI built using AngularJS and Twitter Bootstrap based on your app configuration.

REST API

Integrate your application with ease using standard REST API for all of your objects.

Security

AllcountJS provides authentication, authorization and user management admin UI. You should only declare set of roles and their permissions.


Customize and build great UX with AngularJS and Jade

//...
div(ng-controller='EntityViewController')
    .container
        .row(ng-controller="PosController")
            .col-md-8
                .btn-toolbar(lc-list="'Item'", paging="{}")
                    .col-lg-4(ng-repeat="item in items")
                        button(ng-click="addItem(item)")
                            // … item content
                .container-fluid
                    h1 Total: {{...}}
                .btn-toolbar
                    // … actions
            .col-md-4
                +defaultEditForm()(ng-show="true")
                    +defaultFormTemplate()

Create mobile application

Use Ionic framework and Apache Cordova to build amusing hybrid iOS, Android or Windows Phone applications. Utilize Application configuration to build standard CRUD-based views and power of Ionic to fully customize it.


Common Use Cases

Admin tool or backoffice

AllcountJS can be embedded into existing express application and used as Admin UI or backoffice for your main app.

Learn More

CRUD Application

If you're seeking for a fast way to build application where CRUD is a primary function even with custom UI then AllcountJS is a right choice.

Learn More

Application Platform

If you're consulting software development company and willing to optimize your development costs consider AllcountJS as a basement for your solution.

Learn More

Use AllcountJS as Node.js dependency

var injection = require('allcountjs');
injection.bindFactory('port', 9080);
injection.bindFactory('dbUrl', 'mongodb://localhost:27017/helloworld');
injection.bindFactory('gitRepoUrl', 'https://github.com/foo/bar.git');
var server = injection.inject('allcountServerStartup');
server.startup(function (errors) {
    if (errors) {
        throw new Error(errors.join('\n'));
    }
});

Add custom behavior with Dependency Injection

scraper.js

var cheerio = require('cheerio');
var rp = require('request-promise');
module.exports = function () {
  return {
    scrape: function (url) {
      var self = this;
      return this.cheerioRequest(url).then(function ($) {
        var categoriesList = $('a', $('.level1'))
          .map(function () {
            return $(this).attr('href');
          }).get();
        //...
        return items;
      })
    },
    cheerioRequest: function (url) {
      return rp({
        url: url,
        transform: function (body) {
          return cheerio.load(body)
        }
      });
    }
  }
}

App config

actions: [{
  id: 'scrape',
  name: 'Scrape',
  actionTarget: 'single-item',
  perform: function (Scraper, Crud, Actions, Pipes) {
    var crud = Crud.actionContextCrud();
    return Scraper.scrape("http://acme.com")
      .then(function (items) {
        return Pipes.oneWayImportSync(
          items,
          'Items',
          {filtering: {isExternal: true}}, {
          keyFn: function (i) { return i.name }
        })
      }).then(function () {
        return Actions.refreshResult();
      });
  }
}]

Use it in the existing Express app

var injection = require('allcountjs');
injection.bindFactory('port', function () {
  return app.get('port')
});
// Use same express dependency across the app
injection.bindFactory('express', function () {
  return require('express');
});
// Don't init new httpServer
injection.bindFactory('httpServer', function () {
  return function (handler, callback) {
    callback();
  }
});
// Disable some any setup phases in case it's already configured
injection.bindFactory('sessionSetup', function () {
  return {
    setup: function () {}
  }
});
// Add viewPaths of your app
injection.bindMultiple('viewPaths', ['templatePaths']);
injection.bindFactory('templatePaths', function () { return ['templates/views'] });
injection.bindFactory('dbUrl', mainDbUrl);
injection.bindFactory('gitRepoUrl', 'app-config');
// Use existing express app instance
injection.bindFactory('app', function () {
  return app;
});
var server = injection.inject('allcountServerStartup');
server.startup(function (errors) {
  if (errors) {
    throw errors;
  }
});

Customization Features

Replace every part

You can replace every part of framework by simply overriding particular dependency or even use it as a library.

Minimum code amount

There is a hierarchy of default implementations that help developers override exactly what differs.

Plays good with others

AllcountJS uses Node.js, AngularJS, Express, MongoDB, Git, Twitter Bootstrap and others. AllcountJS allows you to use their raw power.


Try it now or write your code here Demo application. It will be purged within 24 hours after run.

Use "Login using AllcountJS" or admin/admin as login/password to sign in


Or run this demo locally with: allcountjs init --template {{app.appName}}. Please read Getting Started on how to setup AllcountJS environment.

Getting Started