diff --git a/npm/npm.d.ts b/npm/npm.d.ts
new file mode 100644
index 0000000000..e81fb6c5bc
--- /dev/null
+++ b/npm/npm.d.ts
@@ -0,0 +1,461 @@
+// Type definitions for npm 2.0.0
+// Project: https://github.com/npm/npm
+// Definitions by: Maxime LUCE
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+declare module NPM {
+ export interface Static extends NodeJS.EventEmitter {
+ config: Config;
+ commands: Commands;
+ rollbacks: any[];
+ spinner: Spinner;
+ fullList: string[];
+ abbrevs: Dictionary;
+
+ prefix: string;
+ bin: string;
+ globalBin: string;
+ dir: string;
+ globalDir: string;
+ root: string;
+ cache: string;
+ tmp: string;
+
+
+ load(cli: ConfigOptions): void;
+ load(callback: SimpleCallback): void;
+ load(cli: ConfigOptions, callback: SimpleCallback): void;
+
+ deref(command: string): string;
+ }
+
+ //#region Commands Interfaces
+
+ export interface Commands {
+ // Commands
+ install: CommandFunction;
+ uninstall: CommandFunction;
+ cache: CommandFunction;
+ config: CommandFunction;
+ set: CommandFunction;
+ get: CommandFunction;
+ update: CommandFunction;
+ outdated: CommandFunction;
+ prune: CommandFunction;
+ submodule: CommandFunction;
+ pack: CommandFunction;
+ dedupe: CommandFunction;
+
+ rebuild: CommandFunction;
+ link: CommandFunction;
+
+ publish: CommandFunction;
+ star: CommandFunction;
+ stars: CommandFunction;
+ tag: CommandFunction;
+ adduser: CommandFunction;
+ unpublish: CommandFunction;
+ owner: CommandFunction;
+ deprecate: CommandFunction;
+ shrinkwrap: CommandFunction;
+
+ help: CommandFunction;
+ "help-search": CommandFunction;
+ ls: CommandFunction;
+ search: CommandFunction;
+ view: CommandFunction;
+ init: CommandFunction;
+ version: CommandFunction;
+ edit: CommandFunction;
+ explore: CommandFunction;
+ docs: CommandFunction;
+ repo: CommandFunction;
+ bugs: CommandFunction;
+ faq: CommandFunction;
+ root: CommandFunction;
+ prefix: CommandFunction;
+ bin: CommandFunction;
+ whoami: CommandFunction;
+
+ test: CommandFunction;
+ stop: CommandFunction;
+ start: CommandFunction;
+ restart: CommandFunction;
+ "run-script": CommandFunction;
+ completion: CommandFunction;
+
+ //Aliases
+ rm: CommandFunction; // uninstall
+ r: CommandFunction; // uninstall
+ un: CommandFunction; // uninstall
+ unlink: CommandFunction; // uninstall
+ remove: CommandFunction; // uninstall
+ rb: CommandFunction; // rebuild
+ list: CommandFunction; // ls
+ la: CommandFunction; // ls
+ ll: CommandFunction; // ls
+ i: CommandFunction; // install
+ isntall: CommandFunction; // install
+ up: CommandFunction; // update
+ c: CommandFunction; // config
+ info: CommandFunction; // view
+ show: CommandFunction; // view
+ find: CommandFunction; // search
+ s: CommandFunction; // search
+ se: CommandFunction; // search
+ author: CommandFunction; // owner
+ home: CommandFunction; // docs
+ issues: CommandFunction; // bugs
+ unstar: CommandFunction; // star
+ apihelp: CommandFunction; // help
+ long: CommandFunction; // adduser
+ "add-user": CommandFunction; // adduser
+ tst: CommandFunction; // test
+ t: CommandFunction; // test
+ "find-dupes": CommandFunction; // dedupe
+ ddp: CommandFunction; // dedupe
+ v: CommandFunction; // view
+
+ // plumbing
+ build: CommandFunction;
+ unbuild: CommandFunction;
+ xmas: CommandFunction;
+ substack: CommandFunction;
+ visnup: CommandFunction;
+
+ }
+
+ export interface CommandFunction {
+ (args: string[], callback: CommandCallback): void;
+ }
+
+ export interface CommandCallback {
+ (err?: Error, result?: any, result2?: any, result3?: any, result4?: any): void;
+ }
+
+ //#endregion
+
+ //#region Other Interfaces
+
+ export interface Spinner {
+ int: string;
+ started: boolean;
+ start(): void;
+ stop(): void;
+ }
+
+ //#endregion
+
+ //#region Config Interfaces
+
+ export interface ConfigStatic {
+ new (base: Config): Config;
+ (base: Config): Config;
+ }
+
+ export interface Config {
+ loaded: boolean;
+ sources: Dictionary;
+ rootConf: Config;
+ usingBuiltin: boolean;
+ root?: Config;
+ Conf: ConfigStatic;
+ defs: ConfigDefs;
+
+ get(setting: string): string;
+ set(setting: string, value: string): void;
+
+ loadPrefix(cb: ErrorCallback): void;
+ loadCAFile(caFilePath: string, cb: ErrorCallback): void;
+ loadUid(cb: SimpleCallback): void;
+ setUser(cb: ErrorCallback): void;
+ findPrefix(prefix: string, cb: SimpleCallback): void;
+ getCredentialsByURI(uri: string): Credentials;
+ setCredentialsByURI(uri: string, cred: Credentials): void;
+
+ loadExtras(cb: ErrorCallback): void;
+ save(where: string, cb: ErrorCallback): Config;
+ addFile(file: string, name: string): Config;
+ parse(content: string, file: string): any;
+ add(data: Object, marker: Object): any;
+ addEnv(env: Dictionary): any;
+ }
+
+ export interface ConfigDefs {
+ defaults: ConfigOptions;
+ types: ConfigTypes;
+ }
+
+ export interface ConfigOptions {
+ "always-auth"?: boolean;
+ "bin-links"?: boolean;
+ browser?: string;
+
+ ca?: any; // string | string[]
+ cafile?: string;
+
+ cache?: string;
+
+ "cache-lock-stale"?: number;
+ "cache-lock-retries"?: number;
+ "cache-lock-wait"?: number;
+
+ "cache-max"?: number;
+ "cache-min"?: number;
+
+ cert?: string;
+
+ color?: any; // boolean | string ("always")
+ depth?: number;
+ description?: boolean;
+ dev?: boolean;
+ editor?: string;
+ "engine-strict"?: boolean;
+ force?: boolean;
+
+ "fetch-retries"?: number;
+ "fetch-retry-factor"?: number;
+ "fetch-retry-mintimeout"?: number;
+ "fetch-retry-maxtimeout"?: number;
+
+ git?: string;
+ "git-tag-version"?: boolean;
+
+ global?: boolean;
+ globalconfig?: string;
+ group?: any; // number | string
+ heading?: string;
+ "ignore-scripts"?: boolean;
+ "init-module"?: string;
+ "init.author.name"?: string;
+ "init.author.email"?: string;
+ "init.author.url"?: string;
+ "init.version"?: string;
+ "init.license"?: string;
+ json?: boolean;
+ key?: string;
+ link?: boolean;
+ "local-address"?: string;
+ loglevel?: string;
+ logstream?: NodeJS.ReadWriteStream;
+ long?: boolean;
+ message?: string;
+ "node-version"?: string;
+ npat?: boolean;
+ "onload-script"?: boolean;
+ optional?: boolean;
+ parseable?: boolean;
+ prefix?: string;
+ production?: boolean;
+ "proprietary-attribs"?: boolean;
+ proxy?: any; // boolean | string
+ "https-proxy"?: string;
+ "user-agent"?: string;
+ "rebuild-bundle"?: boolean;
+ registry?: string;
+ rollback?: boolean;
+ save?: boolean;
+ "save-bundle"?: boolean;
+ "save-dev"?: boolean;
+ "save-exact"?: boolean;
+ "save-optional"?: boolean;
+ "save-prefix"?: string;
+ scope?: string;
+ searchopts?: string;
+ searchexclude?: string;
+ searchsort?: string;
+ shell?: string;
+ shrinkwrap?: boolean;
+ "sign-git-tag"?: boolean;
+ spin?: any; // boolean | string ("always")
+ "strict-ssl"?: boolean;
+ tag?: string;
+ tmp?: string;
+ unicode?: boolean;
+ "unsafe-perm"?: boolean;
+ usage?: boolean;
+ user?: any; // string | number
+ userconfig?: string;
+ umask?: number;
+ version?: boolean;
+ versions?: boolean;
+ viewer?: string;
+
+ _exit?: boolean;
+ }
+
+ export interface ConfigTypes {
+ "always-auth": typeof Boolean;
+ "bin-links": typeof Boolean;
+ browser: any[];
+
+ ca: any[];
+ cafile: typeof String;
+ cache: typeof String;
+
+ "cache-lock-stale": typeof Number;
+ "cache-lock-retries": typeof Number;
+ "cache-lock-wait": typeof Number;
+
+ "cache-max": typeof Number;
+ "cache-min": typeof Number;
+
+ cert: typeof String;
+
+ color: any[];
+ depth: typeof Number;
+ description: typeof Boolean;
+ dev: typeof Boolean;
+ editor: typeof String;
+ "engine-strict": typeof Boolean;
+ force: typeof Boolean;
+
+ "fetch-retries": typeof Number;
+ "fetch-retry-factor": typeof Number;
+ "fetch-retry-mintimeout": typeof Number;
+ "fetch-retry-maxtimeout": typeof Number;
+
+ git: typeof String;
+ "git-tag-version": typeof Boolean;
+
+ global: typeof Boolean;
+ globalconfig: typeof String;
+ group: any[];
+ heading: typeof String;
+ "ignore-scripts": typeof Boolean;
+ "init-module": typeof String;
+ "init.author.name": typeof String;
+ "init.author.email": typeof String;
+ "init.author.url": typeof String;
+ "init.version": typeof String;
+ "init.license": typeof String;
+ json: typeof Boolean;
+ key: any[];
+ link: typeof Boolean;
+ "local-address": typeof String;
+ loglevel: any[];
+ logstream: any; // typeof stream.Stream
+ long: typeof Boolean;
+ message: typeof String;
+ "node-version": any[];
+ npat: typeof Boolean;
+ "onload-script": any[];
+ optional: typeof Boolean;
+ parseable: typeof Boolean;
+ prefix: typeof String;
+ production: typeof Boolean;
+ "proprietary-attribs": typeof Boolean;
+ proxy: any[];
+ "https-proxy": any[];
+ "user-agent": typeof String;
+ "rebuild-bundle": Boolean;
+ registry: any[];
+ rollback: typeof Boolean;
+ save: typeof Boolean;
+ "save-bundle": typeof Boolean;
+ "save-dev": typeof Boolean;
+ "save-exact": typeof Boolean;
+ "save-optional": typeof Boolean;
+ "save-prefix": typeof String;
+ scope: typeof String;
+ searchopts: typeof String;
+ searchexclude: any[];
+ searchsort: any[];
+ shell: typeof String;
+ shrinkwrap: typeof Boolean;
+ "sign-git-tag": typeof Boolean;
+ spin: any[];
+ "strict-ssl": typeof Boolean;
+ tag: typeof String;
+ tmp: typeof String;
+ unicode: typeof Boolean;
+ "unsafe-perm": typeof Boolean;
+ usage: typeof Boolean;
+ user: any; // String | Number
+ userconfig: typeof String;
+ umask: typeof Number;
+ version: typeof Boolean;
+ versions: typeof Boolean;
+ viewer: typeof String;
+
+ _exit: typeof Boolean;
+ }
+
+ export interface ConfigShorthands {
+ s: any[];
+ d: any[];
+ dd: any[];
+ ddd: any[];
+ noreg: any[];
+ N: any[];
+ reg: any[];
+ "no-reg": any[];
+ silent: any[];
+ verbose: any[];
+ quiet: any[];
+ q: any[];
+ h: any[];
+ H: any[];
+ "?": any[];
+ help: any[];
+ v: any[];
+ f: any[];
+ gangster: any[];
+ gangsta: any[];
+ desc: any[];
+ "no-desc": any[];
+ "local": any[];
+ l: any[];
+ m: any[];
+ p: any[];
+ porcelain: any[];
+ g: any[];
+ S: any[];
+ D: any[];
+ E: any[];
+ O: any[];
+ y: any[];
+ n: any[];
+ B: any[];
+ C: any[];
+ }
+
+ export interface ConfigSource {
+ path: string;
+ type: string;
+ }
+
+ export interface Credentials {
+ scope: string;
+ token?: string;
+ password?: string;
+ username?: string;
+ email?: string;
+ auth?: string;
+ }
+
+ //#endregion
+
+ //#region Utilities Interfaces
+
+ export interface Dictionary {
+ [key: string]: T;
+ }
+
+ export interface ErrorCallback {
+ (err?: Error): void;
+ }
+
+ export interface SimpleCallback {
+ (err?: Error, result?: T): void;
+ }
+
+ //#endregion
+}
+
+declare module "npm" {
+ var npm: NPM.Static;
+ export = npm;
+}