diff --git a/grpc/examples/ts/greeter/README.md b/grpc/examples/ts/greeter/README.md
new file mode 100644
index 0000000..5c7b380
--- /dev/null
+++ b/grpc/examples/ts/greeter/README.md
@@ -0,0 +1,13 @@
+# TS Greeter example
+
+The following is an example on how to run the TS grpc server. Make sure that you have `Typescript` installed
+
+you would need to run `npm run build` or simply use `npm install && tsc`
+
+## How to run Server:
+
+- `npm run server`
+
+## How to run Client:
+
+- `npm run client 3000`
\ No newline at end of file
diff --git a/grpc/examples/ts/greeter/package.json b/grpc/examples/ts/greeter/package.json
new file mode 100644
index 0000000..324bd38
--- /dev/null
+++ b/grpc/examples/ts/greeter/package.json
@@ -0,0 +1,14 @@
+{
+  "name": "flatbuffers-js-grpc",
+  "version": "1.0.0",
+  "author": "mustii@mmk.one",
+  "scripts": {
+    "build": "npm install && tsc",
+    "client": "node dist/client.js",
+    "server": "node dist/server.js"
+  },
+  "dependencies": {
+    "@grpc/grpc-js": "^1.3.2",
+    "flatbuffers": "^2.0.0"
+  }
+}
diff --git a/grpc/examples/ts/greeter/src/client.ts b/grpc/examples/ts/greeter/src/client.ts
new file mode 100644
index 0000000..62444f1
--- /dev/null
+++ b/grpc/examples/ts/greeter/src/client.ts
@@ -0,0 +1,34 @@
+import * as grpc from '@grpc/grpc-js';
+import * as flatbuffers from 'flatbuffers';
+import { HelloReply } from './models/hello-reply';
+import { HelloRequest } from './models/hello-request';
+import { GreeterClient } from './greeter_grpc';
+
+async function main(PORT: Number, name: string) {
+    const client = new GreeterClient(`localhost:${PORT}`, grpc.credentials.createInsecure());
+    const builder = new flatbuffers.Builder();
+    const offset = builder.createString(name);
+    const root = HelloRequest.createHelloRequest(builder, offset);
+    builder.finish(root);
+    const buffer = HelloRequest.getRootAsHelloRequest(new flatbuffers.ByteBuffer(builder.asUint8Array()));
+
+    client.SayHello(buffer, (err, response) => {
+        console.log(response.message());
+    });
+
+    const data = client.SayManyHellos(buffer, null);
+
+    data.on('data', (data) => {
+        console.log(data.message());
+    });
+}
+
+const args = process.argv.slice(2)
+const PORT = Number(args[0]);
+const name: string = args[1] ?? "flatbuffers";
+
+if (PORT) {
+    main(PORT, name);
+} else {
+    throw new Error("Requires a valid port number.")
+}
\ No newline at end of file
diff --git a/grpc/examples/ts/greeter/src/greeter.ts b/grpc/examples/ts/greeter/src/greeter.ts
new file mode 100644
index 0000000..5e62d99
--- /dev/null
+++ b/grpc/examples/ts/greeter/src/greeter.ts
@@ -0,0 +1,2 @@
+export { HelloReply } from './models/hello-reply';
+export { HelloRequest } from './models/hello-request';
diff --git a/grpc/examples/ts/greeter/src/greeter_grpc.d.ts b/grpc/examples/ts/greeter/src/greeter_grpc.d.ts
new file mode 100644
index 0000000..657df5b
--- /dev/null
+++ b/grpc/examples/ts/greeter/src/greeter_grpc.d.ts
@@ -0,0 +1,56 @@
+// Generated GRPC code for FlatBuffers TS *** DO NOT EDIT ***
+import * as flatbuffers from 'flatbuffers';
+import { HelloReply as models_HelloReply } from './models/hello-reply';
+import { HelloRequest as models_HelloRequest } from './models/hello-request';
+
+import * as grpc from '@grpc/grpc-js';
+
+interface IGreeterService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
+  SayHello: IGreeterService_ISayHello;
+  SayManyHellos: IGreeterService_ISayManyHellos;
+}
+interface IGreeterService_ISayHello extends grpc.MethodDefinition<models_HelloRequest, models_HelloReply> {
+  path: string; // /models.Greeter/SayHello
+  requestStream: boolean; // false
+  responseStream: boolean; // false
+  requestSerialize: grpc.serialize<models_HelloRequest>;
+  requestDeserialize: grpc.deserialize<models_HelloRequest>;
+  responseSerialize: grpc.serialize<models_HelloReply>;
+  responseDeserialize: grpc.deserialize<models_HelloReply>;
+}
+
+interface IGreeterService_ISayManyHellos extends grpc.MethodDefinition<models_HelloRequest, models_HelloReply> {
+  path: string; // /models.Greeter/SayManyHellos
+  requestStream: boolean; // false
+  responseStream: boolean; // true
+  requestSerialize: grpc.serialize<models_HelloRequest>;
+  requestDeserialize: grpc.deserialize<models_HelloRequest>;
+  responseSerialize: grpc.serialize<models_HelloReply>;
+  responseDeserialize: grpc.deserialize<models_HelloReply>;
+}
+
+
+export const GreeterService: IGreeterService;
+
+export interface IGreeterServer extends grpc.UntypedServiceImplementation {
+  SayHello: grpc.handleUnaryCall<models_HelloRequest, models_HelloReply>;
+  SayManyHellos: grpc.handleServerStreamingCall<models_HelloRequest, models_HelloReply>;
+}
+
+export interface IGreeterClient {
+  SayHello(request: models_HelloRequest, callback: (error: grpc.ServiceError | null, response: models_HelloReply) => void): grpc.ClientUnaryCall;
+  SayHello(request: models_HelloRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: models_HelloReply) => void): grpc.ClientUnaryCall;
+  SayHello(request: models_HelloRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: models_HelloReply) => void): grpc.ClientUnaryCall;
+  SayManyHellos(request: models_HelloRequest, metadata: grpc.Metadata): grpc.ClientReadableStream<models_HelloReply>;
+  SayManyHellos(request: models_HelloRequest, options: Partial<grpc.CallOptions>): grpc.ClientReadableStream<models_HelloReply>;
+}
+
+export class GreeterClient extends grpc.Client implements IGreeterClient {
+  constructor(address: string, credentials: grpc.ChannelCredentials, options?: object);
+  public SayHello(request: models_HelloRequest, callback: (error: grpc.ServiceError | null, response: models_HelloReply) => void): grpc.ClientUnaryCall;
+  public SayHello(request: models_HelloRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: models_HelloReply) => void): grpc.ClientUnaryCall;
+  public SayHello(request: models_HelloRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: models_HelloReply) => void): grpc.ClientUnaryCall;
+  public SayManyHellos(request: models_HelloRequest, metadata: grpc.Metadata): grpc.ClientReadableStream<models_HelloReply>;
+  public SayManyHellos(request: models_HelloRequest, options: Partial<grpc.CallOptions>): grpc.ClientReadableStream<models_HelloReply>;
+}
+
diff --git a/grpc/examples/ts/greeter/src/greeter_grpc.js b/grpc/examples/ts/greeter/src/greeter_grpc.js
new file mode 100644
index 0000000..242e686
--- /dev/null
+++ b/grpc/examples/ts/greeter/src/greeter_grpc.js
@@ -0,0 +1,56 @@
+// Generated GRPC code for FlatBuffers TS *** DO NOT EDIT ***
+import * as flatbuffers from 'flatbuffers';
+import { HelloReply as models_HelloReply } from './models/hello-reply';
+import { HelloRequest as models_HelloRequest } from './models/hello-request';
+
+var grpc = require('@grpc/grpc-js');
+
+function serialize_models_HelloReply(buffer_args) {
+  if (!(buffer_args instanceof models_HelloReply)) {
+    throw new Error('Expected argument of type HelloReply');
+  }
+  return Buffer.from(buffer_args.serialize());
+}
+
+function deserialize_models_HelloReply(buffer) {
+  return models_HelloReply.getRootAsHelloReply(new flatbuffers.ByteBuffer(buffer))
+}
+
+
+function serialize_models_HelloRequest(buffer_args) {
+  if (!(buffer_args instanceof models_HelloRequest)) {
+    throw new Error('Expected argument of type HelloRequest');
+  }
+  return Buffer.from(buffer_args.serialize());
+}
+
+function deserialize_models_HelloRequest(buffer) {
+  return models_HelloRequest.getRootAsHelloRequest(new flatbuffers.ByteBuffer(buffer))
+}
+
+
+var GreeterService = exports.GreeterService = {
+  SayHello: {
+    path: '/models.Greeter/SayHello',
+    requestStream: false,
+    responseStream: false,
+    requestType: flatbuffers.ByteBuffer,
+    responseType: models_HelloReply,
+    requestSerialize: serialize_models_HelloRequest,
+    requestDeserialize: deserialize_models_HelloRequest,
+    responseSerialize: serialize_models_HelloReply,
+    responseDeserialize: deserialize_models_HelloReply,
+  },
+  SayManyHellos: {
+    path: '/models.Greeter/SayManyHellos',
+    requestStream: false,
+    responseStream: true,
+    requestType: flatbuffers.ByteBuffer,
+    responseType: models_HelloReply,
+    requestSerialize: serialize_models_HelloRequest,
+    requestDeserialize: deserialize_models_HelloRequest,
+    responseSerialize: serialize_models_HelloReply,
+    responseDeserialize: deserialize_models_HelloReply,
+  },
+};
+exports.GreeterClient = grpc.makeGenericClientConstructor(GreeterService);
diff --git a/grpc/examples/ts/greeter/src/models/hello-reply.ts b/grpc/examples/ts/greeter/src/models/hello-reply.ts
new file mode 100644
index 0000000..e68f7a4
--- /dev/null
+++ b/grpc/examples/ts/greeter/src/models/hello-reply.ts
@@ -0,0 +1,58 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+import * as flatbuffers from 'flatbuffers';
+
+
+
+export class HelloReply {
+  bb: flatbuffers.ByteBuffer|null = null;
+  bb_pos = 0;
+__init(i:number, bb:flatbuffers.ByteBuffer):HelloReply {
+  this.bb_pos = i;
+  this.bb = bb;
+  return this;
+}
+
+static getRootAsHelloReply(bb:flatbuffers.ByteBuffer, obj?:HelloReply):HelloReply {
+  return (obj || new HelloReply()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
+}
+
+static getSizePrefixedRootAsHelloReply(bb:flatbuffers.ByteBuffer, obj?:HelloReply):HelloReply {
+  bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);
+  return (obj || new HelloReply()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
+}
+
+message():string|null
+message(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null
+message(optionalEncoding?:any):string|Uint8Array|null {
+  const offset = this.bb!.__offset(this.bb_pos, 4);
+  return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;
+}
+
+static startHelloReply(builder:flatbuffers.Builder) {
+  builder.startObject(1);
+}
+
+static addMessage(builder:flatbuffers.Builder, messageOffset:flatbuffers.Offset) {
+  builder.addFieldOffset(0, messageOffset, 0);
+}
+
+static endHelloReply(builder:flatbuffers.Builder):flatbuffers.Offset {
+  const offset = builder.endObject();
+  return offset;
+}
+
+static createHelloReply(builder:flatbuffers.Builder, messageOffset:flatbuffers.Offset):flatbuffers.Offset {
+  HelloReply.startHelloReply(builder);
+  HelloReply.addMessage(builder, messageOffset);
+  return HelloReply.endHelloReply(builder);
+}
+
+serialize():Uint8Array {
+  return this.bb!.bytes();
+}
+
+static deserialize(buffer: Uint8Array):HelloReply {
+  return HelloReply.getRootAsHelloReply(new flatbuffers.ByteBuffer(buffer))
+}
+}
diff --git a/grpc/examples/ts/greeter/src/models/hello-request.ts b/grpc/examples/ts/greeter/src/models/hello-request.ts
new file mode 100644
index 0000000..3718167
--- /dev/null
+++ b/grpc/examples/ts/greeter/src/models/hello-request.ts
@@ -0,0 +1,58 @@
+// automatically generated by the FlatBuffers compiler, do not modify
+
+import * as flatbuffers from 'flatbuffers';
+
+
+
+export class HelloRequest {
+  bb: flatbuffers.ByteBuffer|null = null;
+  bb_pos = 0;
+__init(i:number, bb:flatbuffers.ByteBuffer):HelloRequest {
+  this.bb_pos = i;
+  this.bb = bb;
+  return this;
+}
+
+static getRootAsHelloRequest(bb:flatbuffers.ByteBuffer, obj?:HelloRequest):HelloRequest {
+  return (obj || new HelloRequest()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
+}
+
+static getSizePrefixedRootAsHelloRequest(bb:flatbuffers.ByteBuffer, obj?:HelloRequest):HelloRequest {
+  bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);
+  return (obj || new HelloRequest()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
+}
+
+name():string|null
+name(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null
+name(optionalEncoding?:any):string|Uint8Array|null {
+  const offset = this.bb!.__offset(this.bb_pos, 4);
+  return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;
+}
+
+static startHelloRequest(builder:flatbuffers.Builder) {
+  builder.startObject(1);
+}
+
+static addName(builder:flatbuffers.Builder, nameOffset:flatbuffers.Offset) {
+  builder.addFieldOffset(0, nameOffset, 0);
+}
+
+static endHelloRequest(builder:flatbuffers.Builder):flatbuffers.Offset {
+  const offset = builder.endObject();
+  return offset;
+}
+
+static createHelloRequest(builder:flatbuffers.Builder, nameOffset:flatbuffers.Offset):flatbuffers.Offset {
+  HelloRequest.startHelloRequest(builder);
+  HelloRequest.addName(builder, nameOffset);
+  return HelloRequest.endHelloRequest(builder);
+}
+
+serialize():Uint8Array {
+  return this.bb!.bytes();
+}
+
+static deserialize(buffer: Uint8Array):HelloRequest {
+  return HelloRequest.getRootAsHelloRequest(new flatbuffers.ByteBuffer(buffer))
+}
+}
diff --git a/grpc/examples/ts/greeter/src/server.ts b/grpc/examples/ts/greeter/src/server.ts
new file mode 100644
index 0000000..a3f2eee
--- /dev/null
+++ b/grpc/examples/ts/greeter/src/server.ts
@@ -0,0 +1,49 @@
+import * as grpc from '@grpc/grpc-js';
+import * as flatbuffers from 'flatbuffers';
+import { HelloReply } from './models/hello-reply';
+import { HelloRequest } from './models/hello-request';
+import { IGreeterServer, GreeterService } from './greeter_grpc';
+
+const greeter: IGreeterServer = {
+    SayHello(call: grpc.ServerUnaryCall<HelloRequest, HelloReply>, callback: grpc.sendUnaryData<HelloReply>): void {
+        console.log(`SayHello ${call.request.name()}`);
+        const builder = new flatbuffers.Builder();
+        const offset = builder.createString(`welcome ${call.request.name()}`);
+        const root = HelloReply.createHelloReply(builder, offset);
+        builder.finish(root);
+        callback(null, HelloReply.getRootAsHelloReply(new flatbuffers.ByteBuffer(builder.asUint8Array())));
+    },
+    async SayManyHellos(call: grpc.ServerWritableStream<HelloRequest, HelloReply>): Promise<void> {
+        const name = call.request.name();
+        console.log(`${call.request.name()} saying hi in different langagues`);
+        ['Hi', 'Hallo', 'Ciao'].forEach(element => {
+            const builder = new flatbuffers.Builder();
+            const offset = builder.createString(`${element} ${name}`);
+            const root = HelloReply.createHelloReply(builder, offset);
+            builder.finish(root);
+            call.write(HelloReply.getRootAsHelloReply(new flatbuffers.ByteBuffer(builder.asUint8Array())))
+        });
+        call.end();
+    }
+}
+
+function serve(): void {
+    const PORT = 3000;
+    const server = new grpc.Server();
+    server.addService(GreeterService, greeter);
+    console.log(`Listening on ${PORT}`);
+    server.bindAsync(
+        `localhost:${PORT}`,
+        grpc.ServerCredentials.createInsecure(),
+        (err: Error | null, port: number) => {
+          if (err) {
+            console.error(`Server error: ${err.message}`);
+          } else {
+            console.log(`Server bound on port: ${port}`);
+            server.start();
+          }
+        }
+      );
+}
+
+serve();
\ No newline at end of file
diff --git a/grpc/examples/ts/greeter/tsconfig.json b/grpc/examples/ts/greeter/tsconfig.json
new file mode 100644
index 0000000..7076378
--- /dev/null
+++ b/grpc/examples/ts/greeter/tsconfig.json
@@ -0,0 +1,17 @@
+{
+    "compilerOptions": {
+      "target": "es5",
+      "module": "commonjs",
+      "outDir": "./dist",
+      "allowJs": true,
+      "sourceMap": true,
+      "strict": true,
+      "noImplicitAny": false,
+      "strictNullChecks": false,
+      "esModuleInterop": true,
+      "baseUrl": "./",
+      "typeRoots": ["node_modules/@types"],
+      "skipLibCheck": true, 
+      "forceConsistentCasingInFileNames": true
+    }
+  }
\ No newline at end of file
