diff --git a/Definitions/signalr-1.0.d.ts b/Definitions/signalr-1.0.d.ts
new file mode 100644
index 000000000..e076cad8d
--- /dev/null
+++ b/Definitions/signalr-1.0.d.ts
@@ -0,0 +1,104 @@
+// Type definitions for SignalR 1.0
+// Project: http://www.asp.net/signalr
+// Definitions by: Boris Yankov
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+
+///
+
+interface HubMethod {
+ (callback: (data: string) => void );
+}
+
+interface SignalREvents {
+ onStart: string;
+ onStarting: string;
+ onReceived: string;
+ onError: string;
+ onConnectionSlow: string;
+ onReconnect: string;
+ onStateChanged: string;
+ onDisconnect: string;
+}
+
+interface SignalR {
+ events: SignalREvents;
+ connectionState: any; // ???
+ transports: any;
+
+ hub: HubConnection;
+ id: string; // ???
+ logging: bool;
+ messageId: string; // ???
+ url: string;
+
+ (url: string, queryString?: any, logging?: bool): SignalR;
+ hubConnection(url?: string): SignalR;
+
+ log(msg: string, logging: bool): void;
+ isCrossDomain(url: string): bool;
+ changeState(connection: SignalR, expectedState: number, newState: number): bool;
+ isDisconnecting(connection: SignalR): bool;
+
+ createHubProxy(hubName: string): SignalR;
+
+ start(): SignalR;
+ start(callback: () => void ): SignalR;
+ start(settings: ConnectionSettings): SignalR;
+ start(settings: ConnectionSettings, callback: () => void ): SignalR;
+
+
+ send(data: string): void;
+ stop(async?: bool, notifyServer?: bool): void;
+
+ starting(handler: () => void ): SignalR;
+ received(handler: (data: any) => void ): SignalR;
+ error(handler: (error: any) => void ): SignalR;
+ stateChanged(handler: (change: any) => void ): SignalR;
+ disconnected(handler: () => void ): SignalR;
+ connectionSlow(handler: () => void ): SignalR;
+ sending(handler: () => void ): SignalR;
+ reconnected(handler: () => void ): SignalR;
+
+ done(handler: () => void ): SignalR;
+ fail(handler: () => void ): SignalR;
+}
+
+interface HubProxy {
+ (connection: HubConnection, hubName: string): HubProxy;
+ init(connection: HubConnection, hubName: string): void;
+ hasSubscriptions(): bool;
+ on(eventName: string, callback: (msg) => void ): HubProxy;
+ off(eventName: string, callback: (msg) => void ): HubProxy;
+ invoke(methodName: string, ...args: any[]): JQueryDeferred;
+}
+
+interface HubConnectionSettings {
+ queryString?: string;
+ logging?: bool;
+ useDefaultPath?: bool;
+}
+
+interface HubConnection extends SignalR {
+ //(url?: string, queryString?: any, logging?: bool): HubConnection;
+ proxies;
+ received(callback: (data: { Id; Method; Hub; State; Args; }) => void ): void;
+ createHubProxy(hubName: string): HubProxy;
+}
+
+interface SignalRfn {
+ init(url, qs, logging);
+}
+
+interface ConnectionSettings {
+ transport?;
+ callback?;
+ waitForPageLoad?: bool;
+ jsonp?: bool;
+}
+
+interface JQueryStatic {
+ signalR: SignalR;
+ connection: SignalR;
+ hubConnection(url?: string, queryString?: any, logging?: bool): HubConnection;
+}
\ No newline at end of file
diff --git a/README.md b/README.md
index ee8e66070..bd31a1274 100644
--- a/README.md
+++ b/README.md
@@ -44,6 +44,7 @@ Complete
* [QUnit](http://qunitjs.com/) (by [Diullei Gomes](https://github.com/Diullei))
* [Raphael](http://raphaeljs.com/) (by [CheCoxshall](https://github.com/CheCoxshall))
* [Sammy.js](http://sammyjs.org/) (by [Boris Yankov](https://github.com/borisyankov))
+* [SignalR](http://www.asp.net/signalr) (by [Boris Yankov](https://github.com/borisyankov))
* [SoundJS](http://www.createjs.com/#!/SoundJS) (by [Pedro Ferreira](https://bitbucket.org/drk4))
* [Spin](http://fgnass.github.com/spin.js/) (by [Boris Yankov](https://github.com/borisyankov))
* [Sugar](http://sugarjs.com/) (by [Josh Baldwin](https://github.com/jbaldwin/))
diff --git a/Tests/signalr-tests.ts b/Tests/signalr-tests.ts
new file mode 100644
index 000000000..1d909170e
--- /dev/null
+++ b/Tests/signalr-tests.ts
@@ -0,0 +1,106 @@
+///
+
+function test_client() {
+ var connection = $.connection('/echo');
+ connection.received(function (data) {
+ console.log(data);
+ });
+ connection.error(function (error) {
+ console.warn(error);
+ });
+ connection.stateChanged(function (change) {
+ if (change.newState === $.signalR.connectionState.reconnecting) {
+ console.log('Re-connecting');
+ }
+ else if (change.newState === $.signalR.connectionState.connected) {
+ console.log('The server is online');
+ }
+ });
+ connection.reconnected(function () {
+ console.log('Reconnected');
+ });
+ connection.start();
+ connection.start(function () {
+ console.log("connection started!");
+ });
+ connection.stop();
+ connection.start().done(function () {
+ console.log("connection started!");
+ });
+ connection.start({ transport: 'longPolling' });
+ connection.start({ transport: $.signalR.transports.webSockets });
+ connection.start({ transport: ['longPolling', 'webSockets'] });
+ connection.start({ waitForPageLoad: false });
+ connection.start({ transport: 'longPolling' }, function () {
+ console.log('connection started!');
+ });
+ connection.send("Hello World");
+ var connection = $.connection('http://localhost:8081/echo');
+ connection.start({ jsonp: true });
+}
+
+function test_connection() {
+ var connection = $.connection('/echo');
+ connection.received(function (data) {
+ $('#messages').append('
' + data + '');
+ });
+ connection.start();
+ $("#broadcast").click(function () {
+ connection.send($('#msg').val());
+ });
+}
+
+function test_hubs() {
+ var chat = $.connection.chat;
+ chat.client.addMessage = function (message) {
+ $('#messages').append('' + message + '');
+ };
+
+ $("#broadcast").click(function () {
+ chat.server.send($('#msg').val());
+ });
+ $.connection.hub.start()
+ .done(function () { alert("Now connected!"); })
+ .fail(function () { alert("Could not Connect!"); });
+
+ $.connection.hub.logging = true;
+ var myHub = $.connection.myHub;
+ myHub.someState = "SomeValue";
+ function connectionReady() {
+ alert("Done calling first hub serverside-function");
+ };
+ myHub.SomeClientFunction = function () {
+ alert("serverside called 'Clients.SomeClientFunction()'");
+ };
+ $.connection.hub.error(function () {
+ alert("An error occured");
+ });
+ $.connection.hub.start()
+ .done(function () {
+ myHub.SomeFunction(SomeParam)
+ .done(connectionReady);
+ })
+ .fail(function () {
+ alert("Could not Connect!");
+ });
+
+ $.connection.hub.url = 'http://localhost:8081/signalr'
+ $.connection.hub.start();
+
+ var connection = $.hubConnection();
+ var proxy = connection.createHubProxy('chat');
+ var proxy = connection.createHubProxy('chat'),
+ msg = 'hello',
+ room = 'main';
+ proxy.invoke('send', msg);
+ proxy.invoke('send', msg, room);
+ proxy.invoke('add', 1, 2)
+ .done(function (result) {
+ console.log('The result is ' + result);
+ });
+ proxy.on('addMessage', function (msg) {
+ console.log(msg);
+ });
+ var connection = $.hubConnection('http://localhost:8081/');
+ connection.start({ jsonp: true });
+}
\ No newline at end of file