diff --git a/recipes-app/fpgaversion.sh b/recipes-app/fpgaversion.sh
new file mode 100755
index 0000000000000000000000000000000000000000..936f8580edbd87343a6eef667bf4ca480e77c9d5
--- /dev/null
+++ b/recipes-app/fpgaversion.sh
@@ -0,0 +1,64 @@
+#!/bin/bash
+
+PATH_MAPT=/opt/fofb-opcua-server/app.mapt
+
+function read_reg () {
+	# ARGS: regname
+
+	# Fix name for grep
+	fname="^${1} "
+
+	# Grep MAPT file for reg name
+	l=$(grep -e ${fname} ${PATH_MAPT})
+
+	if [[ -z "$l" ]]; then
+		echo "Could not find register named $1" >&2
+		exit 1
+	fi
+
+
+	# Retrieve fields
+	raddr=$(awk '{print $3}' <<<$l )
+	rsize=$(awk '{print $4}' <<<$l )
+
+	# Read register
+	data=$(devmem $raddr)
+
+	echo $((data))
+}
+
+function get_appname () {
+
+	appcode=$(read_reg APP.ID)
+
+	if [[ $appcode -eq 0x507E17A0 ]]; then
+		echo cellnode
+		return
+	fi
+	
+
+	if [[ $appcode -eq 0x507E1722 ]]; then
+		echo centralnode
+		return
+	fi
+
+	printf "Application ID not recognized: %X\n" $appcode  >&2
+	echo \#NA
+	return 1
+}
+
+function get_version () {
+
+	vers=$(read_reg BSP.PRJ_VERSION)
+	changes=$(($vers & 0xFF))
+	patch=$(( $(($vers>>8)) & 0xFF))
+	minor=$(( $(($vers>>16)) & 0xFF))
+	major=$(( $(($vers>>24)) & 0xFF))
+
+	shasum=$(printf "%x" $(read_reg BSP.PRJ_SHASUM))
+
+	echo "${major}.${minor}.${patch}-${changes}-(${shasum})"
+}
+
+printf "%10s %s\n" $(get_appname) $(get_version)
+printf "SynthTime: %s\n" "$(date -d"@$(read_reg BSP.PRJ_TIMESTAMP)")"