Releases

OrgSwift 0.3.1

v0.3.1 cmc · 2026-08-31 21:47 UTC · source tar.gz

The characters allowed before an opening emphasis marker and after a closing one were a narrower set than org's, so =verbatim=-adjacent did not close and -=code= did not open.

Both sets now match orgo, the reference the conformance corpus is generated from:

  • before an opener: whitespace, or -({'"
  • after a closer: whitespace, or -.,;:!?)}["'

] leaves the post set, where org never had it. A link's description is parsed as its own run, so a closing ] never follows a marker.

Corpus conformance unchanged at 11/12. #1

OrgSwift 0.3.0

v0.3.0 cmc · 2026-08-31 18:33 UTC · source tar.gz

Emphasis border rule

An emphasis body may not begin or end with whitespace. Only the character after the closing marker was checked, so =ssh.mode = "system"= closed the verbatim at the middle = and rendered as two spans with the quoted value loose between them. Affected both renderers, since they share the parse. Corpus conformance is unchanged at 11/12.

TODO/DONE colors come from the caller

The native renderer hardcoded green for DONE and orange for TODO. Everything else it draws is semantic and inherits the embedding app's appearance; those two were concrete hues matching no palette.

OrgView(source, keywords: OrgKeywordStyle(todo: .myOpen, done: .myClosed))

Behavior change: the default is now semantic, not green/orange. Apps that want colored keywords must pass them — hence the minor bump rather than a patch.

OrgSwift 0.2.0

v0.2.0 cmc · 2026-08-31 18:22 UTC · source tar.gz

Adds OrgSwiftUI, a second product that renders org as native SwiftUI views instead of HTML in a web view: selectable text, Dynamic Type, VoiceOver, and no WKWebView. OrgSwift stays Foundation-only, so callers who want HTML never import SwiftUI.

import OrgSwiftUI

OrgView(source, options: options, styler: myHighlighter)

Covers every OrgElement case — recursive lists with checkboxes and description terms, tables in a Grid with org's column alignments and horizontal overflow scrolling, AsyncImage figures, and the footnote section. Syntax highlighting arrives through OrgCodeStyler, the native counterpart to CodeHighlighter, so the package keeps no dependencies.

Fixes

  • OrgAttributedStringRenderer emitted .file link targets as raw relative paths and footnote references as their label, so a natively rendered README got broken links and unnumbered notes.
  • Nested emphasis was flattened: *bold /italic/* rendered bold only.
  • OrgHTMLTreeRenderer claimed Sendable while holding a CodeHighlighter, which a real implementation backs with a thread-confined engine. The package is warning-free under strict concurrency now.

Divergence from HTML

An image source that will not resolve to an absolute URL degrades to its alt text; HTML can emit a relative src for a document base to resolve, and a view has no base. #+BEGIN_EXPORT html renders as the literal block it is rather than passing through.

Corpus conformance is unchanged at 11/12.

OrgSwift 0.1.0

v0.1.0 cmc · 2026-08-31 17:42 UTC · source tar.gz

First tagged release. Until now both consumers pinned this package by revision against branch: main.

Org-mode to sanitized HTML, plus a Foundation-only AttributedString renderer. Org parses once into an OrgDocument element tree and each output format walks it, so a second format is a walk rather than a second parser.

Supported: headings with tags, TODO keywords and priorities; ordered, unordered and description lists with arbitrary nesting, wrapped lines and task checkboxes; tables with column alignment; src/example/quote/ center/verse/export and #+begin_<name> special blocks; figures with #+CAPTION/#+ATTR_HTML/#+NAME; org links and images, including repository-relative resolution; timestamps, ranges and footnotes; and inline markup with proper nesting.

Sanitization: only http/https/mailto link schemes and http/https image schemes survive; everything else is dropped and the link degrades to its text.

Conformance: 11 of 12 cases in the org-conformance corpus match orgo exactly. The exception is outofscope, which is deliberately unsupported constructs. See GAPS.md.

Syntax highlighting is the app's to supply via the CodeHighlighter protocol, which is what keeps the package dependency-free.