diff --git a/CMakeLists.txt b/CMakeLists.txt
index bbf61299..e30b52e0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -22,12 +22,15 @@ find_package(XKBCommon REQUIRED)
 find_package(WLC REQUIRED)
 find_package(A2X REQUIRED)
 find_package(PCRE REQUIRED)
+find_package(PkgConfig REQUIRED)
+pkg_check_modules(JSON REQUIRED json-c)
 
 FILE(GLOB sources ${PROJECT_SOURCE_DIR}/sway/*.c)
 
 include_directories(
    ${WLC_INCLUDE_DIRS}
    ${PCRE_INCLUDE_DIRS}
+   ${JSON_INCLUDE_DIRS}
    include/
 )
 
@@ -39,6 +42,7 @@ target_link_libraries(sway
    ${WLC_LIBRARIES}
    ${XKBCOMMON_LIBRARIES}
    ${PCRE_LIBRARIES}
+   ${JSON_LIBRARIES}
 )
 
 INSTALL(
diff --git a/sway/ipc.c b/sway/ipc.c
index 0b36d758..c5b72db7 100644
--- a/sway/ipc.c
+++ b/sway/ipc.c
@@ -12,6 +12,7 @@
 #include <sys/ioctl.h>
 #include <fcntl.h>
 #include <ctype.h>
+#include <json-c/json.h>
 #include "ipc.h"
 #include "log.h"
 #include "config.h"
@@ -226,6 +227,18 @@ void ipc_client_handle_command(struct ipc_client *client) {
 		free(json);
 		break;
 	}
+	case IPC_GET_VERSION:
+	{
+		json_object *json = json_object_new_object();
+		json_object_object_add(json, "human_readable", json_object_new_string(SWAY_GIT_VERSION));
+		json_object_object_add(json, "major", json_object_new_int(0));
+		json_object_object_add(json, "minor", json_object_new_int(0));
+		json_object_object_add(json, "patch", json_object_new_int(1));
+		const char *json_string = json_object_to_json_string(json);
+		ipc_send_reply(client, json_string, (uint32_t) strlen(json_string));
+		json_object_put(json); // free
+		break;
+	}
 	default:
 		sway_log(L_INFO, "Unknown IPC command type %i", client->current_command);
 		ipc_client_disconnect(client);