Lukáš Lalinský가 Zig 언어 생태계를 위한 새로운 HTML 템플릿 라이브러리인 zt를 공개했다. 그는 지난 2000년대 초부터 PHP와 Perl 등 다양한 웹 개발 환경을 경험한 베테랑 개발자다. 최근 몇 년간 Zig 언어로 API 백엔드를 구축하던 중 저수준 언어에서도 웹 개발이 가능하다는 점을 확인하고 이를 구체화했다.

zt는 Go 언어의 Templ 라이브러리를 모델로 삼아 설계됐다. 가장 큰 특징은 컴파일 타임에 모든 입력값의 타입을 엄격하게 검사한다는 점이다. 런타임 오류를 줄이기 위해 동적 언어에서의 불편함을 제거하려는 의도가 담겼다.

템플릿 코드는 빌드 시점에 Zig 코드로 변환된다. 따라서 오타나 잘못된 변수 참조는 일반적인 Zig 컴파일러 오류로 즉시 드러난다.

성능 측면에서는 메모리 할당을 최소화하는 방식을 채택했다. 중간 상태를 거치지 않고 std.Io.Writer로 직접 출력을 쓴다. 이는 Zig의 아레나 할당자 특성을 활용해 문자열 처리 부담을 낮추기 위함이다.

보안 면에서는 기본 설정으로 모든 입력값이 HTML 이스케이프 처리된다. XSS 공격 위험을 원천 차단하기 위한 장치다.

raw HTML 출력이 필요한 경우에만 {!value} 문법으로 명시적으로 허용해야 한다. href나 src 같은 URL 속성은 위험한 스킴 사용을 점검한다. 태그 닫힘 여부도 파서 단계에서 강제한다.

이러한 제약 조건들은 마크업 손상을 방지하고 안전한 렌더링을 보장한다.

커뮤니티 반응은 Rust의 rsx 매크로나 Kotlin의 kotlinx.html 등 다른 언어의 유사 접근법과의 비교로 이어졌다. 일부 사용자는 디버깅 편의성을 위해 실제 코드 내에서 템플릿을 작성하는 DSL 방식도 선호한다고 밝혔다. 하지만 zt는 HTML과 유사한 구문을 유지하면서도 타입 안전성을 확보하는 절충안을 제시했다.

현재 프로젝트는 초기 단계이며 GitHub와 Discord를 통해 피드백을 받고 있다. @if, @for, @switch 같은 제어문 접두사 요구 여부에 대한 디자인 논의가 남아 있다. 순수 텍스트와의 파싱 모호성을 해결하기 위한 고민이다.

이미 소수의 사용자가 활용 중이지만 광범위한 도입 사례는 아직 보고되지 않았다.