diff --git a/devel/superhtml/Makefile b/devel/superhtml/Makefile
index 2e1469834482..c1e0d6f8a384 100644
--- a/devel/superhtml/Makefile
+++ b/devel/superhtml/Makefile
@@ -1,30 +1,25 @@
PORTNAME= superhtml
DISTVERSIONPREFIX= v
-DISTVERSION= 0.6.2
+DISTVERSION= 0.7.0
CATEGORIES= devel
MAINTAINER= dave@freedave.net
COMMENT= HTML Validator, Formatter and LSP
WWW= https://zine-ssg.io/docs/superhtml
LICENSE= MIT
LICENSE_FILE= ${WRKSRC}/LICENSE
-USES= zig:015
+USES= zig
USE_GITHUB= yes
GH_ACCOUNT= kristoff-it
GH_PROJECT= ${PORTNAME}
PLIST_FILES= bin/superhtml
-ZIG_TUPLE= known_folders:github.com/ziglibs/known-folders/archive/ab5cf5feb936fa3b72c95d3ad0c0c6779.tar.gz:known_folders-0.0.0-Fy-PJtTTAADUOhGKM0sxzG4eMkNQxRvx9e5dfHVyaeA3 \
- lsp_kit:github.com/zigtools/lsp-kit/archive/fe98e895ca3bd1b39965ab30f0f252f7b.tar.gz:lsp_kit-0.1.0-bi_PLzAyCgClDh8_M0U9Q50ysdsQBuRuBTZfwg6rZPd6 \
- scripty:github.com/kristoff-it/scripty/archive/50dbab8945440089384f26ec165d870c2.tar.gz:scripty-0.1.0-LKK5O7v4AADWWXuFcTJky_5sY12tmw3kRi3k2wkpfxAX \
- tracy:github.com/kristoff-it/tracy/archive/67d2d89e351048c76fc6d161e0ac09d8a.tar.gz:tracy-0.0.0-4Xw-1pwwAABTfMgoDP1unCbZDZhJEfict7XCBGF6IdIn
-
# `make WITH_DEBUG=yes test` to test against debug build
do-test:
cd ${BUILD_WRKSRC} && ${DO_MAKE_BUILD:S/build/build test --summary all/}
.include
diff --git a/devel/superhtml/Makefile.zig b/devel/superhtml/Makefile.zig
new file mode 100644
index 000000000000..ac16ab9708a8
--- /dev/null
+++ b/devel/superhtml/Makefile.zig
@@ -0,0 +1,10 @@
+# XXX These are modified from actual versions used by 0.7.0
+# They are as close as we can get while still using zig 0.16.x instead of
+# zig 0.17.0-dev (not available in ports ... yet)
+ZIG_TUPLE= AFLplusplus:github.com/AFLplusplus/AFLplusplus/archive/v4.21c.tar.gz:N-V-__8AAKE4uAAJZgEcPdaXnWqoj-IwYf3G2h9YSm-x92gg \
+ AFLplusplus:github.com/allyourcodebase/AFLplusplus/archive/7e65eb4262688a120bf830d145060aac0.tar.gz:AFLplusplus-4.21.0-aA1y4dZxAAAhqDy_JoRw3zwNSg8MenEGP7uJI_xNcYuV \
+ afl_kit:github.com/kristoff-it/zig-afl-kit/archive/395c39d5b33d999f6871a90bd731ec112.tar.gz:afl_kit-0.1.0-NdJ3ch8eAABQkd1wk2W-JDCvvX5Jmnu3uJulS3lPepG7 \
+ known_folders:github.com/ziglibs/known-folders/archive/207c34a16e4365edc20d92c7892f962b3.tar.gz:known_folders-0.0.0-Fy-PJsbKAACbDh9bBxR0MMThxZSS6A9RH4apWphNHY70 \
+ lsp_kit:github.com/zigtools/lsp-kit/archive/cf0ff08ac00301859656bbd4a5af6fcb8.tar.gz:lsp_kit-0.1.0-bi_PL8cxDAAxREwBYHZFTGG2xVuzAjgnZPMmwiajkFu0 \
+ scripty:github.com/kristoff-it/scripty/archive/77f2eac9d31ea9b8eb9eec494b2c0a318.tar.gz:scripty-0.1.0-LKK5O6wTAQC9Z751KlmpGsHLadbbNYXA7vrdGesxSZl- \
+ tracy:github.com/kristoff-it/tracy/archive/67d2d89e351048c76fc6d161e0ac09d8a.tar.gz:tracy-0.0.0-4Xw-1pwwAABTfMgoDP1unCbZDZhJEfict7XCBGF6IdIn
diff --git a/devel/superhtml/distinfo b/devel/superhtml/distinfo
index f7a2b343fd36..ed6c6c8f3208 100644
--- a/devel/superhtml/distinfo
+++ b/devel/superhtml/distinfo
@@ -1,11 +1,17 @@
-TIMESTAMP = 1773684846
-SHA256 (zig/ab5cf5feb936fa3b72c95d3ad0c0c6779.tar.gz) = 55a2380907da5e30a3a9991d73d5b4a1372a2c2bd508da4dad96c127a10625e9
-SIZE (zig/ab5cf5feb936fa3b72c95d3ad0c0c6779.tar.gz) = 12569
-SHA256 (zig/fe98e895ca3bd1b39965ab30f0f252f7b.tar.gz) = 46c57bad1922899bfae68e2d30a363061242dc2e808d6f27fc92ea8fe74c92db
-SIZE (zig/fe98e895ca3bd1b39965ab30f0f252f7b.tar.gz) = 100656
-SHA256 (zig/50dbab8945440089384f26ec165d870c2.tar.gz) = 18325156728c48236270812947b4a1d24f9767899c771ddd21bfdb99b581fd30
-SIZE (zig/50dbab8945440089384f26ec165d870c2.tar.gz) = 12473
+TIMESTAMP = 1781102610
+SHA256 (zig/v4.21c.tar.gz) = 11f7c77d37cff6e7f65ac7cc55bab7901e0c6208e845a38764394d04ed567b30
+SIZE (zig/v4.21c.tar.gz) = 3004235
+SHA256 (zig/7e65eb4262688a120bf830d145060aac0.tar.gz) = ed670033d925563091323622e465665540abedce999552b7bf04ffd0e2bc050f
+SIZE (zig/7e65eb4262688a120bf830d145060aac0.tar.gz) = 7271
+SHA256 (zig/395c39d5b33d999f6871a90bd731ec112.tar.gz) = 573ce3455468311df43ffa573d6049593d558076b74e8203327eabeca10fca1c
+SIZE (zig/395c39d5b33d999f6871a90bd731ec112.tar.gz) = 6165
+SHA256 (zig/207c34a16e4365edc20d92c7892f962b3.tar.gz) = 03fb841c2debc62c90c600f7e32d9ea21a106e79215114eec705b604d142fce8
+SIZE (zig/207c34a16e4365edc20d92c7892f962b3.tar.gz) = 11867
+SHA256 (zig/cf0ff08ac00301859656bbd4a5af6fcb8.tar.gz) = cfd0570290d2e2fbab0a1ce2197c635367fe1c1b2ad6cb6300682bd95a0e359a
+SIZE (zig/cf0ff08ac00301859656bbd4a5af6fcb8.tar.gz) = 119385
+SHA256 (zig/77f2eac9d31ea9b8eb9eec494b2c0a318.tar.gz) = 5f7ead4c7cedf2e9d63994de09f7332fd58d6f6cdce54b4a2b497564c06e7f61
+SIZE (zig/77f2eac9d31ea9b8eb9eec494b2c0a318.tar.gz) = 15487
SHA256 (zig/67d2d89e351048c76fc6d161e0ac09d8a.tar.gz) = a54d405e7ffadcc5f2e441b361226666e61df1acf3ac18045f2771df0cf26b3f
SIZE (zig/67d2d89e351048c76fc6d161e0ac09d8a.tar.gz) = 3933
-SHA256 (zig/kristoff-it-superhtml-v0.6.2_GH0.tar.gz) = 431d7189501e1b2e8da53c3ca8d6e7f1c642b523f3715c21cb8bfd2f8eef3971
-SIZE (zig/kristoff-it-superhtml-v0.6.2_GH0.tar.gz) = 2639671
+SHA256 (zig/kristoff-it-superhtml-v0.7.0_GH0.tar.gz) = 92b2b76e6a38ac0aa2e10fe13ce4131366c2f1bb3d13131687aa8a2df82de82a
+SIZE (zig/kristoff-it-superhtml-v0.7.0_GH0.tar.gz) = 2665596
diff --git a/devel/superhtml/files/patch-build.zig b/devel/superhtml/files/patch-build.zig
new file mode 100644
index 000000000000..6cc167344602
--- /dev/null
+++ b/devel/superhtml/files/patch-build.zig
@@ -0,0 +1,30 @@
+--- build.zig.orig 2026-06-09 15:40:29 UTC
++++ build.zig
+@@ -228,7 +228,7 @@ fn setupCliTool(
+ super_cli.root_module.addOptions("build_options", options);
+
+ const run_exe = b.addRunArtifact(super_cli);
+- run_exe.addPassthruArgs();
++ if (b.args) |args| run_exe.addArgs(args);
+ const run_exe_step = b.step("run", "Run the SuperHTML CLI");
+ run_exe_step.dependOn(&run_exe.step);
+
+@@ -429,14 +429,14 @@ fn getGitVersion(b: *std.Build) Version {
+ };
+
+ fn getGitVersion(b: *std.Build) Version {
+- const git_path = b.findProgram(.{ .names = &.{"git"} }) orelse return .unknown;
++ const git_path = b.findProgram(&.{"git"}, &.{}) catch return .unknown;
+ var out: u8 = undefined;
+ const git_describe = std.mem.trim(
+ u8,
+ b.runAllowFail(&[_][]const u8{
+- git_path, "-C",
+- b.root.root_dir.path.?, "describe",
+- "--match", "*.*.*",
++ git_path, "-C",
++ b.build_root.path.?, "describe",
++ "--match", "*.*.*",
+ "--tags",
+ }, &out, .ignore) catch return .unknown,
+ " \n\r",
diff --git a/devel/superhtml/files/patch-build.zig.zon b/devel/superhtml/files/patch-build.zig.zon
new file mode 100644
index 000000000000..a42ab484ce63
--- /dev/null
+++ b/devel/superhtml/files/patch-build.zig.zon
@@ -0,0 +1,28 @@
+--- build.zig.zon.orig 2026-06-10 13:55:24 UTC
++++ build.zig.zon
+@@ -2,7 +2,7 @@
+ .name = .superhtml,
+ .version = "0.7.0",
+ .fingerprint = 0xc5e9aede3c1db363,
+- .minimum_zig_version = "0.17.0-dev.702+18b3c78a9",
++ .minimum_zig_version = "0.16.0",
+ .dependencies = .{
+ .known_folders = .{
+ .url = "git+https://github.com/ziglibs/known-folders#207c34a16e4365edc20d92c7892f962b3bed46e8",
+@@ -13,12 +13,12 @@
+ .hash = "tracy-0.0.0-4Xw-1pwwAABTfMgoDP1unCbZDZhJEfict7XCBGF6IdIn",
+ },
+ .lsp_kit = .{
+- .url = "git+https://github.com/zigtools/lsp-kit#dcbb8dd686d85a8f178a4389e730d41dd727b991",
+- .hash = "lsp_kit-0.1.0-bi_PL2UzDADxFRnnSjhhN7-ZTi9fDMom827yIp_ptc8l",
++ .url = "git+https://github.com/zigtools/lsp-kit#cf0ff08ac00301859656bbd4a5af6fcb889497e4",
++ .hash = "lsp_kit-0.1.0-bi_PL8cxDAAxREwBYHZFTGG2xVuzAjgnZPMmwiajkFu0",
+ },
+ .scripty = .{
+- .url = "git+https://github.com/kristoff-it/scripty#ad75ad546bc7dd2ece4acd23404e25cd65a4bde9",
+- .hash = "scripty-0.1.0-LKK5O-sUAQDifuGq_k00NAdEgJjNxXoFTt9js_A7Yx4F",
++ .url = "git+https://github.com/kristoff-it/scripty#77f2eac9d31ea9b8eb9eec494b2c0a318bfe4ec6",
++ .hash = "scripty-0.1.0-LKK5O6wTAQC9Z751KlmpGsHLadbbNYXA7vrdGesxSZl-",
+ },
+ .afl_kit = .{
+ .url = "git+https://github.com/kristoff-it/zig-afl-kit#e9b5dfc14c06133786a09214709316dc9fb54bd9",
diff --git a/devel/superhtml/files/patch-src_template.zig b/devel/superhtml/files/patch-src_template.zig
new file mode 100644
index 000000000000..4051e55f76b9
--- /dev/null
+++ b/devel/superhtml/files/patch-src_template.zig
@@ -0,0 +1,17 @@
+--- src/template.zig.orig 2026-06-09 15:40:29 UTC
++++ src/template.zig
+@@ -1233,12 +1233,12 @@ pub fn SuperTemplate(comptime ScriptyVM: type) type {
+ }
+
+ pub fn setContext(tpl: Template, script_ctx: RootRef) void {
+- script_ctx.loop = if (tpl.loop_stack.getLast()) |last|
++ script_ctx.loop = if (tpl.loop_stack.getLastOrNull()) |last|
+ last.iterator
+ else
+ null;
+
+- script_ctx.@"if" = if (tpl.if_stack.getLast()) |last|
++ script_ctx.@"if" = if (tpl.if_stack.getLastOrNull()) |last|
+ last.value
+ else
+ null;