We welcome everyone to contribute and make this library better!
Before opening something new, scan the open issues and pull requests. If your idea or bug is already being talked about, chiming in there — even with a "I hit this too on iOS X" — is more useful than a fresh thread, because it helps us see which problems hit the most people. If you have already worked around a problem, sharing the workaround is gold.
When you do file a bug, the more context you give us, the faster we can help. Please include:
- The iOS version (and Mac Catalyst / visionOS / etc. if relevant) where you saw the issue
- The version of SwiftStreamingMarkdown you are on (commit SHA or tag)
- The Xcode version you built with
- How you integrated the package (Swift Package Manager via Xcode, SPM via
Package.swift, etc.) - The full text of any stack traces, compiler errors, or SwiftUI runtime warnings
- A minimal sample — ideally a small Xcode project or a snippet against the bundled
SwiftStreamingMarkdownSampleapp — that reproduces the problem - Anything else that you think is relevant: streaming source, markdown input, custom theme, etc.
If we close an issue and link back to this section, it usually means one of these pieces was missing. Re-open the issue once you have the missing info — we are not trying to wave you off.
PRs are very welcome. To keep the review loop short, please follow these steps before opening one:
- Run
make dev-setuponce on your machine so you have the required tools used by CI and local helper targets (SwiftLint, XcodeGen). ImageMagick anddiff-imageare optional snapshot diff helpers;make dev-setupoffers to downloaddiff-imageinto~/.local/binfor you. - Fork the repo and branch from the most recent
mainto minimize merge conflicts. - Keep the change focused — one logical change per PR is much easier to review than a grab-bag.
- If you are adding behavior, add a test. The package uses XCTest under
Tests/; many UI surfaces are covered by snapshot tests. - If you change a public API, update the DocC comments and the README where it shows up.
- If you touch rendered output, update the snapshot fixtures and review the visual snapshot differences yourself before pushing. When the optional
diff-imagehelper is installed, use its output for that review. - Run
make cibefore pushing. Usemake lint,make test, ormake build-samplefor targeted checks while iterating. - Use
make projectto open the Swift package in Xcode ormake sample-projectto generate and open the sample app. Usemake clocwhen you need a Git-backed line-count report. - As you iterate on your PR, please resolve reviewer comments as you fix them, especially AI reviewer comments. Your AI agent can do this automatically via the
ghCLI tool.
If you are unsure whether a feature is in scope, open an issue first to talk through the design. It is much less frustrating to align on the approach before you have spent an afternoon implementing it.
Thanks again for contributing — see you in the PR queue.