diff --git a/Nightborn.L0.sln b/Nightborn.L0.sln
new file mode 100644
index 0000000..a1faa7c
--- /dev/null
+++ b/Nightborn.L0.sln
@@ -0,0 +1,27 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31903.59
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{C3AD2FCF-F06D-48D2-8A84-2D8E73352FAD}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nightborn.Core", "src\Nightborn.Core\Nightborn.Core.csproj", "{A1AFC50B-D6E5-4542-874A-2C911D6D3FE9}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A1AFC50B-D6E5-4542-874A-2C911D6D3FE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A1AFC50B-D6E5-4542-874A-2C911D6D3FE9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A1AFC50B-D6E5-4542-874A-2C911D6D3FE9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A1AFC50B-D6E5-4542-874A-2C911D6D3FE9}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {A1AFC50B-D6E5-4542-874A-2C911D6D3FE9} = {C3AD2FCF-F06D-48D2-8A84-2D8E73352FAD}
+ EndGlobalSection
+EndGlobal
diff --git a/src/Nightborn.Core/Combat/.gitkeep b/src/Nightborn.Core/Combat/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/Nightborn.Core/CoreModule.cs b/src/Nightborn.Core/CoreModule.cs
new file mode 100644
index 0000000..58763b0
--- /dev/null
+++ b/src/Nightborn.Core/CoreModule.cs
@@ -0,0 +1,9 @@
+namespace Nightborn.Core
+{
+ ///
+ /// Marker type for the L0 pure C# core assembly.
+ ///
+ public static class CoreModule
+ {
+ }
+}
diff --git a/src/Nightborn.Core/Enemy/.gitkeep b/src/Nightborn.Core/Enemy/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/Nightborn.Core/Geometry/.gitkeep b/src/Nightborn.Core/Geometry/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/Nightborn.Core/Meta/.gitkeep b/src/Nightborn.Core/Meta/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/Nightborn.Core/Nightborn.Core.csproj b/src/Nightborn.Core/Nightborn.Core.csproj
new file mode 100644
index 0000000..9e01aa0
--- /dev/null
+++ b/src/Nightborn.Core/Nightborn.Core.csproj
@@ -0,0 +1,8 @@
+
+
+ netstandard2.0
+ 9.0
+ enable
+ disable
+
+
diff --git a/src/Nightborn.Core/Persistence/.gitkeep b/src/Nightborn.Core/Persistence/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/Nightborn.Core/Player/.gitkeep b/src/Nightborn.Core/Player/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/Nightborn.Core/Progression/.gitkeep b/src/Nightborn.Core/Progression/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/src/Nightborn.Core/README.md b/src/Nightborn.Core/README.md
new file mode 100644
index 0000000..e74983d
--- /dev/null
+++ b/src/Nightborn.Core/README.md
@@ -0,0 +1,17 @@
+# Nightborn.Core (L0)
+
+Pure C# core logic layer for Nightborn.
+
+## Target
+- C#: 9.0
+- Target framework: `netstandard2.0`
+- Unity compatibility: usable from Unity projects that consume .NET Standard 2.0 libraries.
+
+## Current module folders
+- Combat
+- Enemy
+- Player
+- Progression
+- Persistence
+- Meta
+- Geometry