diff --git a/README.md b/README.md
index 9bd82091d7..aa6a5f7b33 100755
--- a/README.md
+++ b/README.md
@@ -268,6 +268,7 @@ List of Definitions
* [Underscore.js (Typed)](http://underscorejs.org/) (by [Josh Baldwin](https://github.com/jbaldwin/))
* [Underscore-ko.js](https://github.com/kamranayub/UnderscoreKO) (by [Maurits Elbers](https://github.com/MagicMau))
* [universal-analytics](https://github.com/peaksandpies/universal-analytics) (by [Bart van der Schoor](https://github.com/Bartvds))
+* [urlrouter](https://github.com/fengmk2/urlrouter) (by [Carlos Ballesteros Velasco](https://github.com/soywiz))
* [UUID.js](https://github.com/LiosK/UUID.js) (by [Jason Jarrett](https://github.com/staxmanade))
* [Valerie](https://github.com/davewatts/valerie) (by [Howard Richards](https://github.com/conficient))
* [Viewporter](https://github.com/zynga/viewporter) (by [Boris Yankov](https://github.com/borisyankov))
diff --git a/urlrouter/urlrouter-tests.ts b/urlrouter/urlrouter-tests.ts
new file mode 100644
index 0000000000..c1411c3a35
--- /dev/null
+++ b/urlrouter/urlrouter-tests.ts
@@ -0,0 +1,19 @@
+///
+
+import http = require("http");
+import urlrouter = require("urlrouter");
+
+var result = urlrouter((app) => {
+ app.get('/', (req, res, next) => {
+ res.end('hello urlrouter');
+ });
+ app.get('/user/:id([0-9]+)', (req, res, next) => {
+ res.end('hello user ' + req.params.id);
+ });
+});
+
+var req: urlrouter.ServerRequest;
+var res: urlrouter.ServerResponse;
+function next() { }
+
+result(req, res, next);
\ No newline at end of file
diff --git a/urlrouter/urlrouter.d.ts b/urlrouter/urlrouter.d.ts
new file mode 100644
index 0000000000..9254843086
--- /dev/null
+++ b/urlrouter/urlrouter.d.ts
@@ -0,0 +1,69 @@
+// Type definitions for urlrouter
+// Project: https://github.com/fengmk2/urlrouter
+// Definitions by: soywiz
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+declare module "_UrlRouterInternal" {
+ import http = require("http");
+
+ export interface ServerRequest extends http.ServerRequest {
+ params: any;
+ }
+
+ export interface ServerResponse extends http.ServerResponse {
+
+ }
+
+ export interface App {
+ // https://github.com/visionmedia/node-methods/blob/master/index.js
+ get(urlpattern: string, handler: HttpHandler): void;
+ post(urlpattern: string, handler: HttpHandler): void;
+ put(urlpattern: string, handler: HttpHandler): void;
+ head(urlpattern: string, handler: HttpHandler): void;
+ delete(urlpattern: string, handler: HttpHandler): void;
+ options(urlpattern: string, handler: HttpHandler): void;
+ trace(urlpattern: string, handler: HttpHandler): void;
+ copy(urlpattern: string, handler: HttpHandler): void;
+ lock(urlpattern: string, handler: HttpHandler): void;
+ mkcol(urlpattern: string, handler: HttpHandler): void;
+ move(urlpattern: string, handler: HttpHandler): void;
+ propfind(urlpattern: string, handler: HttpHandler): void;
+ proppatch(urlpattern: string, handler: HttpHandler): void;
+ unlock(urlpattern: string, handler: HttpHandler): void;
+ report(urlpattern: string, handler: HttpHandler): void;
+ mkactivity(urlpattern: string, handler: HttpHandler): void;
+ checkout(urlpattern: string, handler: HttpHandler): void;
+ merge(urlpattern: string, handler: HttpHandler): void;
+ "m-search"(urlpattern: string, handler: HttpHandler): void;
+ notify(urlpattern: string, handler: HttpHandler): void;
+ subscribe(urlpattern: string, handler: HttpHandler): void;
+ unsubscribe(urlpattern: string, handler: HttpHandler): void;
+ patch(urlpattern: string, handler: HttpHandler): void;
+ search(urlpattern: string, handler: HttpHandler): void;
+
+ all(urlpattern: string, handler: HttpHandler): void;
+ redirect(urlpattern: string, to: string): void;
+ }
+
+ export interface Options {
+ paramsName?: string;
+ pageNotFound?: (req: ServerRequest, res: ServerResponse) => void;
+ errorHandler?: (err:Error, req: ServerRequest, res: ServerResponse) => void;
+ }
+
+ export function _UrlRouterfunc(handler: (app: App) => void, options?: any): void;
+
+ export interface HttpHandler {
+ (req: ServerRequest, res: ServerResponse, next?: () => void): void;
+ }
+
+}
+
+declare module "urlrouter" {
+ import _UrlRouterInternal = require("_UrlRouterInternal");
+
+ function _UrlRouterInternal(handler: (app: _UrlRouterInternal.App) => void): _UrlRouterInternal.HttpHandler;
+ export = _UrlRouterInternal;
+}
\ No newline at end of file