diff --git a/browserify/.gitignore b/browserify/.gitignore
new file mode 100644
index 0000000..4c43fe6
--- /dev/null
+++ b/browserify/.gitignore
@@ -0,0 +1 @@
+*.js
\ No newline at end of file
diff --git a/browserify/README.md b/browserify/README.md
new file mode 100644
index 0000000..092fe7d
--- /dev/null
+++ b/browserify/README.md
@@ -0,0 +1,45 @@
+**Install Browserify**
+```
+npm install -g browserify
+```
+
+**Fetch dependencies**
+```
+npm install
+```
+
+**Compile .ts files**
+```
+node node_modules/typescript/bin/tsc.js
+```
+shortcut for this command
+```
+npm run tsc
+```
+
+**Run Browserify**
+```
+browserify src/app.js -o bundle.js -s app
+```
+shortcut for this command
+```
+npm run browserify
+
+```
+
+**Start http-server**
+```
+node node_modules/http-server/bin/http-server -o
+```
+shortcut for this command
+```
+npm run listen
+```
+
+By default http-server listens on port 8080. If this port is taken use '-p' to specify free port.
+
+
+**Shortcut for running all steps in a batch**
+```
+npm run all
+```
\ No newline at end of file
diff --git a/browserify/app.css b/browserify/app.css
new file mode 100644
index 0000000..eb24fc6
--- /dev/null
+++ b/browserify/app.css
@@ -0,0 +1,8 @@
+body
+{
+ font-family: 'Segoe UI', sans-serif
+}
+
+span {
+ font-style: italic
+}
\ No newline at end of file
diff --git a/browserify/index.html b/browserify/index.html
new file mode 100644
index 0000000..bacd21a
--- /dev/null
+++ b/browserify/index.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+ TypeScript HTML App
+
+
+
+
+
Browserify/TypeScript sample
+
+
+
+
+
+
\ No newline at end of file
diff --git a/browserify/package.json b/browserify/package.json
new file mode 100644
index 0000000..fc11a8e
--- /dev/null
+++ b/browserify/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "typescript-browserify",
+ "version": "1.0.0",
+ "description": "Browserify/TypeScript demo",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/Microsoft/TypeScriptSamples.git"
+ },
+ "dependencies": {
+ "http-server": "0.8.0"
+ },
+ "devDependencies": {
+ "typescript": "^1.5.3"
+ },
+ "scripts": {
+ "tsc": "node node_modules/typescript/bin/tsc.js",
+ "browserify": "browserify src/app.js -o bundle.js -s app",
+ "listen": "node node_modules/http-server/bin/http-server",
+ "all": "npm run tsc && npm run browserify && npm run listen"
+ }
+}
\ No newline at end of file
diff --git a/browserify/src/app.ts b/browserify/src/app.ts
new file mode 100644
index 0000000..76779fb
--- /dev/null
+++ b/browserify/src/app.ts
@@ -0,0 +1,8 @@
+import { TimeReporter, Printer } from './timeReporter'
+import { EOL } from 'os';
+
+
+export function start(printer: Printer) {
+ let timeReporter = new TimeReporter(printer);
+ timeReporter.start();
+}
\ No newline at end of file
diff --git a/browserify/src/node.d.ts b/browserify/src/node.d.ts
new file mode 100644
index 0000000..eee9af5
--- /dev/null
+++ b/browserify/src/node.d.ts
@@ -0,0 +1,7 @@
+declare module "os" {
+ export var EOL: string;
+}
+
+declare module "util" {
+ export function format(format: string, ...args: any[]): string;
+}
diff --git a/browserify/src/timeReporter.ts b/browserify/src/timeReporter.ts
new file mode 100644
index 0000000..afe930f
--- /dev/null
+++ b/browserify/src/timeReporter.ts
@@ -0,0 +1,27 @@
+import {format} from "util";
+
+export type Printer = (s: string) => void;
+
+export class TimeReporter
+{
+ timerToken: number;
+
+ constructor (private printer: Printer)
+ {
+ this.reportDate();
+ }
+
+ start()
+ {
+ this.timerToken = setInterval(() => this.reportDate(), 500);
+ }
+
+ stop()
+ {
+ clearTimeout(this.timerToken);
+ }
+
+ reportDate() {
+ this.printer(format("Date is %s", new Date().toUTCString()));
+ }
+}
diff --git a/browserify/tsconfig.json b/browserify/tsconfig.json
new file mode 100644
index 0000000..2a07991
--- /dev/null
+++ b/browserify/tsconfig.json
@@ -0,0 +1,11 @@
+{
+ "compilerOptions": {
+ "module": "CommonJS",
+ "target": "es5"
+ },
+ "files": [
+ "src/node.d.ts",
+ "src/timeReporter.ts",
+ "src/app.ts"
+ ]
+}
\ No newline at end of file