If you had a step that works on the “art” folder and a second step that works on the “articles” folder, the first step would also claim all articles.
2.25.2
21 March 2026
Documentation Changes
Improve documentation
2.25.1
19 March 2026
Bugfixes
Revert sequence and publicationDateInFilename back to free functions
Release 2.25.0 moved sequence and publicationDateInFilename to the Saga namespace, but it turns out this is not nice when you combine this with your own item processors and/or SagaUtils. I’ve now reverted this change. Sorry if you already upgraded to 2.25.0 earlier today!
2.25.0
19 March 2026
New Features
Migrate 5 global functions and one global variable to the Saga namespace
Add built-in support for the slug frontmatter property
Simplify logic and speed up the write step on sites with lots of files (#43 by kevinrenskers)
Simplifies Saga’s internal architecture by removing four internal types (FileContainer, ProcessStep<M>, AnyProcessStep, ItemBox<M>) and replacing them with simpler data structures.
File tracking: FileContainer class replaced by a tuple array [(path: Path, relativePath: Path)] with a Set<Path> for handled state and a [String: String] dict for content hashes.
Pipeline steps: Type-erased wrapper classes replaced by closure pairs (read: ReadStep, write: WriteStep) stored directly on Saga.
Writer context: Writer.run now takes a WriterContext<M> struct instead of 6 individual parameters.
Resource lookup: Per-item linear scan of all files replaced by a precomputed dictionary, resulting in a ~2.5x faster write phase on file-heavy sites (it saves 0.5 seconds on loopwerk.io).
Added a new convenience groupedWriter, a version of partitionedWriter that takes a key path. yearWriter now uses it under the hood.
The public API is unchanged.
2.22.0
11 March 2026
New Features
Add @preconcurrency to silence warnings for Swift 5.10 users
2.21.0
11 March 2026
New Features
Moved to Swift 6
Solved the SendableMetatype warnings for Swift 6 projects.
Add Sendable conformances and @Sendable annotations throughout.
While Saga now uses the Swift 6 toolchain, backwards compatibility with Swift 5 projects is maintained.
Users still on Swift 5 will most likely get warnings about “Converting non-Sendable function value to @Sendable”. This is unfortunate, but it’s not feasible to make Saga compatible and crash-free with Swift 6 while also not introducing these warnings for Swift 5 users. Please upgrade your Package.swift to use swift-tools-version:6.0.
BREAKING CHANGES
Switched from loopwerk/PathKit to loopwerk/SagaPathKit due to name clashes with projects (such as Stencil) that depends on kylef/PathKit. If your code uses import PathKit, you’ll need to change this to import SagaPathKit.
Removed all deprecated methods and properties.
Removed the old watch command. Please use the new saga cli.
2.20.0
10 March 2026
New Features
Add @Sendable annotations and refactor postProcess/reader pipeline
Refactor postProcess to use a postProcessors array, fixing createPage not applying post-processors.
2.19.0
9 March 2026
New Features
Switched from kylef/PathKit to loopwerk/PathKit
The original project seems unmaintained. My fork updated the minimum Swift version to 5.10, added Swift 6 support with Sendable, added Decodable support, and fixed all the unit tests (they didn’t run at all).
2.18.9
9 March 2026
Improvements
Full support for Swift 6
Changes
Updated the minimum Swift version to 5.10
Bugfixes
Restored Swift 5.10 compatibility
Fixed all compiler warnings, both when running in Swift 5 and when using it in a Swift 6 project
Pin swift-asn1 to 1.4.x for Swift 5 compatiblity
Notes
Releases 2.18.1 to 2.18.8 were removed since they all fixed the same issues
2.18.0
5 March 2026
New Features
Added an itemProcessor property to the register(fetch) method
2.17.0
3 March 2026
New Features
Removed the Saga CLI from this package, and into its own repository
This should make dependency resolution quicker for Saga users, pulling in fewer dependencies.
2.16.1
3 March 2026
Bugfixes
Fixed the date formatting as part of the printed log messages
Only depend on swift-crypto when building on Linux; on macOS, the system CryptoKit framework is used (zero compile time)
2.16.0
2 March 2026
New Features
Add postProcess step for transforming written output
Add isDev flag, set SAGA_DEV in dev and watch commands
Add hashed() for cache-busting asset URLs
2.15.0
27 February 2026
Renames
Renamed filteredOutItemsAreHandled to claimExcludedItems. The old version has been marked as deprecated and will be removed in the next major version.
2.14.1
24 February 2026
Bugfixes
Copy the static files before running the write phase, so that we’re sure the static folders exist for use during custom register steps
2.14.0
24 February 2026
New Features
Make it natural to create fully custom register steps (#42 by kevinrenskers)