diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..378eac25d311703f3f2cd456d8036da525cd0366
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+build
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..51e5648a19fee617e9af9c262f97e76ab3ef9784
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,53 @@
+# Copyright (C) 2024 by Skyward
+#
+# This program is free software; you can redistribute it and/or 
+# it under the terms of the GNU General Public License as published 
+# the Free Software Foundation; either version 2 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 General Public License for more details.
+#
+# As a special exception, if other files instantiate templates or use
+# macros or inline functions from this file, or you compile this file
+# and link it with other works to produce a work based on this file,
+# this file does not by itself cause the resulting work to be covered
+# by the GNU General Public License. However the source code for this
+# file must still be made available in accordance with the GNU 
+# Public License. This exception does not invalidate any other 
+# why a work based on this file might be covered by the GNU General
+# Public License.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>
+
+cmake_minimum_required(VERSION 3.16)
+
+project(TsCpp
+    DESCRIPTION "Trivial serialization for C++"
+    LANGUAGES CXX
+)
+
+add_library(tscpp INTERFACE)
+target_sources(tscpp INTERFACE src/tscpp/buffer.cpp src/tscpp/stream.cpp)
+target_include_directories(tscpp INTERFACE include)
+
+add_executable(1_stream_known examples/1_stream_known.cpp)
+target_link_libraries(1_stream_known tscpp)
+
+add_executable(2_stream_unknown examples/2_stream_unknown.cpp)
+target_link_libraries(2_stream_unknown tscpp)
+
+add_executable(3_buffer_known examples/3_buffer_known.cpp)
+target_link_libraries(3_buffer_known tscpp)
+
+add_executable(4_buffer_unknown examples/4_buffer_unknown.cpp)
+target_link_libraries(4_buffer_unknown tscpp)
+
+add_executable(5_stream_failtest examples/5_stream_failtest.cpp)
+target_link_libraries(5_stream_failtest tscpp)
+
+add_executable(6_buffer_failtest examples/6_buffer_failtest.cpp)
+target_link_libraries(6_buffer_failtest tscpp)
diff --git a/examples/Makefile b/examples/Makefile
deleted file mode 100644
index 9134e38ad709c5a5779f6687bb2d69643cb62c8f..0000000000000000000000000000000000000000
--- a/examples/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-
-CXX = g++
-CXXFLAGS = -std=c++11 -g -O0 -fsanitize=address -Wall -I../..
-
-all:
-	$(CXX) $(CXXFLAGS) 1_stream_known.cpp    ../stream.cpp -o 1_stream_known
-	$(CXX) $(CXXFLAGS) 2_stream_unknown.cpp  ../stream.cpp -o 2_stream_unknown
-	$(CXX) $(CXXFLAGS) 3_buffer_known.cpp    ../buffer.cpp -o 3_buffer_known
-	$(CXX) $(CXXFLAGS) 4_buffer_unknown.cpp  ../buffer.cpp -o 4_buffer_unknown
-	$(CXX) $(CXXFLAGS) 5_stream_failtest.cpp ../stream.cpp -o 5_stream_failtest
-	$(CXX) $(CXXFLAGS) 6_buffer_failtest.cpp ../buffer.cpp -o 6_buffer_failtest
-	./1_stream_known
-	./2_stream_unknown
-	./3_buffer_known
-	./4_buffer_unknown
-	./5_stream_failtest
-	./6_buffer_failtest
-
-clean:
-	rm -f 1_stream_known 2_stream_unknown 3_buffer_known 4_buffer_unknown \
-	      5_stream_failtest 6_buffer_failtest
diff --git a/buffer.h b/include/tscpp/buffer.h
similarity index 100%
rename from buffer.h
rename to include/tscpp/buffer.h
diff --git a/stream.h b/include/tscpp/stream.h
similarity index 100%
rename from stream.h
rename to include/tscpp/stream.h
diff --git a/buffer.cpp b/src/tscpp/buffer.cpp
similarity index 99%
rename from buffer.cpp
rename to src/tscpp/buffer.cpp
index 2b484173643202b7a0fa39a2132ca09050072302..07f24c94e28a62b8ab1ca41b7cd6fcc6126a904d 100644
--- a/buffer.cpp
+++ b/src/tscpp/buffer.cpp
@@ -25,7 +25,7 @@
  *   along with this program; if not, see <http://www.gnu.org/licenses/>   *
  ***************************************************************************/
 
-#include "buffer.h"
+#include <tscpp/buffer.h>
 
 using namespace std;
 
diff --git a/stream.cpp b/src/tscpp/stream.cpp
similarity index 99%
rename from stream.cpp
rename to src/tscpp/stream.cpp
index f9df3f4066c1cf59eaea880653ad5c51cf6770a2..6f1c33cbba38d47a8080587fab4440182aae63f8 100644
--- a/stream.cpp
+++ b/src/tscpp/stream.cpp
@@ -25,7 +25,7 @@
  *   along with this program; if not, see <http://www.gnu.org/licenses/>   *
  ***************************************************************************/
 
-#include "stream.h"
+#include <tscpp/stream.h>
 #include <memory>
 #if defined(__GNUC__) && !defined(_MIOSIX)
 #include <cxxabi.h>