diff --git a/.github/workflows/check-witx.yaml b/.github/workflows/check-witx.yaml
new file mode 100644
index 0000000..d4b71e2
--- /dev/null
+++ b/.github/workflows/check-witx.yaml
@@ -0,0 +1,26 @@
+name: Check Witx
+
+on: [push, pull_request]
+
+jobs:
+ Witx:
+ name: "Check Witx"
+ runs-on: ubuntu-latest
+ timeout-minutes: 10
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ - name: Generate markdown
+ uses: NodeFactoryIo/witx-md-generator-action@master
+ with:
+ witxGlobPath: spec/witx/**/*.witx
+
+ - name: Check if there are changes
+ id: changes
+ uses: UnicornGlobal/has-changes-action@v1.0.11
+
+ - name: Process changes
+ if: steps.changes.outputs.changed == 1
+ run: exit 1
diff --git a/spec/witx/README.md b/spec/witx/README.md
new file mode 100644
index 0000000..8f4beee
--- /dev/null
+++ b/spec/witx/README.md
@@ -0,0 +1,15 @@
+## Generating Markdown
+
+Generating Markdown is done via tool from WASI [repo](https://github.com/WebAssembly/WASI/tree/master/tools/witx):
+
+```bash
+cargo run witx docs "path/**/*.witx"
+```
+
+### Docker
+
+Also available is a docker image with prepackaged cli:
+
+```bash
+docker run -v /path:/usr/src/witx nodefactory/witx docs "path/**/*.witx"
+```
diff --git a/spec/witx/w3.md b/spec/witx/w3.md
new file mode 100644
index 0000000..1353777
--- /dev/null
+++ b/spec/witx/w3.md
@@ -0,0 +1,123 @@
+# Types
+# Modules
+## w3
+### Imports
+### Functions
+
+---
+
+#### `_w3_init()`
+Init w3
+
+##### Params
+##### Results
+
+---
+
+#### `_w3_invoke(name_size: u64, args_size: u32)`
+Invoke call
+
+##### Params
+- `name_size`: `u64`
+
+- `args_size`: `u32`
+
+##### Results
+
+---
+
+#### `__w3_invoke_args(name_ptr: s32, args_ptr: s32)`
+Get Invoke Arguments
+
+##### Params
+- `name_ptr`: `s32`
+
+- `args_ptr`: `s32`
+
+##### Results
+
+---
+
+#### `__w3_invoke_result(ptr: s32, len: u64)`
+Set Invoke Arguments
+
+##### Params
+- `ptr`: `s32`
+
+- `len`: `u64`
+
+##### Results
+
+---
+
+#### `__w3_invoke_error(ptr: s32, len: u64)`
+Set Invoke Error
+
+##### Params
+- `ptr`: `s32`
+
+- `len`: `u64`
+
+##### Results
+
+---
+
+#### `__w3_query(uri_ptr: s32, uri_len: u64, query_ptr: s32, query_len: u64, args_ptr: s32, args_len: u64) -> s8`
+Query API
+
+##### Params
+- `uri_ptr`: `s32`
+
+- `uri_len`: `u64`
+
+- `query_ptr`: `s32`
+
+- `query_len`: `u64`
+
+- `args_ptr`: `s32`
+
+- `args_len`: `u64`
+
+##### Results
+- `res`: `s8`
+
+
+---
+
+#### `__w3_query_result_len() -> u64`
+Query Result
+
+##### Params
+##### Results
+- `res`: `u64`
+
+
+---
+
+#### `__w3_query_result(ptr: s32)`
+Query Result
+
+##### Params
+- `ptr`: `s32`
+
+##### Results
+
+---
+
+#### `__w3_query_error_len() -> u64`
+Query Error
+
+##### Params
+##### Results
+- `res`: `u64`
+
+
+---
+
+#### `__w3_query_error(ptr: s32)`
+Query Error
+
+##### Params
+- `ptr`: `s32`
+
+##### Results
diff --git a/spec/witx/w3.witx b/spec/witx/w3.witx
new file mode 100644
index 0000000..408c61c
--- /dev/null
+++ b/spec/witx/w3.witx
@@ -0,0 +1,57 @@
+(module $w3
+ ;;; Init w3
+ (@interface func (export "_w3_init"))
+
+ ;;; Invoke call
+ (@interface func (export "_w3_invoke")
+ (param $name_size u64)
+ (param $args_size u32)
+ )
+
+ ;;; Get Invoke Arguments
+ (@interface func (export "__w3_invoke_args")
+ (param $name_ptr s32)
+ (param $args_ptr s32)
+ )
+
+ ;;; Set Invoke Arguments
+ (@interface func (export "__w3_invoke_result")
+ (param $ptr s32)
+ (param $len u64)
+ )
+
+ ;;; Set Invoke Error
+ (@interface func (export "__w3_invoke_error")
+ (param $ptr s32)
+ (param $len u64)
+ )
+
+ ;;; Query API
+ (@interface func (export "__w3_query")
+ (param $uri_ptr s32)
+ (param $uri_len u64)
+ (param $query_ptr s32)
+ (param $query_len u64)
+ (param $args_ptr s32)
+ (param $args_len u64)
+ (result $res s8)
+ )
+
+ ;;; Query Result
+ (@interface func (export "__w3_query_result_len")
+ (result $res u64)
+ )
+ ;;; Query Result
+ (@interface func (export "__w3_query_result")
+ (param $ptr s32)
+ )
+
+ ;;; Query Error
+ (@interface func (export "__w3_query_error_len")
+ (result $res u64)
+ )
+ ;;; Query Error
+ (@interface func (export "__w3_query_error")
+ (param $ptr s32)
+ )
+)