diff --git a/.gitignore b/.gitignore
index 3d84f138316f540eda297573c9f4731aa7639cef..beeae30be86cb6092f86254eea9a57d56da74af6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 /target
 /Cargo.lock
-.idea/
\ No newline at end of file
+.idea/
+.cargo
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..b0e679a90bb2513b8b1b06e26ab1cdbfcd2f3798
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,23 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [Unreleased]
+
+### Added
+
+- Conversion methods to construct a TileMatcher or TileLayout from any arbitrarily sized data array. This supports
+both any-lengthed arrays (Though the methods will fail for non-square lengths), and any internal type that can be
+converted to a Tile ID
+
+### Changed
+
+- **[BREAKING]** Swapped parameters of `TileMatcher::single` and `TileMatcher::single_match`, for better semantics
+  - `::single` Now expects one pre-configured rule
+  - `::single_match` Now expects a tile ID that will be converted to an exact match rule
+- **[BREAKING]** `TileLayout` and `TileMatcher` now internally use a 7x7 grid instead of 3x3. This change
+is only breaking if you directly accessed the internally stored data grid, or constructed an instance directly
+without using one of the constructor methods
\ No newline at end of file