The Swift HTML library built on swift-standards.
swift-html is a unified import for type-safe HTML generation. It re-exports swift-html-rendering, swift-css, swift-svg, and related packages—all grounded in swift-standards for domain-accurate representations of WHATWG and W3C specifications.
Add swift-html to your Package.swift:
dependencies: [ .package(url: "https://github.com/coenttb/swift-html", from: "0.1.0") ]
Add to your target:
.target( name: "YourTarget", dependencies: [ .product(name: "HTML", package: "swift-html"), ] )
- Swift 6.2+
- macOS 26.0+, iOS 26.0+
- Xcode 26.0+ (for Apple platforms)
import HTML let page = HTML.Document { div { h1 { "Welcome" } .css .color(.blue) .fontSize(.px(24)) p { "Type-safe HTML with CSS" } .css.color(light: .gray900, dark: .gray100) } } let html = try String(page)
div { "Content" } h1 { "Heading" } p { "Paragraph" } a(href: "/path") { "Link" } button { "Click me" }
div { "Styled" } .css .display(.flex) .padding(.px(16)) .backgroundColor(.white) .borderRadius(.px(8))
// Automatic light/dark variants div { "Adaptive" } .css .color(light: .gray900, dark: .gray100) .backgroundColor(light: .white, dark: .hex("1a1a1a")) // Theme colors (auto-adaptive) div { "Themed" } .css.color(.blue) // DarkModeColor with light/dark variants
HStack(alignment: .top, spacing: .px(16)) { div { "Left" } Spacer() div { "Right" } } VStack(alignment: .start, spacing: .px(12)) { h2 { "Title" } p { "Content" } } LazyVGrid(columns: [1, 2, 1]) { div { "A" } div { "B" } div { "C" } }
struct Card: HTML.View { let title: String let content: String var body: some HTML.View { div { h3 { title } p { content } } .css .padding(.px(24)) .backgroundColor(.white) .borderRadius(.px(8)) } } // Usage Card(title: "Hello", content: "World")
div { "Responsive" } .css .display(.block) .media(.minWidth(.px(768))) { 0ドル.display(.flex) }
InlineSVG { svg(width: 100, height: 100) { circle(cx: 50, cy: 50, r: 40) .fill("red") .stroke("black") .strokeWidth(3) } } // Raw SVG string svg("<svg width=\"50\" height=\"50\"><circle cx=\"25\" cy=\"25\" r=\"20\" fill=\"blue\"/></svg>") // SVG as data URI in img tag img(svg: svgContent, alt: "Icon", base64: false)
// To string (minified by default) let html = try String(document) // Pretty-printed try HTML.Context.Configuration.$current.withValue(.pretty) { let pretty = try String(document) } // To bytes let bytes = [UInt8](document)
┌─────────────────────────────────────────────────────────────┐
│ swift-html │
│ (unified re-export) │
├─────────────────────────────────────────────────────────────┤
│ swift-html-rendering │ swift-css │ swift-svg │ ... │
│ (HTML.View, Document) │ (.css API) │ (SVG DSL) │ │
├─────────────────────────────────────────────────────────────┤
│ swift-standards (CSS Standard, Color, etc.) │
└─────────────────────────────────────────────────────────────┘
Re-exported modules:
| Module | Purpose |
|---|---|
HTML_Rendering |
Core HTML.View protocol and rendering |
CSS |
Fluent CSS API with dark mode |
CSS_Theming |
Theme system with semantic colors |
SVG |
Type-safe SVG generation |
Markdown_HTML_Rendering |
Markdown to HTML |
Standards |
Layout, geometry types |
| Feature | Description |
|---|---|
| Type-safe HTML | HTML5 elements with compile-time validation |
| Fluent CSS | .css.display(.flex).padding(.px(16)) chaining |
| Dark mode | DarkModeColor(light:dark:) with automatic media queries |
| Theming | Semantic color system (.text.primary, .background.elevated) |
| Layout | HStack, VStack, Spacer, LazyVGrid components |
| SVG | Inline SVG with type-safe elements |
| Media queries | .media(.minWidth(.px(768))) { ... } |
| Rendering | Single-pass byte rendering, pretty-print option |
| i18n (optional) | TranslatedString support via "Translating" trait |
Enable internationalization support:
// Package.swift dependencies: [ .package(url: "https://github.com/coenttb/swift-html", from: "0.1.0", traits: ["Translating"]) ]
Usage:
import HTML import Translating let greeting = TranslatedString( dutch: "Welkom", english: "Welcome" ) h1 { greeting }
- Swift 6.2+
- macOS 26.0+, iOS 26.0+, tvOS 26.0+, watchOS 26.0+
- Xcode 26.0+ (for Apple platforms)
Apache 2.0 - See LICENSE for details.