diff --git a/vortex-web-client/vortex-web-client-tests.ts b/vortex-web-client/vortex-web-client-tests.ts
new file mode 100644
index 000000000..216e268c5
--- /dev/null
+++ b/vortex-web-client/vortex-web-client-tests.ts
@@ -0,0 +1,23 @@
+///
+
+var runtime = new dds.runtime.Runtime();
+runtime.connect("ws://localhost:9000", "user:pass");
+
+var tqos = new dds.TopicQos();
+var chatTopic = new dds.Topic(0, 'ChatMessage', tqos);
+runtime.registerTopic(chatTopic);
+
+var writerQos = new dds.DataWriterQos();
+var writer = new dds.DataWriter(runtime, chatTopic, writerQos);
+
+writer.write({
+ user: "John Smith",
+ msg : "Hello World!"
+});
+
+var readerQos = new dds.DataReaderQos();
+var reader = new dds.DataReader(runtime, chatTopic, readerQos);
+
+reader.addListener(function(msg) {
+ console.log(JSON.stringify(msg));
+});
diff --git a/vortex-web-client/vortex-web-client.d.ts b/vortex-web-client/vortex-web-client.d.ts
new file mode 100644
index 000000000..de665c780
--- /dev/null
+++ b/vortex-web-client/vortex-web-client.d.ts
@@ -0,0 +1,488 @@
+// Type definitions for Vortex Web 1.2.0p1
+// Project: http://www.prismtech.com/vortex/vortex-web
+// Definitions by: Stefan Profanter
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+/*
+ Vortex Web
+
+ This software and documentation are Copyright 2010 to 2015 PrismTech
+ Limited and its licensees. All rights reserved. See file:
+
+ docs/LICENSE.html
+
+ for full copyright notice and license terms.
+ */
+
+declare module DDS {
+
+
+ /**
+ * Base class for all policies
+ */
+ interface Policy {
+
+ }
+
+ /**
+ * History policy
+ */
+ export enum HistoryKind {
+ KeepAll = 0,
+ KeepLast = 1
+ }
+
+ /**
+ * History policy
+ */
+ export class History implements Policy {
+ /**
+ * KeepAll - KEEP_ALL qos policy
+ */
+ KeepAll:any;
+ /**
+ * KeepLast - KEEP_LAST qos policy
+ */
+ KeepLast:any;
+ }
+
+ /**
+ * Reliability Policy
+ * @example var qos = Reliability.Reliable
+ */
+ export enum ReliabilityKind {
+ Reliable = 0,
+ BestEffort = 1
+ }
+
+ /**
+ * History policy
+ */
+ export class Reliability implements Policy {
+ /**
+ * Reliable - 'Reliable' reliability policy
+ */
+ Reliable:any;
+ /**
+ * BestEffort - 'BestEffort' reliability policy
+ */
+ BestEffort:any;
+ }
+
+ /**
+ * Partition policy
+ */
+ export class Partition implements Policy {
+ /**
+ * Create new partition policy
+ *
+ * @param policies - partition names
+ * @example var qos = Partition('p1', 'p2')
+ */
+ constructor(...policies:string[]);
+ }
+
+ /**
+ * Content Filter policy
+ */
+ export class ContentFilter implements Policy {
+ /**
+ * Create new content filter policy
+ *
+ * @param expr - filter expression
+ * @example var filter = ContentFilter("x>10 AND y<50")
+ */
+ constructor(expr:string);
+ }
+
+ /**
+ * Time Filter policy
+ */
+ export class TimeFilter implements Policy {
+ /**
+ * Create new content filter policy
+ *
+ * @param period - time duration (unit ?)
+ * @example var filter = TimeFilter(100)
+ */
+ constructor(period:number);
+ }
+
+ /**
+ * Durability Policy
+ */
+ export enum DurabilityKind {
+ Volatile = 0,
+ TransientLocal = 1,
+ Transient = 2,
+ Persistent = 3
+ }
+
+ /**
+ * Durability Qos Policy
+ */
+ export class Durability implements Policy {
+ /**
+ * Volatile - Volatile durability policy
+ */
+ Volatile:any;
+ /**
+ * TransientLocal - TransientLocal durability policy
+ */
+ TransientLocal:any;
+ /**
+ * Transient - Transient durability policy
+ */
+ Transient:any;
+ /**
+ * Persistent - Persistent durability policy
+ */
+ Persistent:any;
+ }
+
+
+ interface EntityQos {
+ /**
+ * Creates any of the DDS entities quality of service, including DataReaderQos and DataWriterQos.
+ *
+ * @param policies - list of policies for the Qos entity
+ */
+ new (...policies:Policy[]): EntityQos;
+
+ /**
+ * Adds the given policy to this instance.
+ * @param policy - the policy to add
+ * @return A new copy of this instance with the combined policies
+ */
+ add (policy:Policy): EntityQos;
+ }
+
+
+ /**
+ * Topic quality of service object
+ */
+ export var TopicQos:EntityQos;
+ /**
+ * DataReader quality of service object
+ */
+ export var DataReaderQos:EntityQos;
+
+ /**
+ * DataWriter quality of service object
+ */
+ export var DataWriterQos:EntityQos;
+
+ export class Topic {
+ /**
+ * Creates a `Topic` in the domain `did`, named `tname`, having `qos` Qos,
+ * for the type `ttype` whose registered name is `tregtype`
+ * @param {number} did - DDS domain ID
+ * @param {string} tname - topic name
+ * @param {TopicQos} qos - topic Qos
+ * @param {string} ttype - topic type. If not specified, a generic type is used.
+ * @param {string} tregtype - topic registered type name. If not specified, 'ttype' is used.
+ */
+ constructor(did:number, tname:string, qos:EntityQos, ttype?:string, tregtype?:string);
+
+ /**
+ * Called when topic gets registered in the runtime
+ */
+ onregistered():void;
+
+ /**
+ * Called when topic gets unregistered in the runtime
+ */
+ onunregistered():void;
+ }
+
+ export class DataReader {
+ /**
+ * Creates a `DataReader` for a given topic and a specific in a specific DDS runtime.
+ *
+ * A `DataReader` allows to read data for a given topic with a specific QoS. A `DataReader`
+ * * goes through different states, it is intially disconnected and changes to the connected state
+ * when the underlying transport connection is successfully established with the server. At this point
+ * a `DataReader` can be explicitely closed or disconnected. A disconnection can happen as the result
+ * of a network failure or server failure. Disconnection and reconnections are managed by the runtime.
+ *
+ * @param runtime - DDS Runtime
+ * @param topic - DDS Topic
+ * @param qos - DataReader quality of service
+ */
+ constructor(runtime:Runtime, topic:Topic, qos:EntityQos);
+
+ resetStats():void;
+
+ /**
+ * Attaches the listener `l` to this data reader and returns
+ * the id associated to the listener.
+ * @param l - listener code
+ * @returns listener handle
+ */
+ addListener(l:(msg:any) => void):number;
+
+ /**
+ * removes a listener from this data reader.
+ * @param idx - listener id
+ */
+ removeListener(idx:number):void;
+
+ /**
+ * closes the DataReader
+ */
+ close():void;
+ }
+
+ export class DataWriter {
+ /**
+ * Creates a `DataWriter` for a given topic and a specific in a specific DDS runtime
+ *
+ * defines a DDS data writer. This type
+ * is used to write data for a specific topic with a given QoS.
+ * A `DataWriter` goes through different states, it is intially disconnected and changes to the connected
+ * state when the underlying transport connection is successfully established with the server.
+ * At this point a `DataWriter` can be explicitely closed or disconnected. A disconnection can happen
+ * as the result of a network failure or server failure. Disconnection and reconnections are managed by the
+ * runtime.
+ *
+ * @param runtime - DDS Runtime
+ * @param topic - DDS Topic
+ * @param qos - DataWriter quality of service
+ */
+ constructor(runtime:Runtime, topic:Topic, qos:EntityQos);
+
+ /**
+ * Writes one or more samples.
+ * @param ds - data sample
+ */
+ write(...ds:any[]):void;
+
+ /**
+ * Closes the DataWriter
+ */
+ close():void;
+ }
+
+
+ export class DataCache {
+ /**
+ * Constructs a `DataCache` with a given `depth`. If the `cache` parameter
+ * is present, then the current cache is initialized with this parameter.
+ *
+ * Provides a way of storing and flexibly accessing the
+ * data received through a `DataReader`. A `DataCache` is organized as
+ * a map of queues. The depth of the queues is specified at construction
+ * time.
+ *
+ * @param depth - cache size
+ * @param cache - cache data structure
+ */
+ constructor(depth:number, cache:any);
+
+ /**
+ * Register a listener to be notified whenever data which matches a predicate is written into the cache.
+ * If no predicate is provided then the listeners is always notified upon data inserion.
+ *
+ * @param l - listener function
+ * @param p - predicate
+ */
+ addListener(l:(data:any) => void, p?:(data:any) => boolean):void;
+
+ /**
+ * Write the element `data` with key `k` into the cache.
+ *
+ * @param k - data key
+ * @param data - data value
+ * @returns the written data value
+ */
+ write(k:any, data:any):any;
+
+ /**
+ * Same as forEach but applied, for each key, only to the first `n` samples of the cache
+ *
+ * @param f - the function to be applied
+ * @param n - samples set size
+ */
+ forEachN(f:(data:any) => any, n:number):any[];
+
+ /**
+ * Execute the function `f` for each element of the cache.
+ *
+ * @memberof! dds.DataCache#
+ * @param f - the function to be applied
+ * @returns results of the function execution
+ */
+ forEach(f:(data:any) => any):any[];
+
+ /**
+ * Returns a cache that is the result of applying `f` to each element of the cache.
+ *
+ * @param f - the function to be applied
+ * @returns A cache holding the results of the function execution
+ */
+ map(f:(data:any) => any):DataCache;
+
+ /**
+ * Returns the list of elements in the cache that satisfy the predicate `f`.
+ *
+ * @param f - the predicate to be applied to filter the cache values
+ * @returns An array holding the filtered values
+ */
+ filter(f:(data:any) => boolean):any[];
+
+ /**
+ * Returns the list of elements in the cache that doesn't satisfy the predicate `f`.
+ *
+ * @returns An array holding the filtered values
+ * @see DataCache#filter
+ */
+ filterNot(f:(data:any) => boolean):any[];
+
+ /**
+ * Returns the values included in the cache as an array.
+ *
+ * @return All the cache values
+ */
+ read():any[];
+
+ /**
+ * Returns the last value of the cache in an array.
+ *
+ * @return the last value of the cache
+ */
+ readLast():any;
+
+ /**
+ * Returns all the values included in the cache as an array and empties the cache.
+ *
+ * @return All the cache values
+ */
+ takeAll():any[];
+
+ /**
+ * Returns the `K`ith value of the cache as Monad, ie: `coffez.Some` if it exists, `coffez.None` if not.
+ *
+ * @return the 'k'th value
+ */
+ take():any;
+
+ /**
+ * Takes elements from the cache up to when the predicate `f` is satisfied
+ *
+ * @param f - the predicate
+ * @return taken cache values
+ */
+ takeWithFilter(f:(data:any) => boolean):any[];
+
+ /**
+ * Return `coffez.Some(v)` if there is an element in the cache corresponding to the
+ * key `k` otherwise it returns `coffez.None`.
+ *
+ * @param k - key
+ */
+ get(k:any):any;
+
+ /**
+ * Return `coffez.Some(v)` if there is an element in the cache corresponding to the
+ * key `k` otherwise executes `f` and returns its result.
+ *
+ * @param k - key
+ * @param f - the function to apply
+ */
+ getOrElse(k:any, f:(data:any)=> any):any;
+
+ /**
+ * folds the element of the cache using `z` as the `zero` element and
+ * `f` as the binary operator.
+ *
+ * @param z - initial value
+ * @param {function} f - reduce function
+ */
+ fold(z:any, f:(data:any) => any):void;
+
+ /**
+ * clears the data cache
+ */
+ clear():void;
+
+ }
+
+ interface Runtime {
+ /**
+ * Constructs a DDS Runtime object
+ *
+ * maintains the connection with the server, re-establish the connection
+ * if dropped and mediates the `DataReader` and `DataWriter` communication.
+ */
+ new (): Runtime;
+
+ /**
+ * Connect the runtime to the server. If the runtime is already connected an exception is thrown
+ *
+ * @param srv - Vortex Web server WebSocket URL
+ * @param authToken - Authorization token
+ */
+ connect(server:string, authToken?:string): void;
+
+ /**
+ * Disconnects, withouth closing, a `Runtime`. Notice that upon re-connection all existing
+ * subscriptions and publications will be re-restablished.
+ */
+ disconnect(): void;
+
+ /**
+ * Registers the provided Topic.
+ *
+ * @param t - Topic to be registered
+ */
+ registerTopic(t:Topic): void;
+
+ /**
+ * Function called when runtime is connected.
+ *
+ * @param e
+ */
+ onconnect(e:any): void;
+
+
+ /**
+ * Function called when runtime is disconnected.
+ *
+ * @param e
+ */
+ ondisconnect(e:any): void;
+
+ /**
+ * Closes the DDS runtime and as a consequence all the `DataReaders` and `DataWriters` that belong to this runtime.
+ *
+ */
+ close(): void;
+
+ /**
+ * Checks whether the Runtime is connected.
+ * @return `true` if connected, `false` if not
+ */
+ isConnected() : boolean;
+
+ /**
+ * Checks whether the Runtime is closed.
+ * @return `true` if connected, `false` if not
+ */
+ isClosed() : boolean;
+ }
+
+ export var runtime:{
+ Runtime : Runtime;
+ }
+
+ export var VERSION:string;
+}
+
+/**
+ * Defines the core Vortex-Web-Client javascript library. It includes the JavaScript API for DDS. This API allows
+ * web applications to share data among them as well as with native DDS applications.
+ */
+declare
+var dds:typeof DDS;
+
+