diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..9e1c8148522b8c234de89fb0fdf893bbf202e248
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,18 @@
+Copyright 2024 Frank Sauerburger
+
+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 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.
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..0fef7612d913672c3615241963570937acead2d4
--- /dev/null
+++ b/README.md
@@ -0,0 +1,30 @@
+# TCP Junction
+
+TCP junction is a tiny TCP-level reverse project implemented in Rust.
+The binary doesn't read a configuration file and is completely configured via command-line arguments.
+Upstream health is inferred from TCP connection success or failure.
+
+TCP Junction makes it easy to implemented dynamic primary/standby setups or canary deployments.
+
+## Junction logic
+
+TCP Junction accepts at list of `host:port` as it's command-line arguments. The first entry
+is the host and port to listen on, e.g., `0.0.0.0:8080`. All allowing arguments are considered
+upstream sockets.
+
+* By default, the first item in the list is the preferred socket and
+  all requests are sent to that host.
+* If the preferred socket is offline, all requests are sent to the next online socket in the list,
+  cycling back to the beginning at the end of the list.
+* If all sockets are offline and the search for an online socket reach the preferred server again,
+  requests are sent to the preferred socket regardless of its state.
+* When TCP Junction receives the `USR1` signal, the preferred host is advanced by one socket,
+  cycling back at the end.
+
+Health probes are sent continuously to all configured upstream sockets.
+
+## Usage example
+
+```bash
+$ tcpjunction 0.0.0.0:8080 10.0.0.20:8080 10.0.0.21:8080
+```