npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

ekitjs

v0.1.3

Published

EkitJS - A web framework is built on the top of expressjs + mongodb native driver + socket.io, aims to reduce web development lifecycle, effective in collaboration, reusable code, dealing with business logic and support real time sync data from Database to Web Client.

Readme

ekitJS

A web framework is built on the top of expressjs + mongodb native driver + socket.io, aims to reduce web development lifecycle, effective in collaboration, reusable code and support real time sync data from Database to Web Client.

Start server with a single line of code

require('ekitjs').start(__dirname);

controller.js

module.exports = {
	'*': function(req, res, next){
		res.render(path.join(__dirname, '..', 'static', 'view', 'index.html'), {
			css: ekitjs.asset.renderTags('css'),
			js: ekitjs.asset.renderTags('js')
		});
	},
	'get://docs': function(req, res, next){
		// init route for http://127.0.0.1/docs
		res.render(path.join(__dirname, '..', 'static', 'view', 'docs.html'), {
			css: ekitjs.asset.renderTags('css'),
			js: ekitjs.asset.renderTags('js')
		});
	},
	'post://login': function(req, res, next){
		// listen post request from client at the url http://127.0.0.1/login
		res.send('Login successful');
	},
	'put://update_something': function(req, res, next){
		// update something...
		res.send('Update successful');
	},
	'delete://delete_something': function(req, res, next){
		// delete something...
		res.send('Delete successful')
	}
};

model.js

module.exports = {
	_name: 'user'
};

Done! Really simple!

Introduction

ekitJS is a web framework is built on the top of orther basic NodeJS modules like: expressjs, mongo native driver, socket.io, ejs template system... So, it does not require any new coding syntax. What we are doing is re-organize the coding structure and propose the new way to help web development easier, faster and more collaborate. The most important different in ekitJS framework is the balance between the ease of use and the flexibility that the framework can support to help developer dealing with most of the application logic in an very effective way.

Five Principles of ekitJS

  • Full Stack Javascript: It is really awesome when you can use the same language in both server-side and client-side. Then, the code can be reusable.
  • Database Everywhere: Use the same transparent API to access your database from the client or the server.
  • Everything can be inherit: We create all models based on the Class which supports extend and include method to help you deal with Object. It is also really easy like JSON. So, most of the time, you can inherit or override everything even ekitjs core class.
  • Real time webapp via socket.io: Realtime webapp embeded in the framework is needed now. We give you an option to specify which query want to sync from database and which does not. This is really fantastic.
  • Module-Based and MVC combine: We beleive that the MVC model is not enough in collaborate development. We combine the module-based system and MVC inside each module to make the web development more dependent and easier. We call each module as ADDON. The point is that you can inherit or override model in another addon and define dependency list. Again, it is super easy but really awesome.

What problem we try to solve for you?

Business logic or application logic is the important part in most of application from online shop to product company or even large business. Some of examples are:

  • Require value.
  • Data validation.
  • Function field(*).
  • Create Invoice when the Status field of Sale Order changes.
  • Calculate Total Price of Sale Order Detail when it changes.

In most of other frameworks, the business logic often is solved in Controller. In some case, you may need to duplicate your code. So, the consistency is not 100%.

In NoSQL expecially in MongoDB, the concept is Free Style Schema. For us, free style schema does not mean that it does not need schema. For example: NoSQL allow you to define field name in many different ways:

Option 1:

{
	first_name,
	last_name
}

Option 2:

{
	name: {
		first,
		last
	}
}

The point is that after you chose option 1, option 2 or option x, this collection must have the same structure in all document. So, what do you think? Change your mind about what Free Style Schema mean deeply or not? You can post your comment about The Need Of Schema, even in MongoDB in Our Gooogle Group.

So, in ekitJS framework, we propose dealing with business logic in Model, rather than in Controller. All business logic can be solve in Model. 100% consistancy, effective and really simple as below:

Simple require field:

module.exports = {
	_name: 'user',
	_column: {
		name: {
			first: types.auto(),
			last: types.auto(),
		},
		username: types.auto({
			require: true
		})
	}
};

Simple password pre-validate:

module.exports = {
	_name: 'user',
	_column: {
		name: {
			first: types.auto(),
			last: types.auto(),
		},
		username: types.auto({
			require: true
		}),
		password: types.auto({
			validate: function(data) {
				if(data !== undefined) {
					// do some password encryption here
					return 'md5_' + data;
				};
				return data;
			}
		})
	}
};

Simple function field:

module.exports = {
	_name: 'user',
	_column: {
		name: {
			first: types.auto(),
			last: types.auto(),
			full: types.func({
				get: function(ids, data, callback) {
					var res = {};
					this.read({
						_id: {
							$in: ids
						}
					}, function(err, docs) {
						_.each(docs, function(doc) {
							res[doc._id] = [doc.name.first, doc.name.last].join(' ');
						});
						callback(res);
					});
				}
			})
		}
	}
};

In the above example, the field name.full is always the combination between first name and last name. It will not be stored physically in database. It will be automatically calculated when you make a query.

Simple model trigger:

module.exports = {
	_name: 'user',
	_column: {
		name: {
			first: types.auto(),
			last: types.auto()
		}
	},
	createTrigger: function(ids){
		// do some stuff here

		// call parent method
		this._super.apply(arguments);
	},
	updateTrigger: function(ids){
		...
	},
	deleteTrigger: function(ids){
		...
	}
};

Checkout ekitJS API to get more example.

Demo

Checkout source code and demo at https://github.com/henrytao-me/ekitjs-sample

Contact us

Website: http://ekitjs.com

Twitter: @ekitJS

Google Groups: http://groups.google.com/group/ekitjs