diff --git a/Tribufu.sln b/Tribufu.sln
index a32fcda..3cbe010 100644
--- a/Tribufu.sln
+++ b/Tribufu.sln
@@ -1,12 +1,16 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tribufu.Sdk", "src\Tribufu.Sdk\Tribufu.Sdk.csproj", "{C66D6B57-324D-EAF2-3B65-75C9A7C35054}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tribufu.Native", "src\Tribufu.Native\Tribufu.Native.csproj", "{C66D6B57-324D-EAF2-3B65-75C9A7C35054}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tribufu.Serialization", "src\Tribufu.Serialization\Tribufu.Serialization.csproj", "{322FE36B-9E9B-9E66-678F-36C4D3BAC0CE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tribufu.Serialization.Newtonsoft", "src\Tribufu.Serialization.Newtonsoft\Tribufu.Serialization.Newtonsoft.csproj", "{B7019B7B-A352-86BD-CCB6-747FB8661927}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tribufu", "src\Tribufu\Tribufu.csproj", "{7B7890D8-863A-4F1D-98C0-4B7D8C46CB52}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tribufu.Utils", "src\Tribufu.Utils\Tribufu.Utils.csproj", "{8F16FBBB-199E-4EE3-BFF3-31DD6F84DCD0}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -25,6 +29,14 @@ Global
{B7019B7B-A352-86BD-CCB6-747FB8661927}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B7019B7B-A352-86BD-CCB6-747FB8661927}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B7019B7B-A352-86BD-CCB6-747FB8661927}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7B7890D8-863A-4F1D-98C0-4B7D8C46CB52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7B7890D8-863A-4F1D-98C0-4B7D8C46CB52}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7B7890D8-863A-4F1D-98C0-4B7D8C46CB52}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7B7890D8-863A-4F1D-98C0-4B7D8C46CB52}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8F16FBBB-199E-4EE3-BFF3-31DD6F84DCD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8F16FBBB-199E-4EE3-BFF3-31DD6F84DCD0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8F16FBBB-199E-4EE3-BFF3-31DD6F84DCD0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8F16FBBB-199E-4EE3-BFF3-31DD6F84DCD0}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/src/Tribufu.Sdk/README.md b/src/Tribufu.Native/README.md
similarity index 100%
rename from src/Tribufu.Sdk/README.md
rename to src/Tribufu.Native/README.md
diff --git a/src/Tribufu.Native/Tribufu.Native.csproj b/src/Tribufu.Native/Tribufu.Native.csproj
new file mode 100644
index 0000000..9026066
--- /dev/null
+++ b/src/Tribufu.Native/Tribufu.Native.csproj
@@ -0,0 +1,28 @@
+
+
+ Tribufu.Native
+ 0.1.0
+ Tribufu Native Interop
+ Tribufu
+ Tribufu
+ README.md
+ MIT
+ Copyright (c) Tribufu. All Rights Reserved.
+ git
+ https://github.com/Tribufu/TribufuNet
+
+
+ Library
+ Properties
+ netstandard2.0;net45;net5.0
+ true
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Tribufu.Native/TribufuNative.cs b/src/Tribufu.Native/TribufuNative.cs
new file mode 100644
index 0000000..d17a9ff
--- /dev/null
+++ b/src/Tribufu.Native/TribufuNative.cs
@@ -0,0 +1,13 @@
+// Copyright (c) Tribufu. All Rights Reserved.
+// SPDX-License-Identifier: MIT
+
+using System.Runtime.InteropServices;
+
+namespace Tribufu.Native
+{
+ public class TribufuNative
+ {
+ [DllImport("tribufu_sdk")]
+ public static extern void tribufu_sdk_shutdown();
+ }
+}
diff --git a/src/Tribufu.Utils/README.md b/src/Tribufu.Utils/README.md
new file mode 100644
index 0000000..54c1ab5
--- /dev/null
+++ b/src/Tribufu.Utils/README.md
@@ -0,0 +1 @@
+# Tribufu
diff --git a/src/Tribufu.Utils/Tribufu.Utils.csproj b/src/Tribufu.Utils/Tribufu.Utils.csproj
new file mode 100644
index 0000000..21cab74
--- /dev/null
+++ b/src/Tribufu.Utils/Tribufu.Utils.csproj
@@ -0,0 +1,25 @@
+
+
+ Tribufu.Utils
+ 0.1.0
+ Tribufu Utils
+ Tribufu
+ Tribufu
+ README.md
+ MIT
+ Copyright (c) Tribufu. All Rights Reserved.
+ git
+ https://github.com/Tribufu/TribufuNet
+
+
+ Library
+ Properties
+ net5.0
+ true
+
+
+
+
+
+
+
diff --git a/src/Tribufu.Utils/TribufuAppContext.cs b/src/Tribufu.Utils/TribufuAppContext.cs
new file mode 100644
index 0000000..c8a9ac4
--- /dev/null
+++ b/src/Tribufu.Utils/TribufuAppContext.cs
@@ -0,0 +1,79 @@
+// Copyright (c) Tribufu. All Rights Reserved.
+// SPDX-License-Identifier: MIT
+
+using System;
+using System.IO;
+using System.Runtime.InteropServices;
+
+namespace Tribufu.Utils
+{
+ public static class TribufuAppContext
+ {
+ public static string GetBaseDirectory()
+ {
+ string defaultBaseDirectory = AppContext.BaseDirectory;
+ string baseDirectory;
+
+ if (defaultBaseDirectory.Contains("Debug") || defaultBaseDirectory.Contains("Release"))
+ {
+ baseDirectory = Path.Combine(defaultBaseDirectory, "..", "..", "..", "..", "..");
+ }
+ else
+ {
+ baseDirectory = Path.Combine(defaultBaseDirectory, "..", "..");
+ }
+
+ baseDirectory = Path.GetFullPath(baseDirectory);
+
+ return baseDirectory;
+ }
+
+ public static string GetBinDirectory()
+ {
+ var binDirectory = Path.Combine(GetBaseDirectory(), "bin");
+
+ switch (RuntimeInformation.RuntimeIdentifier)
+ {
+ case "win-x64":
+ binDirectory = Path.Combine(binDirectory, "windows-x86_64");
+ break;
+ case "osx-x64":
+ binDirectory = Path.Combine(binDirectory, "mac-x86_64");
+ break;
+ case "linux-x64":
+ binDirectory = Path.Combine(binDirectory, "linux-x86_64");
+ break;
+ default:
+ binDirectory = Path.Combine(binDirectory, "dotnet");
+ break;
+ }
+
+ return binDirectory;
+ }
+
+ public static string GetConfigDirectory()
+ {
+ return Path.Combine(GetBaseDirectory(), "config");
+ }
+
+ public static string GetAssetsDirectory()
+ {
+ return Path.Combine(GetBaseDirectory(), "assets");
+ }
+
+ public static string GetSavedDirectory()
+ {
+ return Path.Combine(GetBaseDirectory(), "saved");
+ }
+
+ public static string GetCacheDirectory()
+ {
+ return Path.Combine(GetSavedDirectory(), "cache");
+ }
+
+ public static string GetLogsDirectory()
+ {
+ return Path.Combine(GetSavedDirectory(), "logs");
+ }
+ }
+}
diff --git a/src/Tribufu/README.md b/src/Tribufu/README.md
new file mode 100644
index 0000000..54c1ab5
--- /dev/null
+++ b/src/Tribufu/README.md
@@ -0,0 +1 @@
+# Tribufu
diff --git a/src/Tribufu.Sdk/Tribufu.Sdk.csproj b/src/Tribufu/Tribufu.csproj
similarity index 89%
rename from src/Tribufu.Sdk/Tribufu.Sdk.csproj
rename to src/Tribufu/Tribufu.csproj
index 7ccc69b..78943fd 100644
--- a/src/Tribufu.Sdk/Tribufu.Sdk.csproj
+++ b/src/Tribufu/Tribufu.csproj
@@ -17,6 +17,9 @@
netstandard2.0;net45;net5.0
true
+
+
+
diff --git a/vendor/windows-aarch64/tribufu_sdk.dll b/vendor/windows-aarch64/tribufu_sdk.dll
new file mode 100644
index 0000000..11fd96a
Binary files /dev/null and b/vendor/windows-aarch64/tribufu_sdk.dll differ
diff --git a/vendor/windows-i686/tribufu_sdk.dll b/vendor/windows-i686/tribufu_sdk.dll
new file mode 100644
index 0000000..a0b5a82
Binary files /dev/null and b/vendor/windows-i686/tribufu_sdk.dll differ
diff --git a/vendor/windows-x86_64/tribufu_sdk.dll b/vendor/windows-x86_64/tribufu_sdk.dll
new file mode 100644
index 0000000..f16e71b
Binary files /dev/null and b/vendor/windows-x86_64/tribufu_sdk.dll differ