/slipstream

It's like SwiftUI for the web. Build static sites with Swift and Tailwind CSS.

Primary LanguageSwiftMIT LicenseMIT

Tailwind CSS

Build static web pages with Swift and Tailwind CSS.

Build Status License


Slipstream is a static site generator built for Swift developers.

Usage

Clone the Slipstream Site Template for a quick-start to deploying a Slipstream site to GitHub Pages.

Create an executable Swift package

mkdir mysite
cd mysite
swift package init --type executable

Add Slipstream to your package dependencies

Slipstream requires macOS 14.

platforms: [
  .macOS("14"),
],
dependencies: [
  .package(url: "https://github.com/jverkoey/slipstream.git", branch: "main"),
],
targets: [
  .executableTarget(name: "mysite", dependencies: [
    .product(name: "Slipstream", package: "slipstream"),
  ]
],

And off you go:

import Foundation
import Slipstream

struct HelloWorld: View {
  var body: some View {
    Text("Hello, world!")
  }
}

print(try renderHTML(HelloWorld()))

Render a sitemap

Slipstream intentionally avoids making strong opinions about how your documents should be structured and written to disk. To help get you started though you can use Slipstream's lightweight sitemap renderer to write a dictionary of Slipstream views to disk:

import Foundation
import Slipstream

struct HelloWorld: View {
  var body: some View {
    Text("Hello, world!")
  }
}

let sitemap: Sitemap = [
  "index.html": HelloWorld()
]

// Assumes this file is located in a Sources/ sub-directory of a Swift package.
guard let projectURL = URL(filePath: #filePath)?
  .deletingLastPathComponent()
  .deletingLastPathComponent() else {
  print("Unable to create URL for \(#filePath)")
  exit(1)
}

let outputURL = projectURL.appending(path: "site")

try renderSitemap(sitemap, to: outputURL)

Documentation

View Slipstream's complete documentation.

Community

To discuss Slipstream-related topics with other Slipstreamers, ask questions, or explore ideas, please use GitHub discussions.