diff --git a/rsmq/rsmq-tests.ts b/rsmq/rsmq-tests.ts
new file mode 100644
index 000000000..c7a89490a
--- /dev/null
+++ b/rsmq/rsmq-tests.ts
@@ -0,0 +1,24 @@
+///
+
+var RedisSMQ = require("rsmq");
+var rsmq = new RedisSMQ( {host: "127.0.0.1", port: 6379, ns: "rsmq"} );
+var rsmq2 = new RedisSMQ({client: rsmq.redis, ns: "rsmq2"});
+
+rsmq.createQueue({qname: "my-queue"}, (e: Error, success: number) => {
+ if (e) {
+ console.error(e);
+ }
+
+ console.info('"my-queue" has created');
+});
+
+rsmq.sendMessage({qname: "my-queue", message: "first message"}, (e: Error, id: string) => {
+ rsmq.changeMessageVisibility({qname: "my-queue", id: id, vt: 100}, (e: Error, success: number) => {});
+});
+rsmq.getQueueAttributes({qname: 'my-queue'}, (e: Error, attr: RedisSMQ.QueueAttributes) =>{} );
+rsmq.setQueueAttributes({qname: "my-queue", vt: 20}, (e: Error, attr: RedisSMQ.QueueAttributes) => {});
+rsmq.receiveMessage({qname: "my-queue"}, (e: Error, message: RedisSMQ.Message) => {
+ rsmq.deleteMessage(message, (e: Error, success: number) => {});
+});
+rsmq.listQueues((e: Error, list: string[]) => {});
+rsmq.deleteQueue({qname: "my-queue"}, (e: Error, res: number) => {});
\ No newline at end of file
diff --git a/rsmq/rsmq.d.ts b/rsmq/rsmq.d.ts
new file mode 100644
index 000000000..8fbbd566c
--- /dev/null
+++ b/rsmq/rsmq.d.ts
@@ -0,0 +1,91 @@
+// Type definitions for rsmq 0.3.16
+// Project: http://smrchy.github.io/rsmq/
+// Definitions by: Qubo
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+declare module RedisSMQ {
+ interface CallbackT {
+ (e?:Error, res?:R): void;
+ }
+
+ interface QueueIdentifier {
+ qname: string;
+ }
+
+ interface QueueOptions extends QueueIdentifier {
+ vt?: number;
+ delay?: number;
+ maxsize?: number;
+ }
+
+ interface MessageIdentifier extends QueueIdentifier {
+ id: string;
+ }
+
+ interface VisibilityOptions extends MessageIdentifier {
+ vt: number;
+ }
+
+ export interface QueueAttributes extends QueueIdentifier {
+ vt: number;
+ delay: number;
+ maxsize: number;
+ totalrecv: number;
+ totalsent: number;
+ created: number;
+ modified: number;
+ msgs: number;
+ hiddenmsgs: number;
+ }
+
+ interface ReceiveOptions extends QueueIdentifier {
+ vt?: number;
+ }
+
+ export interface Message extends MessageIdentifier {
+ message: string;
+ sent: number;
+ fr: number;
+ rc: number;
+ }
+
+ interface NewMessage extends QueueIdentifier {
+ message: string;
+ delay?: number;
+ }
+}
+
+declare module 'rsmq' {
+ import redis = require('redis');
+
+ interface RedisSMQStatic {
+ new (options:ClientOptions): Client;
+ }
+
+ interface Client {
+ createQueue(options:RedisSMQ.QueueOptions, cb:RedisSMQ.CallbackT): void;
+ changeMessageVisibility(options:RedisSMQ.VisibilityOptions, cb:RedisSMQ.CallbackT): void;
+ deleteMessage(options:RedisSMQ.MessageIdentifier, cb:RedisSMQ.CallbackT): void;
+ deleteQueue(options:RedisSMQ.QueueIdentifier, cb:RedisSMQ.CallbackT): void;
+ getQueueAttributes(options:RedisSMQ.QueueIdentifier, cb:RedisSMQ.CallbackT): void;
+ listQueues(cb:RedisSMQ.CallbackT): void;
+ receiveMessage(options:RedisSMQ.ReceiveOptions, cb:RedisSMQ.CallbackT): void;
+ sendMessage(options:RedisSMQ.NewMessage, cb:RedisSMQ.CallbackT): void;
+ setQueueAttributes(options:RedisSMQ.QueueOptions, cb:RedisSMQ.CallbackT): void;
+ quit(): void;
+ redis: redis.RedisClient;
+ }
+
+ interface ClientOptions {
+ host?: string;
+ port?: number;
+ options?: redis.ClientOpts;
+ client?: redis.RedisClient;
+ ns?: string;
+ }
+
+ var rsmq: RedisSMQStatic;
+ export = rsmq;
+}