diff --git a/Maybe.Toolkit.Demo/Maybe.Toolkit.Demo.csproj b/Maybe.Toolkit.Demo/Maybe.Toolkit.Demo.csproj
new file mode 100644
index 0000000..99de62d
--- /dev/null
+++ b/Maybe.Toolkit.Demo/Maybe.Toolkit.Demo.csproj
@@ -0,0 +1,15 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Maybe.Toolkit.Demo/Program.cs b/Maybe.Toolkit.Demo/Program.cs
new file mode 100644
index 0000000..475c3fa
--- /dev/null
+++ b/Maybe.Toolkit.Demo/Program.cs
@@ -0,0 +1,261 @@
+using System.Text.Json;
+using Maybe;
+using Maybe.Toolkit;
+
+namespace Maybe.Toolkit.Demo;
+
+public static class Program
+{
+ public static async Task Main()
+ {
+ Console.WriteLine("=== Maybe Toolkit Demo ===\n");
+
+ await DemoJsonToolkit();
+ Console.WriteLine();
+
+ await DemoFileToolkit();
+ Console.WriteLine();
+
+ DemoParseToolkit();
+ Console.WriteLine();
+
+ await DemoHttpToolkit();
+ Console.WriteLine();
+
+ DemoCollectionToolkit();
+ Console.WriteLine();
+
+ Console.WriteLine("=== Demo Complete ===");
+ }
+
+ private static async Task DemoJsonToolkit()
+ {
+ Console.WriteLine("--- JSON Toolkit Demo ---");
+
+ // Success case
+ var person = new { Name = "John Doe", Age = 30, City = "New York" };
+ var serializeResult = JsonToolkit.TrySerialize(person);
+
+ serializeResult
+ .IfSome(json => Console.WriteLine($"✓ Serialized: {json}"))
+ .ElseDo(error => Console.WriteLine($"✗ Serialization failed: {error.Message}"));
+
+ if (serializeResult.IsSuccess)
+ {
+ var json = serializeResult.ValueOrThrow();
+ var deserializeResult = JsonToolkit.TryDeserialize(json);
+
+ deserializeResult
+ .IfSome(obj => Console.WriteLine($"✓ Deserialized successfully"))
+ .ElseDo(error => Console.WriteLine($"✗ Deserialization failed: {error.Message}"));
+ }
+
+ // Error case
+ var invalidJson = "{\"Name\":\"John\",\"Age\":}";
+ JsonToolkit.TryDeserialize