diff --git a/.gitignore b/.gitignore
index 8c9bfa7387b332742c66701d682c37a190a2f172..0ccf03f72080b093959ae299dc9a0477ef210f91 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
 # General
+build
 .*
 
 # VIM
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b1c1435dcfb614e3405cb0d016906dd2631415d2..b0486f0a23ee16f34e7852a0cb19823c74c3c141 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -28,6 +28,7 @@ image: $CI_REGISTRY_IMAGE
 stages:
   - setup
   - test
+  - deploy
 
 # Build a docker image in which tests for this repository can run
 build-testenv:
@@ -50,7 +51,7 @@ code_style:
   tags: [ docker ]
   stage: test
   script:
-    - clang-format-11 --dry-run --verbose $(find . -type f -iname "*.proto") 
+    - clang-format-11 --dry-run --verbose $(find ./proto -type f -iname "*.proto") 
   allow_failure: true
 
 # buf linting
@@ -59,3 +60,20 @@ linting:
   stage: test
   script:
     - buf lint
+
+# Build the sphinx documentation and make it ready for deployment by Gitlab Pages
+# Special job for serving a static website. See https://docs.gitlab.com/ee/ci/yaml/README.html#pages
+pages:
+  tags: [ docker ]
+  stage: deploy
+  only:
+    - web
+  script:
+    - mkdir -p build
+    - cd build
+    - cmake ..
+    - cmake --build . --target doc
+    - cp -r doc_out/ ../public
+  artifacts:
+    paths:
+      - public
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8576b22e6b515e70b61c811efad2176c9fb4af2d
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,32 @@
+#
+# This file is a part of the CaosDB Project.
+#
+# Copyright (C) 2021 Timm Fitschen <t.fitschen@indiscale.com>
+# Copyright (C) 2021 IndiScale GmbH <info@indiscale.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+
+cmake_minimum_required(VERSION 3.13)
+
+set(CAOSDB_PROTO_VERSION 0.0.1)
+
+project("caosdb-proto"
+    VERSION ${CAOSDB_PROTO_VERSION}
+    DESCRIPTION "CaosDB gRPC API"
+    LANGUAGES NONE)
+
+add_subdirectory(proto/caosdb)
+message("CAOSDB_API_PACKAGES: ${CAOSDB_API_PACKAGES}")
+add_subdirectory(doc)
diff --git a/buf.yaml b/buf.yaml
index 34ff5160fd805a7eaf05d821082bf0f81b87632d..c186e1eb9be1d4a89fef6fe6b101d3497f7bd662 100644
--- a/buf.yaml
+++ b/buf.yaml
@@ -2,7 +2,7 @@
 version: v1beta1
 build:
   roots:
-    - .
+    - proto
 lint:
   use:
     - DEFAULT
@@ -11,7 +11,6 @@ lint:
     - UNARY_RPC
   except:
   ignore:
-    -
 breaking:
   use:
     - FILE
diff --git a/caosdb/info/v1/main.proto b/caosdb/info/v1/main.proto
deleted file mode 100644
index f56e0d509b5df3da9f7d9b5f4018c8a3036a8ffb..0000000000000000000000000000000000000000
--- a/caosdb/info/v1/main.proto
+++ /dev/null
@@ -1,33 +0,0 @@
-syntax                      = "proto3";
-option  java_multiple_files = true;
-option  java_package        = "org.caosdb.grpc.info.v1";
-package caosdb.info.v1;
-
-// The version of a agent (following SemVer 2.0.0)
-message VersionInfo {
-  // Major version number
-  uint32 major = 1;
-  // Minor version number
-  uint32 minor = 2;
-  // Patch version
-  uint32 patch = 3;
-  // Pre-release version
-  string pre_release = 4;
-  // Build metadata
-  string build = 5;
-}
-
-// Request message for the GetVersionInfo RPC
-message GetVersionInfoRequest {}
-
-// Response message for the GetVersionInfo RPC
-message GetVersionInfoResponse {
-  // The version of the server
-  VersionInfo version_info = 1;
-}
-
-// A service which provides general information about the server.
-service GeneralInfoService {
-  // Request the detailed version information from the server.
-  rpc GetVersionInfo(GetVersionInfoRequest) returns (GetVersionInfoResponse) {};
-}
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0624aa669f746222c7e706d6b8e2442073800034
--- /dev/null
+++ b/doc/CMakeLists.txt
@@ -0,0 +1,93 @@
+#
+# This file is a part of the CaosDB Project.
+#
+# Copyright (C) 2021 Timm Fitschen <t.fitschen@indiscale.com>
+# Copyright (C) 2021 IndiScale GmbH <info@indiscale.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+
+find_program(SPHINX_CMD sphinx-build)
+find_program(PROTOC_CMD protoc)
+find_program(PROTOC_GEN_DOC_PLUGIN protoc-gen-doc)
+if (NOT PROTOC_CMD)
+    message("Protoc compiler  needs to be installed to generate the documentation")
+elseif (NOT PROTOC_GEN_DOC_PLUGIN)
+    message("Proto-gen-doc plugin needs to be installed to generate the documentation")
+elseif (NOT SPHINX_CMD)
+    message("Sphinx needs to be installed to generate the documentation")
+else ()
+    # Copy sources to build directory
+    add_custom_target(doc-copy-sources
+        COMMAND ${CMAKE_COMMAND} -E copy_directory
+                ${CMAKE_CURRENT_SOURCE_DIR}
+                ${CMAKE_CURRENT_BINARY_DIR}_build
+        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+        COMMENT "Copying ${CMAKE_CURRENT_SOURCE_DIR} sources to ${CMAKE_CURRENT_BINARY_DIR}_build")
+
+
+    # PROTOC-GEN-DOC STUFF
+    list(GET CAOSDB_API_PACKAGES 0 PACKAGE_NAME)
+    string(REPLACE "." "/" PACKAGE_DIR ${PACKAGE_NAME})
+    add_custom_target(doc-scalar-value-types
+        COMMAND ${PROTOC_CMD}
+        --doc_out=${CMAKE_CURRENT_BINARY_DIR}_build/
+        --doc_opt=${CMAKE_CURRENT_BINARY_DIR}_build/scalar-value-types.rst.tmpl,scalar-value-types.rst
+            ${PACKAGE_DIR}/main.proto
+        WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/proto/
+        COMMENT "Generating API documentation for protobuf's native scalar value types."
+        VERBATIM )
+
+    # create rst pages for every package
+    list(LENGTH CAOSDB_API_PACKAGES len_packages)
+    math(EXPR len_packages "${len_packages} - 1")
+    foreach (i RANGE "${len_packages}")
+        list(GET CAOSDB_API_PACKAGES ${i} PACKAGE_NAME)
+
+        configure_file(protoc-gen-doc.rst.in
+            ${CMAKE_CURRENT_BINARY_DIR}_build/packages/${PACKAGE_NAME}.rst.tmpl)
+        string(REPLACE "." "/" PACKAGE_DIR ${PACKAGE_NAME})
+
+        list(APPEND doc-depends "doc-package-${PACKAGE_NAME}")
+        file(GLOB_RECURSE PACKAGE_FILES
+            RELATIVE ${PROJECT_SOURCE_DIR}/proto ${PROJECT_SOURCE_DIR}/proto/${PACKAGE_DIR}/*.proto)
+
+        add_custom_target(doc-package-${PACKAGE_NAME}
+            COMMAND ${PROTOC_CMD}
+            --doc_out=${CMAKE_CURRENT_BINARY_DIR}_build/packages/
+            --doc_opt=${CMAKE_CURRENT_BINARY_DIR}_build/packages/${PACKAGE_NAME}.rst.tmpl,${PACKAGE_NAME}.rst
+                ${PACKAGE_FILES}
+            WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/proto/
+            COMMENT "Generating API documentation sources with the protoc-gen-doc plugin."
+
+            VERBATIM )
+    endforeach ()
+
+
+    # SPHINX STUFF
+    configure_file(conf.py.in conf.py)
+
+    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}_out)
+    add_custom_target(doc
+        COMMAND ${SPHINX_CMD}
+            -b html
+            -n
+            -c ${CMAKE_CURRENT_BINARY_DIR}
+            ${CMAKE_CURRENT_BINARY_DIR}_build
+            ${CMAKE_CURRENT_BINARY_DIR}_out
+        DEPENDS doc-copy-sources doc-scalar-value-types ${doc-depends}
+        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+        COMMENT "Building API documentation with Sphinx."
+        VERBATIM )
+endif ()
diff --git a/doc/conf.py.in b/doc/conf.py.in
new file mode 100644
index 0000000000000000000000000000000000000000..abddb232b1dd2e050ff93a1cc1af204510bebfc2
--- /dev/null
+++ b/doc/conf.py.in
@@ -0,0 +1,75 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# This file only contains a selection of the most common options. For a full
+# list see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+
+# -- Path setup --------------------------------------------------------------
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#
+# import os
+# import sys
+# sys.path.insert(0, os.path.abspath('.'))
+
+
+# -- Project information -----------------------------------------------------
+
+project = '@CMAKE_PROJECT_NAME@'
+copyright = '2021 IndiScale GmbH'
+author = 'Timm Fitschen'
+
+rst_prolog = """
+.. |PROJECT_NAME| replace:: @CMAKE_PROJECT_NAME@
+"""
+
+
+# -- General configuration ---------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+    'sphinx.ext.autodoc',
+    'sphinx.ext.intersphinx',
+    'sphinx.ext.autosectionlabel',
+    'sphinx.ext.todo',
+    'sphinx.ext.coverage',
+    'sphinx.ext.mathjax',
+    'sphinx.ext.ifconfig',
+    'sphinx.ext.viewcode',
+    'sphinx_sitemap',
+    'sphinx.ext.inheritance_diagram',
+]
+
+# Add any paths that contain templates here, relative to this directory.
+# templates_path = ['@CMAKE_CURRENT_SOURCE_DIR@/_templates']
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path.
+exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
+
+highlight_language = 'C'
+
+# -- Options for HTML output -------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+#
+html_theme = 'sphinx_rtd_theme'
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+# html_static_path = ['@CMAKE_CURRENT_SOURCE_DIR@/_static']
+
+# -- Breathe configuration -------------------------------------------------
+
+breathe_projects = {
+    "@CMAKE_PROJECT_NAME@": "@CMAKE_CURRENT_BINARY_DIR@/doxygen_out/xml/"
+}
+breathe_default_project = "@CMAKE_PROJECT_NAME@"
+breathe_default_members = ('members', 'undoc-members')
diff --git a/doc/index.rst b/doc/index.rst
new file mode 100644
index 0000000000000000000000000000000000000000..76eca176e4ceaa0d3168613c7e89eeb5f7aaa9c7
--- /dev/null
+++ b/doc/index.rst
@@ -0,0 +1,44 @@
+..
+    #
+    # This file is a part of the CaosDB Project.
+    #
+    # Copyright (C) 2021 Timm Fitschen <t.fitschen@indiscale.com>
+    # Copyright (C) 2021 IndiScale GmbH <info@indiscale.com>
+    #
+    # This program is free software: you can redistribute it and/or modify
+    # it under the terms of the GNU Affero General Public License as
+    # published by the Free Software Foundation, either version 3 of the
+    # License, or (at your option) any later version.
+    #
+    # This program is distributed in the hope that it will be useful,
+    # but WITHOUT ANY WARRANTY; without even the implied warranty of
+    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    # GNU Affero General Public License for more details.
+    #
+    # You should have received a copy of the GNU Affero General Public License
+    # along with this program. If not, see <https://www.gnu.org/licenses/>.
+    #
+    #
+
+.. _welcome:
+
+Welcome to |PROJECT_NAME|'s documentation!
+==========================================
+
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+
+
+.. toctree::
+    :maxdepth: 4
+    :caption: Contents:
+
+    Welcome <self>
+    packages/index
+    scalar-value-types
diff --git a/doc/packages/index.rst b/doc/packages/index.rst
new file mode 100644
index 0000000000000000000000000000000000000000..9ef1d2a4a8ca792982abf5312440b7373c7cc1b4
--- /dev/null
+++ b/doc/packages/index.rst
@@ -0,0 +1,30 @@
+..
+    #
+    # This file is a part of the CaosDB Project.
+    #
+    # Copyright (C) 2021 Timm Fitschen <t.fitschen@indiscale.com>
+    # Copyright (C) 2021 IndiScale GmbH <info@indiscale.com>
+    #
+    # This program is free software: you can redistribute it and/or modify
+    # it under the terms of the GNU Affero General Public License as
+    # published by the Free Software Foundation, either version 3 of the
+    # License, or (at your option) any later version.
+    #
+    # This program is distributed in the hope that it will be useful,
+    # but WITHOUT ANY WARRANTY; without even the implied warranty of
+    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    # GNU Affero General Public License for more details.
+    #
+    # You should have received a copy of the GNU Affero General Public License
+    # along with this program. If not, see <https://www.gnu.org/licenses/>.
+    #
+
+.. _api_root:
+
+API Packages
+============
+
+.. toctree::
+    :glob:
+
+    *
diff --git a/doc/protoc-gen-doc.rst.in b/doc/protoc-gen-doc.rst.in
new file mode 100644
index 0000000000000000000000000000000000000000..f50cf1eff8c0288967e7b8045be3178b68991f72
--- /dev/null
+++ b/doc/protoc-gen-doc.rst.in
@@ -0,0 +1,128 @@
+..
+    #
+    # This file is a part of the CaosDB Project.
+    #
+    # Copyright (C) 2021 Timm Fitschen <t.fitschen@indiscale.com>
+    # Copyright (C) 2021 IndiScale GmbH <info@indiscale.com>
+    #
+    # This program is free software: you can redistribute it and/or modify
+    # it under the terms of the GNU Affero General Public License as
+    # published by the Free Software Foundation, either version 3 of the
+    # License, or (at your option) any later version.
+    #
+    # This program is distributed in the hope that it will be useful,
+    # but WITHOUT ANY WARRANTY; without even the implied warranty of
+    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    # GNU Affero General Public License for more details.
+    #
+    # You should have received a copy of the GNU Affero General Public License
+    # along with this program. If not, see <https://www.gnu.org/licenses/>.
+    #
+    #
+
+
+
+.. _package_@PACKAGE_NAME@:
+
+
+#######################################
+@PACKAGE_NAME@
+#######################################
+
+.. toctree::
+    :hidden:
+
+{{range .Files}}
+{{$file_name := .Name}}
+
+.. _ref_{{.Name}}:
+
+{{.Name}}
+==================================================================
+
+{{.Description}}
+
+{{range .Messages}}
+
+.. _ref_{{.FullName}}:
+
+{{.LongName}}
+------------------------------------------------------------------
+
+{{.Description}}
+
+{{if .HasFields}}
+
+.. csv-table:: {{.LongName}} type fields
+   :header: "Field", "Type", "Label", "Description"
+   :widths: auto
+{{range .Fields }}
+   "{{.Name}}", ":ref:`{{.Type}}<ref_{{.FullType}}>`", "{{.Label}}", "{{if (index .Options "deprecated"|default false)}}**Deprecated.** {{end}}{{nobr .Description}}{{if .DefaultValue}} Default: {{.DefaultValue}}{{end}}"
+{{- end}}
+{{end}}
+
+
+{{if .HasExtensions}}
+
+.. csv-table:: {{.LongName}} type extensions
+   :header: "Extension", "Type", "Base", "Number", "Description"
+   :widths: auto
+{{range .Extensions }}
+   "{{.Name}}", "{{.LongType}}", "{{.ContainingLongType}}", "{{.Number}}", "{{nobr .Description}}{{if .DefaultValue}} Default: {{.DefaultValue}}{{end}}"
+{{- end}}
+{{end}}
+
+{{end}}
+
+{{range .Enums}}
+
+.. _ref_{{.FullName}}:
+
+{{.LongName}}
+------------------------------------------------------------------
+
+{{.Description}}
+
+.. csv-table:: Enum {{.LongName}} values
+   :header: "Name", "Number", "Description"
+   :widths: auto
+{{range .Values }}
+   "{{.Name}}", "{{.Number}}", "{{nobr .Description}}"
+{{- end}}
+
+{{end}}
+
+{{if .HasExtensions}}
+
+.. _ref_{{$file_name}}_extensions:
+
+File-level Extensions
+--------------------------------------------------------------------------------
+
+.. csv-table:: {{.Name}} file-level Extensions
+   :header: "Extension", "Type", "Base", "Number", "Description"
+   :widths: auto
+{{range .Extensions}}
+   "{{.Name}}", "{{.LongType}}", "{{.ContainingLongType}}", "{{.Number}}", "{{nobr .Description}}{{if .DefaultValue}} Default: `{{.DefaultValue}}`{{end}}"
+{{- end}}
+{{end}}
+
+{{range .Services}}
+
+.. _ref_{{.FullName}}:
+
+{{.Name}}
+------------------------------------------------------------------
+
+{{.Description}}
+
+.. csv-table:: {{.Name}} service methods
+   :header: "Method Name", "Request Type", "Response Type", "Description"
+   :widths: auto
+{{range .Methods}}
+   "{{.Name}}", ":ref:`ref_{{.RequestFullType}}`{{if .RequestStreaming}} stream{{end}}", ":ref:`ref_{{.ResponseFullType}}`{{if .ResponseStreaming}} stream{{end}}", "{{nobr .Description}}"
+{{- end}}
+{{end}}
+
+{{end}}
+
diff --git a/doc/scalar-value-types.rst.tmpl b/doc/scalar-value-types.rst.tmpl
new file mode 100644
index 0000000000000000000000000000000000000000..bb10278ab46979efa93b73cecabd35e04cad18a1
--- /dev/null
+++ b/doc/scalar-value-types.rst.tmpl
@@ -0,0 +1,15 @@
+.. _ref_scala_types:
+
+Scalar Value Types
+==================
+
+{{range .Scalars}}
+.. _ref_{{.ProtoType}}:
+{{end}}
+
+.. csv-table:: Scalar Value Types and their language representation
+   :header: ".proto Type", "Note", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby"
+   :widths: auto
+
+   {{range .Scalars}}
+   "{{.ProtoType}}", "{{.Notes}}", "{{.CppType}}", "{{.JavaType}}", "{{.PythonType}}", "{{.GoType}}", "{{.CSharp}}", "{{.PhpType}}", "{{.RubyType}}"{{end}}
diff --git a/proto/caosdb/CMakeLists.txt b/proto/caosdb/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d3ce8215e8c06d211664a2538832165001791a3e
--- /dev/null
+++ b/proto/caosdb/CMakeLists.txt
@@ -0,0 +1,26 @@
+#
+# This file is a part of the CaosDB Project.
+#
+# Copyright (C) 2021 Timm Fitschen <t.fitschen@indiscale.com>
+# Copyright (C) 2021 IndiScale GmbH <info@indiscale.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+
+set(CAOSDB_API_PACKAGES
+    caosdb.info.v1alpha1
+    )
+
+# pass variable to parent scope
+set(CAOSDB_API_PACKAGES ${CAOSDB_API_PACKAGES} PARENT_SCOPE)
diff --git a/proto/caosdb/info/v1alpha1/main.proto b/proto/caosdb/info/v1alpha1/main.proto
new file mode 100644
index 0000000000000000000000000000000000000000..59e7b4018d75695406af2b6e91abe8b46755d21b
--- /dev/null
+++ b/proto/caosdb/info/v1alpha1/main.proto
@@ -0,0 +1,54 @@
+//
+// This file is a part of the CaosDB Project.
+//
+// Copyright (C) 2021 Timm Fitschen <t.fitschen@indiscale.com>
+// Copyright (C) 2021 IndiScale GmbH <info@indiscale.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see <https://www.gnu.org/licenses/>.
+//
+
+// This is the main file of the caosdb.info.v1alpha1 package.
+syntax                      = "proto3";
+option  java_multiple_files = true;
+option  java_package        = "org.caosdb.api.info.v1alpha1";
+
+package caosdb.info.v1alpha1;
+
+// The version of an agent (following SemVer 2.0.0)
+message VersionInfo {
+  // Major version number
+  uint32 major = 1;
+  // Minor version number
+  uint32 minor = 2;
+  // Patch version
+  uint32 patch = 3;
+  // Pre-release version
+  string pre_release = 4;
+  string build = 5;
+}
+
+// Request message for the GetVersionInfo RPC
+message GetVersionInfoRequest {}
+
+// Response message for the GetVersionInfo RPC
+message GetVersionInfoResponse {
+  // The version of the server
+  VersionInfo version_info = 1;
+}
+
+// A service which provides general information about the server.
+service GeneralInfoService {
+  // Request the detailed version information from the server.
+  rpc GetVersionInfo(GetVersionInfoRequest) returns (GetVersionInfoResponse) {};
+}