diff --git a/extras/vpptop/vpptop.sh b/extras/vpptop/vpptop.sh
new file mode 100755
index 0000000..0d07942
--- /dev/null
+++ b/extras/vpptop/vpptop.sh
@@ -0,0 +1,231 @@
+#!/bin/bash
+
+# A simple script that installs VPPTop utility including
+# all requirements. The binary API is built from the local
+# vpp data. 'make install-dep' is recommended to call first.
+
+set -eo pipefail
+
+OPT_ARG=${1:-}
+
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+cd "${SCRIPT_DIR}"/../../
+VPP_DIR=$(pwd)
+BUILD_DIR=${VPP_DIR}/extras/vpptop/build
+
+GOROOT=${GOROOT:-}
+GOPATH=${GOPATH:-}
+
+[ -z "${GOROOT}" ] && GOROOT="${HOME}/.go"
+[ -z "${GOPATH}" ] && GOPATH="${HOME}/go"
+
+function dep_install() {
+  echo "Installing VPPTop dependencies"
+  apt-get update
+  apt-get install git wget curl -y
+}
+
+# Install latest GO version
+function go_install() {
+  local TMP="/tmp"
+
+  # Search for existing golang installation
+  echo "Looking for pre-installed GO.."
+  local installed_ver installed_ver_fmt
+  if [[ -f "${GOROOT}/bin/go" ]]; then
+    installed_ver=$(cd ${GOROOT}/bin && ./go version)
+    installed_ver_fmt=${installed_ver#"go version go"}
+    export PATH=$GOROOT/bin:$PATH
+    export PATH=$GOPATH/bin:$PATH
+    echo "Found installed version ${installed_ver_fmt}"
+    return
+  fi
+
+  # install golang when missing
+  echo ".. none was found. Installing the latest one"
+  mkdir -p "${GOROOT}"
+  mkdir -p "${GOPATH}/"{src,pkg,bin}
+
+  wget "https://dl.google.com/go/$(curl https://golang.org/VERSION?m=text).linux-amd64.tar.gz" -O "${TMP}/go.tar.gz"
+  tar -C "$GOROOT" --strip-components=1 -xzf "${TMP}/go.tar.gz"
+
+  rm -f "${TMP}/go.tar.gz"
+
+  # export for current session so the VPPTop can be installed
+  export GOROOT=${GOROOT}
+  export GOPATH=$GOPATH
+  export PATH=$GOROOT/bin:$PATH
+  export PATH=$GOPATH/bin:$PATH
+
+  cat << EOF
+Installed $(go version)
+Note: following variables were exported for the current session:
+GOROOT=${GOROOT}
+GOPATH=${GOPATH}
+Both were added to PATH
+EOF
+}
+
+# Install GoVPP binary API generator. GoLang required
+# to be installed in version 1.13 or higher
+function install_binapi_gen() {
+  echo "Installing GoVPP binary API generator"
+
+  export GO111MODULE=on
+  # master required for latest VPPTop
+  if [[ ! -f "${GOROOT}/bin/go" ]]; then
+    echo "GO is not installed"
+    exit 1
+  fi
+  cd ${GOROOT}/bin && ./go get git.fd.io/govpp.git/cmd/binapi-generator@master
+
+  local installed_ver installed_ver_fmt
+  installed_ver=$(cd ${GOPATH}/bin && ./binapi-generator -version)
+  installed_ver_fmt=${installed_ver#"govpp "}
+  echo "Binary API generator ${installed_ver_fmt} installed"
+}
+
+# Generate binary API files in the VPPTop directory using
+# the local VPP sources
+function generate_binary_api() {
+  # note: build-root dir is planned to be removed, update the path by then
+  local api_dir=${VPP_DIR}/build-root/install-vpp-native/vpp/share/vpp/api
+  local out_dir=${BUILD_DIR}/vpptop/stats/local/binapi
+
+  if [[ ! -f "${GOPATH}/bin/binapi-generator" ]]; then
+    install_binapi_gen
+  fi
+  if [ ! -d "${BUILD_DIR}" ]; then
+    echo "VPPTop directory does not exist"
+    exit 1
+  elif [ ! -d "${out_dir}" ]; then
+    mkdir -p "${out_dir}"
+  fi
+  if [ ! -d "${api_dir}" ]; then
+    echo "JSON API files missing, call 'make json-api-files' first"
+    exit 1
+  fi
+
+  echo "Generating API"
+  cd ${GOPATH}/bin && ./binapi-generator --output-dir="${out_dir}" -input-dir="${api_dir}" \
+    "${api_dir}"/plugins/dhcp.api.json \
+    "${api_dir}"/core/interface.api.json \
+    "${api_dir}"/core/ip.api.json \
+    "${api_dir}"/core/vpe.api.json
+}
+
+# Retrieve VPPTop repository
+function get_vpptop() {
+  echo "Fetching VPPTop"
+  if [ ! -d "${BUILD_DIR}/vpptop" ]; then
+    mkdir "${BUILD_DIR}"
+    cd "${BUILD_DIR}" && git clone https://github.com/PANTHEONtech/vpptop.git
+  else
+    echo "VPPTop directory already exists"
+  fi
+}
+
+# Resolve VPPTop dependencies and install the binary
+function vpptop_install() {
+  get_vpptop
+  generate_binary_api
+
+  echo "Installing VPPTop"
+  if [ ! -d "${BUILD_DIR}" ]; then
+    echo "VPPTop directory does not exist"
+    exit 1
+  fi
+
+  gopath=${GOROOT}/bin/go
+
+  cd "${BUILD_DIR}"/vpptop && go mod download
+  cd "${BUILD_DIR}"/vpptop && make install
+
+  if [[ ! -x "$(command -v vpptop)" ]] && [[ ! -f "${GOPATH}/bin/vpptop" ]] ; then
+    echo "VPPTop was not successfully installed"
+    exit 1
+  fi
+  if [[ ! -x "$(command -v vpptop)" ]] ; then
+    echo "VPPTop was installed to ${GOPATH}/bin/vpptop"
+  fi
+
+    cat << EOF
+-----
+$(vpptop --help)
+-----
+
+Following binaries were installed:
+${GOPATH}/bin/binapi-generator
+${GOPATH}/bin/vpptop
+EOF
+}
+
+# Starts the vpptop binary
+function vpptop_start() {
+  if [[ -f "${GOPATH}/bin/vpptop"  ]] ; then
+    cd ${GOPATH}/bin && ./vpptop
+    return
+  fi
+
+  echo "VPPTop is not installed, use 'make vpptop-install' first"
+}
+
+# Remove VPPTop repository from extras
+function cleanup() {
+  echo "Cleaning up VPPTop"
+  rm -rf "${BUILD_DIR}"
+}
+
+# Show available commands
+function help() {
+  cat <<__EOF__
+  VPPTop installer
+
+  Run 'make install-dep' before the installation
+
+  <install>:
+  Installs VPPTop requirements (latest GO, GoVPP binary API generator),
+  retrieves VPPTop repository, generates binary API and installs the
+  VPPTop binary.
+
+  <cleanup>:
+  Removes VPPTop repository
+
+  <start>:
+  Runs vpptop binary
+
+__EOF__
+}
+
+# Resolve chosen option and call appropriate functions
+function resolve_option() {
+  local option=$1
+  case ${option} in
+  "start")
+    vpptop_start
+    ;;
+  "install")
+    dep_install
+    go_install
+    vpptop_install
+    ;;
+  "cleanup")
+    cleanup
+    ;;
+  "help")
+    help
+    ;;
+  *) echo invalid option ;;
+  esac
+}
+
+if [[ -n ${OPT_ARG} ]]; then
+  resolve_option "${OPT_ARG}"
+else
+  PS3="--> "
+  options=("install" "cleanup" "help")
+  select option in "${options[@]}"; do
+    resolve_option "${option}"
+    break
+  done
+fi
