Releases: atelier-socle/swift-hls-kit
0.6.1 - CI modernization & Swift 6.3 support
What's New
Swift 6.3 CI matrix
The CI now tests against both Swift 6.2 (Xcode 26.2) and Swift 6.3 (Xcode 26.4), ensuring forward compatibility with the latest toolchain. Coverage and Codecov upload run on the 6.2 variant only to avoid duplicates.
GitHub Actions Node 24 migration
All workflow actions have been bumped to their minimum Node 24 versions:
| Action | Before | After |
|---|---|---|
| actions/checkout | v4 | v5 |
| actions/upload-artifact | v4 | v6 |
| actions/download-artifact | v4 | v7 |
| codecov/codecov-action | v5 | v6 |
| softprops/action-gh-release | v2 | v3 |
| actions/upload-pages-artifact | v3 | v4 |
| actions/deploy-pages | v4 | v5 |
Xcode 26.4 for platform builds & release
Platform builds (iOS, tvOS, watchOS, visionOS, Mac Catalyst), DocC deployment, and release binary compilation now use Xcode 26.4 (Swift 6.3).
No breaking changes
Library API, test suite (5,165 tests), and CLI are unchanged. This release is purely infrastructure.
New Contributors
- @Sweefties made their first contribution in #1
Full Changelog: 0.6.0...0.6.1
0.6.0 — HEVC fMP4, Audio Sync Fix & Integer Timestamps
Highlights
This release adds HEVC (H.265) support to the fMP4 live segmenter, fixes a critical audio segment distribution bug, and resolves a floating-point precision issue that inflated EXT-X-TARGETDURATION. All changes have been validated end-to-end with real media files (iPhone 15 Pro HEVC 4K Dolby Vision, AAC 44.1/48kHz) using ffprobe structural analysis and ffplay HLS playback via HTTP server.
What's New
HEVC fMP4 Init Segment (hev1/hvcC)
CMAFWriternow generates correct HEVC init segments withhev1sample entry andhvcCdecoder configuration box (ISO 14496-15 §8.3.3.1)- Previously, all codecs produced
avc1/avcC— HEVC video was unplayable VideoConfiggains avps: Data?field for HEVC VPS NALU (backward compatible, defaults tonil)parseHEVCSPSHeaderextracts profile_space, tier_flag, profile_idc, compatibility flags, constraint indicators, and level_idc from HEVC SPS- E2E validated: iPhone HEVC 4K Dolby Vision + MV-HEVC spatial video play correctly via HLS fMP4
Audio Segment Sync Fix
- The audio
IncrementalSegmenterinsideVideoSegmenterwas configured with the sametargetDurationas video, causing it to auto-emit segments independently - Result: audio segments 0-4 contained ~1 frame each (11KB), while the final segment contained all remaining frames (110KB)
- Fix: audio segmenter uses
targetDuration = .greatestFiniteMagnitude— it only emits viaforceSegmentBoundary()from the video sync logic - Audio frames are now uniformly distributed across segments (93-94 packets/segment, aligned with video boundaries)
B-Frame Composition Time Offset (O1)
EncodedFramegainscompositionTimeOffset: Int32?for CTS/CTTS supporttrunbox includessample_composition_time_offset(flag0x000800) when offsets are present- Enables correct display order for H.264 High profile and HEVC with B-frames
Integer Timestamp Accumulation (O3)
baseMediaDecodeTimeintfdtnow accumulated as integers instead ofDoublemultiplication- Fixes floating-point drift that caused
ceil(2.0000000000000004) = 3inEXT-X-TARGETDURATION TARGETDURATIONnow correctly reports2for 2-second segments
Ingest Boundary Signal (O2)
ingest()now returnsBoolindicating whether a segment boundary was emittedVideoSegmenter.ingestVideo()reduced from 3 actor hops per frame to 1- Eliminates 90 unnecessary actor context switches per second at 30fps
Box Improvements (O4, O5)
stsduseswriteFullBoxfor ISO 14496-12 consistency- Audio
tfhdincludes explicitdefault_sample_flagswithsample_depends_on=2andsample_is_non_sync_sample=0for strict CMAF compliance CMAFWriterMoof.swiftextracted fromCMAFWriterBoxes.swiftfor maintainability
Bug Fixes
| Bug | Impact | Root Cause |
|---|---|---|
| HEVC init segment used avc1/avcC | Critical | buildVideoStsd always called buildAvc1SampleEntry, ignoring codec |
| Audio segments unevenly distributed | Critical | Audio segmenter auto-emitted independently of video sync |
| TARGETDURATION inflated by 1 | Medium | Floating-point accumulation: ceil(2.0000000000000004) = 3 |
E2E Validation
| Test | Codec | Audio | Playback |
|---|---|---|---|
| bbb.mp4 | H.264 High 1080p60 | — | ffplay HLS ✅ |
| IMG_1765.MOV | HEVC 4K DV 10.8s | AAC 48kHz | ffplay HLS ✅ |
| IMG_1284.MOV | HEVC 4K DV 37s | AAC 44.1kHz | ffplay master A/V ✅ |
| spatial-test.mov | MV-HEVC stereo | — | ffplay HLS ✅ |
| Synthetic fMP4 | H.264 320x240 | AAC 48kHz | ffprobe boxes ✅ |
Stats
- 5,165 tests across 617 suites — all passing
- 91.80% line coverage (up from 91.04%)
- 0 warnings (swift build, SwiftLint, swift-format)
- 5 E2E scenarios validated with ffprobe + ffplay
Standards Compliance
Verified against reference implementations (FFmpeg libavformat/movenc.c):
| Aspect | Standard | Status |
|---|---|---|
ftyp brand cmfc |
ISO 23000-19 §7.2 | ✅ |
styp brand msdh |
ISO 23000-19 §7.3.1 | ✅ |
tfhd default-base-is-moof |
ISO 23000-19 §7.3.2 | ✅ |
| tfdt version 1 (64-bit) | ISO 14496-12 §8.8.12 | ✅ |
| avcC | ISO 14496-15 §5.3.3.1 | ✅ |
| hvcC | ISO 14496-15 §8.3.3.1 | ✅ (new) |
| sample_flags sync/non-sync | ISO 14496-12 §8.8.3.1 | ✅ |
| sample_composition_time_offset | ISO 14496-12 §8.8.8 | ✅ (new) |
Migration
No breaking API changes. All new fields have default values:
VideoConfig.vpsdefaults tonilEncodedFrame.compositionTimeOffsetdefaults tonilingest()return value (Bool) can be ignored with_ =
Full Changelog: 0.5.0...0.6.0
0.5.0 — fMP4 Video Fix & Async Segment Transform
What's New
fMP4 Video Sample Entry Fix
Fixed a critical bug in CMAFWriterCodecConfig where the pre_defined field of VisualSampleEntry was written as 4 bytes (writeInt32) instead of the ISO 14496-12 spec-mandated 2 bytes (writeInt16). This shifted the avcC box by 2 bytes, causing all fMP4 video init segments to be rejected by standard decoders (ffmpeg, Safari, AVPlayer). Video playback via fMP4/CMAF now works correctly with H.264 and HEVC content.
Async Segment Transform
IncrementalSegmenter.segmentTransform is now an async closure, allowing integrators to use actors and structured concurrency for custom segment processing (e.g., MPEG-TS muxing) instead of requiring @unchecked Sendable wrappers with manual locks. Existing synchronous closures continue to work without modification — sync closures are automatically promoted to async in Swift.
Transport Companion Library Compatibility
Updated version references for transport companion libraries (RTMP, SRT, Icecast) to reflect their current releases.
Changes
CMAFWriterCodecConfig—VisualSampleEntry.pre_definedcorrected fromwriteInt32(-1)to 2-byte write per ISO 14496-12 §12.1.3IncrementalSegmenter.segmentTransform— closure signature changed toasyncingest(),forceSegmentBoundary(),finish(),emitCurrentSegment(),buildSegment()— nowasyncto support async transform- Added fMP4 wire-format test verifying
avcCbox offset in init segments - Added async segment transform integration test
- Version bumped to 0.5.0 across CLI, documentation, README, and tests
- 5,130 tests passing
Compatibility
- Swift 6.2+
- macOS (arm64, x86_64), Linux (x86_64), iOS, iPadOS, visionOS
Full Changelog: 0.4.0...0.5.0
0.4.0 — Transport Intelligence & Spatial Computing
What's New in 0.4.0
Transport-aware live pipelines with quality monitoring and ABR, MV-HEVC stereoscopic video for Apple Vision Pro, IMSC1 subtitle support, variable substitution, and video projection specifiers. Pure Swift, cross-platform.
Highlights
- Transport v2 contracts — quality monitoring, adaptive bitrate recommendations, health dashboards across RTMP, SRT, and Icecast transports
- Transport-aware LivePipeline — the pipeline now reacts to transport signals with configurable ABR policy, quality thresholds, and multi-destination health tracking
- MV-HEVC spatial video — stereoscopic fMP4 packaging for Apple Vision Pro with complete ISO BMFF spatial boxes (vexu, eyes, stri, hero) and Dolby Vision Profile 8/20
- IMSC1 subtitles — W3C TTML parse, render, and fMP4 segmentation with
stppsample entry - Variable substitution —
EXT-X-DEFINEwith NAME/VALUE, IMPORT, and QUERYPARAM for CDN path templating and multi-tenant delivery - Video projection specifiers —
REQ-VIDEO-LAYOUTwith 360°, 180°, and Apple Immersive Video support - 2 new CLI commands —
imsc1andmvhevc(10 total) - 5,127 tests across 610 suites (was 4,478)
- 33 DocC guides (was 26)
- Optional companion libraries — swift-rtmp-kit, swift-srt-kit, swift-icecast-kit provide concrete transport implementations
New Features
📡 Transport Contract v2 — Common Abstractions
A unified quality and metrics vocabulary across all transport protocols:
TransportQuality— composite quality score (0.0–1.0) with grade (excellent≥ 0.9,good≥ 0.7,fair≥ 0.5,poor≥ 0.3,critical< 0.3), recommendation, and timestampTransportQualityGrade— 5-level quality grade withComparableconformance for threshold-based decisionsTransportBitrateRecommendation— directional bitrate advice (increase,decrease,maintain) with confidence level and recommended bitrateTransportStatisticsSnapshot— point-in-time transport metrics (bytes sent, duration, current/peak bitrate)TransportRecordingState— recording lifecycle tracking (idle, recording, paused, stopped)TransportEvent— 7-case event stream (connected, disconnected, reconnecting, qualityChanged, bitrateRecommendation, recordingStateChanged, error)QualityAwareTransport— protocol for transports exposing quality signalsAdaptiveBitrateTransport— protocol for transports providing ABR recommendationsRecordingTransport— protocol for transports with recording capabilities
📡 RTMP Transport v2
Enhanced RTMP transport with metadata, capabilities, and platform presets:
RTMPServerCapabilities— server feature discovery (Enhanced RTMP, codec negotiation)sendMetadata()— inject onMetaData during live publish- 10 platform presets —
.youtube()(rtmps://),.twitch()(rtmps://),.facebook(),.instagram(),.tiktok(),.twitter(),.rumble(),.kick(),.linkedin(),.trovo() FLVTagType— audio, video, and script data tag identification- Full URL composition with stream key:
RTMPPusherConfiguration.fullURL
📡 SRT Transport v2
SRT enrichments for professional contribution workflows:
- Connection modes —
.caller,.listener,.rendezvousviaSRTConnectionMode - FEC — SMPTE 2022-1 forward error correction with row/column layout via
SRTFECConfiguration - Congestion control —
.live(low-latency) and.file(throughput-optimized) modes - ARQ modes —
.always,.onreq,.neverviaSRTARQMode - Bonding —
.broadcast,.mainBackup,.balancingviaSRTBondingMode SRTConnectionQuality— SRT-specific quality with.toTransportQuality()conversion- Extended network stats —
sendBufferMs,receiveBufferMs,rttVariance,flowWindowSize - Configuration presets —
.rendezvous(),.highThroughput(),.fec(),.broadcast()
📡 Icecast Transport v2
Icecast enrichments with comprehensive auth and server ecosystem support:
- 6 authentication modes —
.basic,.digest,.bearer,.queryToken,.shoutcast,.shoutcastV2viaIcecastAuthMode - 7 server presets —
.azuracast(),.libretime(),.radioCo(),.centovaCast(),.shoutcastDNAS(),.icecastOfficial(),.broadcastify() IcecastStreamStatistics— server-side stream metrics with.toTransportStatisticsSnapshot()conversionIcecastMetadata— stream title, URL, and custom fieldsIcecastServerPreset—CaseIterableenum for all supported server software
🎛️ Transport-Aware Pipeline
LivePipeline now reacts intelligently to transport signals:
TransportAwarePipelinePolicy— configurable policy withautoAdjustBitrate,minimumQualityGrade, andabrResponsiveness(.conservative= 3 consecutive,.responsive= 2,.immediate= 1)TransportAwarePipelinePolicy.defaultand.disabledpresetsTransportHealthDashboard— aggregated multi-destination health withoverallGrade(worst-case),healthyCount,degradedCount,failedCountTransportDestinationHealth— per-destination quality, connection state, and statistics- 4 new
LivePipelineEventcases:.transportQualityDegraded(destination:quality:)— quality below policy threshold.transportBitrateAdjusted(oldBitrate:newBitrate:reason:)— ABR recommendation applied.transportDestinationFailed(destination:error:)— destination disconnect.transportHealthUpdate(_:)— periodic health dashboard update
LivePipeline.transportHealthDashboard()— on-demand health query- ABR consecutive tracking — per-destination recommendation counter with direction-change reset
📝 Variable Substitution (EXT-X-DEFINE)
CDN path templating and multi-tenant delivery:
- 3 definition forms —
NAME="base",VALUE="https://cdn.example.com"(static),IMPORT="token"(from parent),QUERYPARAM="session"(from playlist URL) - Automatic resolution —
ManifestParserresolves{$var}references in 8 URI types (variant, segment, rendition, key, map, etc.) - Builder DSL —
Define(name:value:),Define(import:),Define(queryParam:) - Generator output —
ManifestGeneratoremitsEXT-X-DEFINEtags and auto-bumps VERSION to 8 - Validation rules —
VariableRuleschecks for undefined variables, duplicate definitions, circular references, import-in-media-playlist errors - CDN pattern —
{$base}/720p/playlist.m3u8?token={$token}for tokenized multi-CDN delivery
📺 IMSC1 Subtitle Support
W3C TTML profile for subtitle delivery in HLS:
IMSC1Parser— SAX-based XML parser for TTML/IMSC1 documents with namespace and profile validationIMSC1Document— typed model with language, regions, styles, and subtitlesIMSC1Region— named regions with origin and extent percentagesIMSC1Style— font family, size, color, background color, text alignmentIMSC1Subtitle— timed cues with begin/end timestamps and text contentIMSC1Renderer— render to normalized TTML XML with IMSC1 Text Profile namespacesIMSC1Segmenter— fMP4 packaging withstppsample entry,nmhdfor subtitle tracks, configurable timescaleSubtitleCodec—.imsc1(rawValue:stpp.ttml.im1t) and.webvtt- Manifest integration —
CODECS="stpp.ttml.im1t"on subtitle renditions, parser and generator wired - Round-trip fidelity — parse → render → parse produces identical documents
🥽 MV-HEVC Stereoscopic Video
Apple Vision Pro spatial video packaging:
SpatialVideoConfiguration— 3 presets:.visionProStandard,.visionProHighQuality,.dolbyVisionStereoVideoChannelLayout—.stereo(CH-STEREO) and.mono(CH-MONO)MVHEVCSampleProcessor— NALU extraction from Annex B, type identification (VPS/SPS/PPS/IDR), parameter set extraction, SPS profile parsingMVHEVCPackager— fMP4 init segment with complete ISO BMFF spatial boxes:hvcCwithHEVCDecoderConfigurationRecordvexu→eyes→stri(stereo indication: 0x03)hero(hero eye: 0x00 left)
SupplementalCodecs— Dolby Vision Profile 8 (dvh1.08.09/db4h) and Profile 20 (dvh1.20.09/db4h) presetsSUPPLEMENTAL-CODECS— manifest attribute with parser, generator, and validator supportMVHEVCEncoder— protocol behind#if canImport(VideoToolbox)(packaging works cross-platform, encoding requires Apple hardware)LivePipelineProPresets.spatialVideo()— one-line spatial video pipeline preset
🌐 Video Projection Specifiers
REQ-VIDEO-LAYOUT for immersive content:
VideoProjection— 5 cases:.rectilinear,.equirectangular(360°),.halfEquirectangular(180°),.primary,.appleImmersiveVideoVideoLayoutDescriptor— combines channel layout + projection with 5 presets:.standard2D— flat video.stereoscopic—CH-STEREO.immersive180—CH-STEREO,PROJ-HEQU.equirectangular360—PROJ-EQUI.appleImmersiveVideo— Apple's immersive format
VideoLayoutDescriptor.parse(_:)— parse from manifest stringVideoLayoutDescriptor.attributeValue— generate manifest string- Validation — Apple HLS 2.9 video layout rules
- Full Vision Pro pattern — stereo + Dolby Vision + projection + IMSC1 subtitles in a single manifest
🖥️ CLI
Two new commands join the existing eight:
hlskit-cli imsc1 parse— parse and display IMSC1/TTML documents (text + JSON)hlskit-cli imsc1 render— render to normalized TTML XMLhlskit-cli imsc1 segment— segment TTML into fMP4 with init + media segments + playlist
...
0.3.0 — Live Streaming Pipeline
What's New in 0.3.0
🔴 Live Streaming Pipeline
- Complete LivePipeline with media source → encode → segment → playlist → push
- LL-HLS support (partial segments, blocking reload, server control, delta updates)
- DVR buffer with configurable window
- Live recording (live-to-VOD)
- Multi-destination segment pushing (HTTP, file, custom)
- Live metadata injection (EXT-X-DATERANGE, EXT-X-DEFINE, SCTE-35)
- Multi-bandwidth adaptive streaming
🎵 Audio Processing
- Audio format conversion (sample rate, channel layout)
- Level/loudness measurement (EBU R128, ITU-R BS.1770)
- Silence detection
🎬 Video Features
- I-Frame playlist generation with thumbnail extraction
- HDR/Dolby Vision support (HDR10, HLG, Dolby Vision Profile 5/8)
- Spatial audio (Dolby Atmos, Apple Spatial Audio, Ambisonics)
- Hi-Res audio support (up to 192kHz/24-bit)
🔒 Security & Accessibility
- Live DRM (FairPlay Streaming, Widevine, sample-level encryption)
- CEA-608/708 closed captions, WebVTT subtitles, audio descriptions
🎛️ Presets & CLI
- Production-ready presets (podcast, music, sports, news, cinema, concert...)
- 2 new CLI commands:
live,iframe(8 total)
🛠️ Infrastructure
- Cross-platform Linux compatibility (LockedState, platform guards)
- 4478 tests across 526 suites
- 26 DocC documentation guides
- Apache 2.0 license
Full Changelog: 0.2.0...0.3.0
0.2.0 — Cloud Transcoding
Delegate transcoding to Cloudflare Stream, AWS MediaConvert, or Mux — same Transcoder protocol, zero local GPU required.
New Features
ManagedTranscoder
ManagedTranscoder offloads heavy transcoding work to cloud providers while conforming to the same Transcoder protocol as AppleTranscoder and FFmpegTranscoder. Local file in, local file out — callers don't need to know whether transcoding happens locally or in the cloud.
- Cloudflare Stream — Zero egress costs, global CDN, Bearer token auth
- AWS MediaConvert — Enterprise-grade, SigV4 request signing, S3 storage integration
- Mux — Simplest API, auto-adaptive bitrate, Basic Auth
Full job lifecycle management: upload → create job → poll status → download output → optional cloud asset cleanup.
Streaming Upload & Download
URLSessionHTTPClient now streams files to and from disk without loading entire files into memory. Handles 500 MB+ video files with constant memory footprint and granular progress reporting through 5 phases (upload, job creation, polling, download, complete). Uses OSAllocatedUnfairLock for compile-time Sendable safety on Darwin, with Data(contentsOf:) fallback on Linux.
Configurable Quality Presets
ManagedTranscodingConfig.defaultPreset lets users choose the default quality (.p720 by default). Set .audioOnly for podcast audio, .p1080 for HD, or any QualityPreset value.
HLSEngine Integration
HLSEngine.managedTranscoder(config:) factory method creates a cloud transcoder transparently — same API surface as local transcoders.
Fixes
- SAMPLE-AES encryption — Fixed OpenSSL-based sample encryption for cross-platform compatibility
License
- Relicensed from MIT to Apache 2.0 across all source and test files, with proper SPDX headers and NOTICE file
Documentation
- New DocC article: Cloud Transcoding with ManagedTranscoder — configuration, providers, progress, job lifecycle, error handling
- Updated landing page, Transcoding article cross-references, and README
- 11 DocC articles (was 10), 0 warnings
Stats
| Metric | 0.1.0 | 0.2.0 |
|---|---|---|
| Tests | 1,595 | 1,809 |
| Coverage | 96.32% | 97.29% |
| DocC articles | 10 | 11 |
| Platforms | 6 | 6 |
| SwiftLint violations | 0 | 0 |
| Build warnings | 0 | 0 |
Full Changelog: 0.1.0...0.2.0
0.1.0 — Initial Release
0.1.0 — Initial Release
The first pure Swift HLS library. Full pipeline from manifest parsing to encrypted segment delivery — zero external dependencies in the core.
Highlights
- RFC 8216 compliant M3U8 manifest parser, generator, and validator
- Dual container format segmentation: fragmented MP4 (fMP4) and MPEG-TS
- Two transcoding backends: Apple VideoToolbox (hardware-accelerated) and FFmpeg (cross-platform)
- AES-128 and SAMPLE-AES encryption with automatic key management
- Result builder DSL for type-safe manifest construction
- 6-command CLI tool (
hlskit-cli) for all operations - 1595 tests across 216 suites — 96.32% line coverage
- Cross-platform: macOS, iOS, tvOS, watchOS, visionOS, Mac Catalyst, Linux
Features
Manifest Processing
- Parse master and media playlists with full tag support (EXT-X-STREAM-INF, EXT-X-MAP, EXT-X-KEY, EXT-X-BYTERANGE, EXT-X-DATERANGE, etc.)
- Generate spec-compliant manifests with
ManifestGeneratorandTagWriter - Builder DSL for constructing master and media playlists programmatically
- Round-trip fidelity: parse → modify → generate preserves structure
Validation
HLSValidatorwith pluggable rule sets: RFC 8216, Apple HLS, LL-HLS- Severity levels (error, warning, info) with line-level diagnostics
- Validate files, strings, or parsed manifests
ValidationReportwith actionable messages
Segmentation
MP4Segmenter: MP4 → fragmented MP4 segments with correct sample tablesTSSegmenter: MP4 → MPEG-TS segments with PAT/PMT/PES packetization- Byte-range segmentation (single-file HLS)
- Automatic playlist generation from segmentation results
- Codec string extraction (avc1, mp4a) for variant playlists
Transcoding
AppleTranscoder: hardware-accelerated via AVAssetReader/Writer (Apple platforms)FFmpegTranscoder: process wrapper with progress parsing (macOS + Linux)QualityPresetsystem: 360p, 480p, 720p, 1080p, 1440p, 4K, audio-only- Multi-variant transcoding with automatic master playlist generation
- Unified
Transcodingprotocol for custom backends
Encryption
SegmentEncryptor: AES-128-CBC full segment encryptionSampleEncryptor: SAMPLE-AES selective encryption (video NALUs + audio frames)KeyManager: automatic key generation with configurable rotation intervals- Cross-platform crypto: CommonCrypto (Apple) / OpenSSL (Linux)
CLI (hlskit-cli)
hlskit-cli manifest parse— parse and display manifest structurehlskit-cli manifest generate— generate playlists from media fileshlskit-cli validate— validate manifests against rule setshlskit-cli segment— segment media into fMP4 or TShlskit-cli transcode— transcode with quality presets or adaptive ladderhlskit-cli encrypt— encrypt segments with AES-128 or SAMPLE-AEShlskit-cli info— display media file information
Engine
HLSEnginefacade: unified API for parse, generate, validate, segment, encrypt- Composable pipeline: segment → encrypt → generate playlist in one call
Architecture
Three SPM targets with clear separation:
- HLSKit — core library, zero dependencies, all platforms
- HLSKitCommands — CLI commands (depends on swift-argument-parser)
- HLSKitCLI — executable entry point
Spec References
- RFC 8216 — HTTP Live Streaming
- Apple HLS Authoring Specification
- ISO 14496-12 — MPEG-4 Part 12 (fMP4)
- ISO 13818-1 — MPEG-TS
By the numbers
| Metric | Value |
|---|---|
| Tests | 1,595 |
| Test suites | 216 |
| Line coverage | 96.32% |
| Function coverage | 93.27% |
| Public API symbols | 100 |
| DocC articles | 10 |
| CLI commands | 6 |
| SwiftLint violations | 0 |
| Warnings | 0 |
Compatibility
- Swift 6.2+
- macOS 15+ · iOS 18+ · tvOS 18+ · watchOS 11+ · visionOS 2+ · Mac Catalyst 18+
- Linux (Ubuntu 22.04+, Swift 6.2+)
Known Issues
- SAMPLE-AES decryption via OpenSSL CLI has a padding issue on Linux (3 tests marked as known issues)
Documentation
Full DocC documentation: atelier-socle.github.io/swift-hls-kit
Downloads
| Platform | File |
|---|---|
| macOS arm64 | hlskit-cli-macos-arm64.tar.gz |
| Linux x86_64 | hlskit-cli-linux-x86_64.tar.gz |
License
Apache 2.0 — Copyright 2026 Atelier Socle SAS
Full Changelog: https://github.com/atelier-socle/swift-hls-kit/commits/0.1.0