diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000000000000000000000000000000000000..124049047cee12f0d9dedda4e4512c8b0552dee5
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,26 @@
+Copyright © 2012 Philipp Brüschweiler
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice (including the next
+paragraph) shall be included in all copies or substantial portions of the
+Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+---
+
+The above is the version of the MIT "Expat" License used by X.org:
+
+    http://cgit.freedesktop.org/xorg/xserver/tree/COPYING
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..5e8c7c2c9eb40b4e3092674a3f249221fa0d88f7
--- /dev/null
+++ b/README.md
@@ -0,0 +1,35 @@
+wayland-info
+============
+
+Because `weston-info` is a generally useful tool, even outside of weston,
+and gives interesting information on any Wayland compositor, this is basically
+a standalone version of `weston-info` as found in
+[weston](https://gitlab.freedesktop.org/wayland/weston/) repository.
+
+Building
+========
+
+Just like `weston` itself, `wayland-info` is built using
+[Meson](https://mesonbuild.com/) and depends
+on [Wayland](https://gitlab.freedesktop.org/wayland/wayland) and
+[wayland-protocols](https://cgit.freedesktop.org/wayland/wayland-protocols).
+
+	$ git clone https://gitlab.freedesktop.org/ofourdan/wayland-utils.git
+	$ cd wayland-info
+	$ meson build/ --prefix=...
+	$ ninja -C build/ install
+	$ cd ..
+
+Running
+=======
+
+`wayland-info` does not accepts any command line option.
+
+	$ wayland-info
+
+Credit
+======
+
+The code base of `wayland-info` is identical to `weston-info` and therefore
+all credits for `wayland-info` go to the author and contributors of `weston-info`.
+
diff --git a/man/meson.build b/man/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..7758d0d6b3385e72b188d20cb667c11a0669c134
--- /dev/null
+++ b/man/meson.build
@@ -0,0 +1,9 @@
+man_conf = configuration_data()
+man_conf.set('version', meson.project_version())
+
+configure_file(
+	input: 'wayland-info.man',
+	output: 'wayland-info.1',
+	install_dir: join_paths(dir_man, 'man1'),
+	configuration: man_conf
+)
diff --git a/man/wayland-info.man b/man/wayland-info.man
new file mode 100644
index 0000000000000000000000000000000000000000..b402a47df465218ecdc248ae20c2332addb3f964
--- /dev/null
+++ b/man/wayland-info.man
@@ -0,0 +1,42 @@
+.TH WAYLAND-INFO 1 "2020-07-08" "@version@"
+.SH NAME
+wayland-info \- display information utility for Wayland.
+.SH SYNOPSIS
+.B wayland-info
+.
+.\" ***************************************************************
+.SH DESCRIPTION
+
+.B wayland-info
+is a utility for displaying information about the Wayland protocols supported
+by a Wayland compositor.
+
+It is used to check which Wayland protocols and versions are advertised
+by the Wayland compositor.
+
+.B wayland-info
+also provides additional information for a subset of Wayland protocols it
+knows about, namely Linux DMABUF, presentation time, tablet and XDG output
+protocols.
+.
+.\" ***************************************************************
+.SH OPTIONS
+.
+.B wayland-info
+does not accept any command line option.
+.
+.\" ***************************************************************
+.SH ENVIRONMENT
+.
+.TP
+.B WAYLAND_DISPLAY
+The name of the display (socket) of an already running Wayland server, without
+the path. The directory path is always taken from
+.BR XDG_RUNTIME_DIR .
+If
+.B WAYLAND_DISPLAY
+is not set, the socket name is "wayland-0".
+.
+.\" ***************************************************************
+.SH "SEE ALSO"
+.BR weston (1)
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..5e0a8f7c9a30321d404896d127d2c0c6688ebe56
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,32 @@
+project('wayland-info',
+	'c',
+	version: '0.0.1',
+	default_options: [
+		'warning_level=3',
+		'c_std=gnu99',
+		'b_lundef=true',
+	],
+	meson_version: '>= 0.47',
+	license: 'MIT/Expat',
+)
+
+
+dir_prefix = get_option('prefix')
+dir_bin = join_paths(dir_prefix, get_option('bindir'))
+dir_man = join_paths(dir_prefix, get_option('mandir'))
+dir_inc = include_directories('.')
+
+pkgconfig = import('pkgconfig')
+
+cc = meson.get_compiler('c')
+
+dep_wayland_server = dependency('wayland-server', version: '>= 1.17.0')
+dep_wayland_client = dependency('wayland-client', version: '>= 1.17.0')
+
+config_h = configuration_data()
+config_h.set('_GNU_SOURCE', '1')
+config_h.set('_ALL_SOURCE', '1')
+configure_file(output: 'config.h', configuration: config_h)
+
+subdir('wayland-info')
+subdir('man')
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/wayland-info/meson.build b/wayland-info/meson.build
new file mode 100644
index 0000000000000000000000000000000000000000..85395cfe07512ff1bb76975fa96d55dc7704a78d
--- /dev/null
+++ b/wayland-info/meson.build
@@ -0,0 +1,61 @@
+dep_scanner = dependency('wayland-scanner', native: true)
+prog_scanner = find_program(dep_scanner.get_pkgconfig_variable('wayland_scanner'))
+
+dep_wp = dependency('wayland-protocols', version: '>= 1.18')
+dir_wp_base = dep_wp.get_pkgconfig_variable('pkgdatadir')
+
+generated_protocols = [
+	[ 'linux-dmabuf', 'v1' ],
+	[ 'presentation-time', 'stable' ],
+	[ 'tablet', 'v2' ],
+	[ 'xdg-output', 'v1' ],
+]
+
+foreach proto: generated_protocols
+	proto_name = proto[0]
+	if proto[1] == 'stable'
+		base_file = proto_name
+		xml_path = '@0@/stable/@1@/@2@.xml'.format(dir_wp_base, proto_name, base_file)
+	else
+		base_file = '@0@-unstable-@1@'.format(proto_name, proto[1])
+		xml_path = '@0@/unstable/@1@/@2@.xml'.format(dir_wp_base, proto_name, base_file)
+	endif
+
+	foreach output_type: [ 'client-header', 'private-code' ]
+		if output_type == 'client-header'
+			output_file = '@0@-client-protocol.h'.format(base_file)
+		else
+			output_file = '@0@-protocol.c'.format(base_file)
+			if dep_scanner.version().version_compare('< 1.14.91')
+				output_type = 'code'
+			endif
+		endif
+
+		var_name = output_file.underscorify()
+		target = custom_target(
+			'@0@ @1@'.format(base_file, output_type),
+			command: [ prog_scanner, output_type, '@INPUT@', '@OUTPUT@' ],
+			input: xml_path,
+			output: output_file,
+		)
+
+		set_variable(var_name, target)
+	endforeach
+endforeach
+
+wayland_info_src = [
+	'wayland-info.c',
+	linux_dmabuf_unstable_v1_client_protocol_h,
+	linux_dmabuf_unstable_v1_protocol_c,
+	presentation_time_client_protocol_h,
+	presentation_time_protocol_c,
+	tablet_unstable_v2_client_protocol_h,
+	tablet_unstable_v2_protocol_c,
+	xdg_output_unstable_v1_client_protocol_h,
+	xdg_output_unstable_v1_protocol_c]
+
+executable('wayland-info',
+	wayland_info_src,
+	include_directories: dir_inc,
+	dependencies: dep_wayland_client,
+	install : true)