diff --git a/src/PlanViewer.Core/Output/HtmlExporter.cs b/src/PlanViewer.Core/Output/HtmlExporter.cs
new file mode 100644
index 0000000..d633038
--- /dev/null
+++ b/src/PlanViewer.Core/Output/HtmlExporter.cs
@@ -0,0 +1,537 @@
+using System.IO;
+using System.Text;
+using System.Web;
+
+namespace PlanViewer.Core.Output;
+
+///
{Encode(stmt.StatementText)}");
+ sb.AppendLine("{Encode(mi.CreateStatement)}");
+ sb.AppendLine("| Name | Type | Compiled | "); + if (hasRuntime) sb.AppendLine("Runtime | "); + sb.AppendLine("
|---|---|---|---|
| {Encode(p.Name)} | "); + sb.AppendLine($"{Encode(p.DataType)} | "); + sb.AppendLine($"{Encode(p.CompiledValue ?? "?")} | "); + if (hasRuntime) + { + var valClass = p.SniffingIssue ? " class=\"sniffing-val\"" : ""; + sb.AppendLine($"{Encode(p.RuntimeValue ?? "")} | "); + } + sb.AppendLine("
{Encode(textOutput)}");
+ sb.AppendLine("