Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Omelette.js Simple Autocompletion Helper for Node

branch: master

Omelette.js v0.0.1

Build Status

npm install omelette

Omelette is a simple, template based autocompletion tool for Node projects.

You just have to decide your program name and CLI fragments.

omelette "githubber <module> <command> <suboption>"

And you are almost done!



Implementing omelette is very easy.

#!/usr/bin/env coffee

omelette = require "omelette"
comp = omelette "programname <firstargument>"

comp.on "firstargument", ->
  @reply ["hello", "cruel", "world"]



It's based on a simple CLI template.

Let's think we have a executable file with the name githubber, in a global path.

And in our program, code will be:

#!/usr/bin/env coffee

omelette = require "omelette"

# Write your CLI template.
complete = omelette "githubber <action> <user> <repo>"

# Bind events for every template part.
complete.on "action", -> @reply ["clone", "update", "push"]

complete.on "user", (action)-> @reply fs.readdirSync "/Users/"

complete.on "repo", (user)->
  @reply [

# Initialize the omelette.

# Rest is yours
console.log "Your program's default workflow."
console.log process.argv

If you like oldschool:

var fs = require("fs"), 
    omelette = require("omelette");

// Write your CLI template.
var complete = omelette("githubber <action> <user> <repo>");

complete.on("action", function() {
  return this.reply(["clone", "update", "push"]);

complete.on("user", function(action) {
  return this.reply(fs.readdirSync("/Users/"));

complete.on("repo", function(user) {
  return this.reply([
    "" + user + "/helloworld", 
    "" + user + "/blabla"

// Initialize the omelette.

// Rest is yours.
console.log("Your program's default workflow.");

complete.reply is the completion replier. You should pass the options into that method.


Installing, and making your users install the autocompletion feature is very simple.

In zsh, you can write these:

echo '. <(./githubber --completion)' >> .zshrc

In bash, you should write:

./githubber --completion >> ~/
echo 'source ~/' >> .bash_profile

That's all!

Now you have an autocompletion system for your CLI tool.


There are some useful additions for omelette.


Callbacks have three parameters:

  • The number of fragment just for global event
  • The parent word.
  • The whole command line buffer allow you to parse and reply as you wish.

Global Event

You also can be able to listen all fragments by "complete" event.

complete.on "complete", (fragment, word, line)-> @reply ["hello", "world"]

Numbered Arguments

You also can listen events by its order.

complete.on "$1", (word, line)-> @reply ["hello", "world"]


Now, you can try it in your shell.

$ ./githubber<tab>
clone update push
$ ./githubber cl<tab>
$ ./githubber clone<tab>
Guest fka
$ ./githubber clone fka<tab>
$ ./githubber clone fka<tab>

Who uses?

Windows Azure uses Omelette to support autocompletion in azure-cli.


I need your contributions to make that work better!


This project licensed under MIT.

Build Status

Something went wrong with that request. Please try again.