Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-25 12:19 UTC

chinedufn / swift-bridge

swift-bridge facilitates Rust and Swift interop.

RustApache-2.0★ 1.119 Sterne⑂ 77 Forksseit Nov. 2021Auf GitHub ansehen ↗

chinedufn/swift-bridge erreicht einen Gesundheitsindex von 55 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Community & Adoption (66/100) ab, am schwächsten bei Vitality (39/100). Zuletzt vor 200 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

55
gesamt / 100
Mittel

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

55
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

Chinedu Francis NwafiliPersönliches Konto
539 Follower106 öffentliche Reposseit Aug. 2012

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
crates.ioswift-bridge0.1.5955.77660vor 200 Tagenbindingsffiiosmacswift

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

39Gefährdet · 22 % des Gesamtindex
Wie die Bewertung erfolgt
3.6/36Push-Aktualität — letzter Push vor 200 Tagen
4.8/36Commit-Rhythmus — 7/52 Wochen mit Commits
10.8/18Commit-Volumen — 15 Commits im letzten Jahr
0/10OpenSSF Scorecard: Maintained — 0 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 0
Verwendete Eingangsdaten
commits_last_year15
human_commit_share1
days_since_last_push200
active_weeks_last_year7
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 42 Releases veröffentlicht
16.2/36Release-Aktualität — letztes Release vor 200 Tagen
19.8/27Release-Rhythmus — ein Release etwa alle 116,7 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count42
latest_release_tag0.1.59
releases_from_tagsnein
days_since_latest_release200
mean_days_between_releases116,7
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

66Mittel · 18 % des Gesamtindex
Wie die Bewertung erfolgt
49.4/60Stars — 1.119 Stars
15.7/25Forks — 77 Forks
6/15Watcher — 13 Watcher
Verwendete Eingangsdaten
forks77
stars1.119
watchers13
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (Apache-2.0)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
63.3/80Downloads pro Monat — 55.776 Downloads/Monat über crates
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesswift-bridge
dependents
ecosystemscrates
total_downloads1.909.127
monthly_downloads55.776
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

60Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
4.3/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 81 % der Commits
13.5/13.5Breite der Beitragenden — 33 Beitragende
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Verwendete Eingangsdaten
bus_factor1
contributors_sampled33
top_contributor_share0,811
Wie die Bewertung erfolgt
24.4/46.8Issue-Lösungsquote — 52 % der Issues geschlossen
36/38.3PR-Annahme — 159/169 entschiedene PRs gemergt
6/15OpenSSF Scorecard: Code-Review — Found 13/30 approved changesets -- score normalized to 4
Verwendete Eingangsdaten
merged_prs159
open_issues92
closed_issues100
issue_closed_ratio0,521
closed_unmerged_prs10
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
19.6/25Reichweite des Inhabers — 539 Follower von chinedufn
25/25Kontohistorie — 106 öffentliche Repos, Kontoalter ca. 13 Jahre
Verwendete Eingangsdaten
followers539
owner_typeUser
is_verified
owner_loginchinedufn
public_repos106
account_age_days5.101
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

91Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf crates
26/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 200 Tagen
20/20Versionshistorie — 60 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesswift-bridge
ecosystemscrates
any_deprecatednein
min_days_since_publish200

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

64Mittel · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 2 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
8/20OpenSSF Scorecard: CI-Tests — 9 out of 22 merged PRs checked by a CI test -- score normalized to 4
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://chinedufn.github.io/swift-bridge
10/10Repository-Beschreibung
10/10Topics — 5 Topics
10/10Wiki
Verwendete Eingangsdaten
topicsrust, swift, ffi, interop, ios
has_wikija
homepagehttps://chinedufn.github.io/swift-bridge
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

47Gefährdet · 16 % des Gesamtindex

Sicherheitslage

34Gefährdet
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
1/2.5CI-Tests — 9 out of 22 merged PRs checked by a CI test -- score normalized to 4
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
3/7.5Code-Review — Found 13/30 approved changesets -- score normalized to 4
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
0/7.5Maintained — 0 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 0
0/5Packaging — keine Daten
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate3,4
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): packaging, signed_releases. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
25/25Indirekte Abhängigkeiten ohne bekannte Advisories — keine indirekte Abhängigkeit trägt ein bekanntes Advisory
0/40Keine offenen Advisories — kein Advisory trägt ein Veröffentlichungsdatum
Verwendete Eingangsdaten
sourceosv
advisories0
affected_packages0
assessed_packages24
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Keine offenen Advisories. Die verbleibenden Gewichte wurden renormalisiert. Abgeglichen wurde die Laufzeit-Abhängigkeitshülle von crates:swift-bridge@0.1.59 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 24 Paketen. Erreichbarkeit wird nicht analysiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

51Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 79 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,79
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
12.6/18Bootstrap mit einem Befehl — Cargo.toml, SwiftRustIntegrationTestRunner/integration-test-create-swift-package/Cargo.toml, SwiftRustIntegrationTestRunner/swift-package-rust-library-fixture/Cargo.toml (Toolchain-Konvention, kein Task-Runner)
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — Rust (statisch typisiert)
0/10Reproduzierbare Umgebung
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0
toolchain_manifestsCargo.toml, SwiftRustIntegrationTestRunner/integration-test-create-swift-package/Cargo.toml, SwiftRustIntegrationTestRunner/swift-package-rust-library-fixture/Cargo.toml, crates/swift-bridge-build/Cargo.toml, crates/swift-bridge-cli/Cargo.toml, crates/swift-bridge-ir/Cargo.toml, crates/swift-bridge-macro/Cargo.toml, crates/swift-integration-tests/Cargo.toml, examples/async-functions/Cargo.toml, examples/codegen-visualizer/Cargo.toml, examples/multiple-bridge-modules/Cargo.toml, examples/rust-binary-calls-swift-package/Cargo.toml, examples/without-a-bridge-module/Cargo.toml
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Rust (statisch typisiert)
54.5/55Handhabbare Dateigrößen — 2/241 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageRust
largest_source_bytes79.752
source_files_sampled241
oversized_source_files2
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

1.119GitHub-Sterne
33Mitwirkende
15Commits, letzte 12 Monate
200Tage seit letztem Push
42Releases
1Bus-Faktor
92offene Issues
crates.ioPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 77 ⇿
0Sterne
77Forks
42Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

0204060807632021-122024-032026-07
Major 0Minor 0Patch 42

Jeder Punkt umfasst 5 Tage.

OpenSSF Scorecard 3.4 / 10
3.4Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-25 12:19 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
4CI-Tests9 out of 22 merged PRs checked by a CI test -- score normalized to 4
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
4Code-ReviewFound 13/30 approved changesets -- score normalized to 4
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintained0 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 0
k. A.Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 3
RegistryPaketVersionsvorgabeManifest
crates.ioswift-bridge-macro0.1.59Cargo.toml
crates.iotokio1Cargo.toml
crates.ioonce_cell1.9Cargo.toml
Alle Abhängigkeiten 13

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 3 direkte und 10 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

RegistryPaketVersionBeziehung
crates.ioonce_celldirekt
crates.ioswift-bridge-macrodirekt
crates.iotokiodirekt
crates.ioclapindirekt
crates.iocrossbeam-channelindirekt
crates.ioproc-macro2indirekt
crates.ioquoteindirekt
crates.ioreqwestindirekt
crates.ioswift-bridge-buildindirekt
crates.ioswift-bridge-irindirekt
crates.iosynindirekt
crates.iotempfileindirekt
crates.iotrybuildindirekt
Abhängigkeits-Advisories 0

Die Installation von crates:swift-bridge@0.1.59 zieht 24 Pakete nach sich, direkt und transitiv: 0 tragen bekannte Advisories, davon 0 direkte Abhängigkeiten.

Keine bekannten Advisories betreffen die bewerteten Abhängigkeiten.

Ein Advisory bedeutet, dass die im Abhängigkeitsgraphen erfasste Version in den betroffenen Bereich eines Advisories fällt. Erreichbarkeit wird nicht analysiert, und der Graph enthält Entwicklungs- und Test-Pins — ein Fund kann das Werkzeug betreffen und nicht die ausgelieferte Software.

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "rust",
        "swift",
        "ffi",
        "interop",
        "ios"
      ],
      "is_fork": false,
      "size_kb": 7239,
      "has_wiki": true,
      "homepage": "https://chinedufn.github.io/swift-bridge",
      "languages": {
        "C": 1310,
        "Rust": 1234454,
        "Shell": 3321,
        "Swift": 102500
      },
      "pushed_at": "2026-01-06T09:04:46Z",
      "created_at": "2021-11-14T04:24:28Z",
      "owner_type": "User",
      "updated_at": "2026-07-18T12:28:55Z",
      "description": "swift-bridge facilitates Rust and Swift interop.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "master",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Rust",
      "significant_languages": [
        "Rust"
      ]
    },
    "owner": {
      "blog": "https://chinedufn.com",
      "name": "Chinedu Francis Nwafili",
      "type": "User",
      "login": "chinedufn",
      "company": null,
      "location": "New Jersey",
      "followers": 539,
      "avatar_url": "https://avatars.githubusercontent.com/u/2099811?v=4",
      "created_at": "2012-08-05T21:09:44Z",
      "is_verified": null,
      "public_repos": 106,
      "account_age_days": 5101
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "0.1.59",
          "kind": "patch",
          "published_at": "2026-01-06T09:04:46Z"
        },
        {
          "tag": "0.1.58",
          "kind": "patch",
          "published_at": "2025-12-06T16:06:29Z"
        },
        {
          "tag": "0.1.57",
          "kind": "patch",
          "published_at": "2024-08-15T13:36:22Z"
        },
        {
          "tag": "0.1.56",
          "kind": "patch",
          "published_at": "2024-08-08T09:34:25Z"
        },
        {
          "tag": "0.1.55",
          "kind": "patch",
          "published_at": "2024-04-29T03:20:16Z"
        },
        {
          "tag": "0.1.54",
          "kind": "patch",
          "published_at": "2024-04-28T17:52:24Z"
        },
        {
          "tag": "0.1.53",
          "kind": "patch",
          "published_at": "2024-03-26T00:39:25Z"
        },
        {
          "tag": "0.1.52",
          "kind": "patch",
          "published_at": "2023-07-10T12:14:46Z"
        },
        {
          "tag": "0.1.51",
          "kind": "patch",
          "published_at": "2023-02-28T01:13:22Z"
        },
        {
          "tag": "0.1.50",
          "kind": "patch",
          "published_at": "2023-02-20T18:06:23Z"
        },
        {
          "tag": "0.1.49",
          "kind": "patch",
          "published_at": "2023-02-09T12:28:10Z"
        },
        {
          "tag": "0.1.48",
          "kind": "patch",
          "published_at": "2023-01-29T19:37:47Z"
        },
        {
          "tag": "0.1.47",
          "kind": "patch",
          "published_at": "2023-01-25T01:53:02Z"
        },
        {
          "tag": "0.1.46",
          "kind": "patch",
          "published_at": "2023-01-19T16:26:39Z"
        },
        {
          "tag": "0.1.45",
          "kind": "patch",
          "published_at": "2023-01-12T13:47:37Z"
        },
        {
          "tag": "0.1.44",
          "kind": "patch",
          "published_at": "2022-12-15T21:19:14Z"
        },
        {
          "tag": "0.1.43",
          "kind": "patch",
          "published_at": "2022-12-15T17:29:22Z"
        },
        {
          "tag": "0.1.42",
          "kind": "patch",
          "published_at": "2022-12-15T02:12:36Z"
        },
        {
          "tag": "0.1.41",
          "kind": "patch",
          "published_at": "2022-10-28T19:38:24Z"
        },
        {
          "tag": "0.1.40",
          "kind": "patch",
          "published_at": "2022-10-03T21:51:47Z"
        },
        {
          "tag": "0.1.39",
          "kind": "patch",
          "published_at": "2022-10-02T11:14:46Z"
        },
        {
          "tag": "0.1.38",
          "kind": "patch",
          "published_at": "2022-09-20T23:32:50Z"
        },
        {
          "tag": "0.1.37",
          "kind": "patch",
          "published_at": "2022-09-15T16:31:15Z"
        },
        {
          "tag": "0.1.36",
          "kind": "patch",
          "published_at": "2022-08-23T17:14:30Z"
        },
        {
          "tag": "0.1.35",
          "kind": "patch",
          "published_at": "2022-07-27T03:25:47Z"
        },
        {
          "tag": "0.1.34",
          "kind": "patch",
          "published_at": "2022-06-06T20:15:45Z"
        },
        {
          "tag": "0.1.33",
          "kind": "patch",
          "published_at": "2022-05-10T22:39:52Z"
        },
        {
          "tag": "0.1.32",
          "kind": "patch",
          "published_at": "2022-04-24T04:31:18Z"
        },
        {
          "tag": "0.1.31",
          "kind": "patch",
          "published_at": "2022-04-21T12:23:45Z"
        },
        {
          "tag": "0.1.30",
          "kind": "patch",
          "published_at": "2022-04-20T01:55:03Z"
        },
        {
          "tag": "0.1.29",
          "kind": "patch",
          "published_at": "2022-03-12T15:18:27Z"
        },
        {
          "tag": "0.1.28",
          "kind": "patch",
          "published_at": "2022-02-17T02:22:59Z"
        },
        {
          "tag": "0.1.27",
          "kind": "patch",
          "published_at": "2022-02-09T01:05:41Z"
        },
        {
          "tag": "0.1.26",
          "kind": "patch",
          "published_at": "2022-02-02T15:49:36Z"
        },
        {
          "tag": "0.1.25",
          "kind": "patch",
          "published_at": "2022-01-28T20:39:24Z"
        },
        {
          "tag": "0.1.24",
          "kind": "patch",
          "published_at": "2022-01-26T13:19:13Z"
        },
        {
          "tag": "0.1.23",
          "kind": "patch",
          "published_at": "2022-01-25T12:56:45Z"
        },
        {
          "tag": "0.1.22",
          "kind": "patch",
          "published_at": "2022-01-25T01:35:25Z"
        },
        {
          "tag": "0.1.21",
          "kind": "patch",
          "published_at": "2022-01-24T21:03:39Z"
        },
        {
          "tag": "0.1.20",
          "kind": "patch",
          "published_at": "2022-01-22T19:56:11Z"
        },
        {
          "tag": "0.1.19",
          "kind": "patch",
          "published_at": "2022-01-17T11:49:36Z"
        },
        {
          "tag": "v0.1.18",
          "kind": "patch",
          "published_at": "2022-01-17T09:29:43Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "e527dc7454bebbfab537d842990bf3a1672e676c",
          "body": null,
          "is_bot": false,
          "headline": "0.1.59",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2026-01-06T09:00:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea55b2a5a25e6e05ea25505d2890d09d79457c89",
          "body": "Add Swift 6 strict concurrency compatibility for generated async function code\nAdd `@MainActor` to test classes using XCTContext.runActivity\nAdd CI matrix to test with both Swift 5.0 and Swift 6.0",
          "is_bot": false,
          "headline": "Add Swift 6 compatibility for async function code generation (#362)",
          "author_name": "Vladimir Pankratov",
          "author_login": "Choochmeque",
          "committed_at": "2026-01-06T08:49:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82b08851a9a6ebeed8fd6084f1a41176d904fae5",
          "body": "Just cosmetic fix. It removes warning of non-camel case type.\n\n<img width=\"845\" height=\"310\" alt=\"image\" src=\"https://github.com/user-attachments/assets/34189676-cb3c-4fd5-b4cd-e7e361308a0c\" />",
          "is_bot": false,
          "headline": "Fix non camel case warning ffi types (#361)",
          "author_name": "Vladimir Pankratov",
          "author_login": "Choochmeque",
          "committed_at": "2025-12-19T15:05:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b80238fd55e9ffedfabfafb134bd93b1920ff7f6",
          "body": "Adds support for Option<String> fields in shared structs.\n\n## Example\n\n```rust\n// rust\n#[swift_bridge::bridge]\nmod ffi {\n    #[swift_bridge(swift_repr = \"struct\")]\n    struct UserProfile {\n        name: String,\n        bio: Option<String>,  // Now supported!\n    }\n\n    extern \"Rust\" {\n        fn cre\n[…]\nNone value  \nlet profileWithoutBio = UserProfile(\n    name: \"Bob\".intoRustString(),\n    bio: nil\n)\n\n// Access optional field\nif let bio = profileWithBio.bio {\n    print(\"Bio: \\(bio.toString())\")\n}\n```",
          "is_bot": false,
          "headline": "Support `Option<String>` fields in shared structs (#354)",
          "author_name": "Vladimir Pankratov",
          "author_login": "Choochmeque",
          "committed_at": "2025-12-08T12:59:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "69bda0e98df3d8df67bb9367e979ad7d96d230d4",
          "body": "- Add support for calling async Swift functions that throw errors from Rust and return void\n- Swift throwing functions are mapped to Rust Result<(), E> return type\n\n## Example\n\n```rust\n// rust\n#[swift_bridge::bridge]\nmod ffi {\n    enum SwiftError {\n        SomeError,\n    }\n\n    extern \"Swift\" {\n    \n[…]\n: Bool) -> Result<(), SwiftError>;\n    }\n}\n```\n\n```swift\n// swift\nfunc swift_throwing_function_void(succeed: Bool) throws(SwiftError) {\n    if !succeed {\n        throw SwiftError.SomeError\n    }\n}\n```",
          "is_bot": false,
          "headline": "Support Rust calls Swift async throwing function (#348)",
          "author_name": "Vladimir Pankratov",
          "author_login": "Choochmeque",
          "committed_at": "2025-12-08T11:50:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aee3e37e2990a252aea234ed5734165afc32df6e",
          "body": null,
          "is_bot": false,
          "headline": "0.1.58",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2025-12-08T11:50:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81e1aa0b83aa89c2b615ff32ae0a3558930b3850",
          "body": "This commit makes the README's example demonstrate support of Rust\ncalling an async Swift function.",
          "is_bot": false,
          "headline": "Add async function demo to README",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2025-12-07T10:50:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d764dacf2a7ffec52e34edb3aa9e858b46cc397",
          "body": "Adds #[swift_bridge(label = \"...\")] attribute for swift function parameters (fixes #337)\n\n## Example:\n\n```rust\n// rust\nextern \"Swift\" {\n    fn swift_func_with_unlabeled_params(\n        #[swift_bridge(label = \"_\")] a: i32,\n        #[swift_bridge(label = \"_\")] b: i32,\n    ) -> i32;\n\n    fn swift_func_\n[…]\nswift\nfunc swift_func_with_unlabeled_params(_ a: Int32, _ b: Int32) -> Int32 {\n    return a + b\n}\n\nfunc swift_func_with_custom_labels(first a: Int32, second b: Int32) -> Int32 {\n    return a + b\n}\n```",
          "is_bot": false,
          "headline": "Support Swift function argument labels (#349)",
          "author_name": "Vladimir Pankratov",
          "author_login": "Choochmeque",
          "committed_at": "2025-12-06T15:25:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "15062f374b1cc85b8c8ab5da3b70cf2e0bd53a63",
          "body": "- Add support for calling synchronous Swift functions that throw errors from Rust\n- Swift throwing functions are mapped to Rust Result<T, E> return types (T = void also supported)\n\n## Example\n\n```rust\n// rust\n#[swift_bridge::bridge]\nmod ffi {\n    enum SwiftError {\n        SomeError,\n    }\n\n    exter\n[…]\neturn 42\n    } else {\n        throw SwiftError.SomeError\n    }\n}\n\nfunc swift_throwing_function_void(succeed: Bool) throws(SwiftError) {\n    if !succeed {\n        throw SwiftError.SomeError\n    }\n}\n```",
          "is_bot": false,
          "headline": "Support call Swift throwing function from Rust (#347)",
          "author_name": "Vladimir Pankratov",
          "author_login": "Choochmeque",
          "committed_at": "2025-12-05T00:31:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f69a5e633a12094a309cc959168e144c5c68841f",
          "body": "This enables Rust code to call async Swift functions declared in\nextern \"Swift\" blocks (fixes #345). The implementation uses a callback-based\napproach where:\n\n- Rust generates an async wrapper that creates a oneshot channel\n- Swift wraps the call in Task { } and invokes callbacks on completion\n- Sup\n[…]\nror {}\n\nfunc fetch_count() async -> UInt32 {\n    return 42\n}\n\nfunc fetch_data(succeed: Bool) async throws(FetchError) -> UInt32 {\n    if !succeed { throw FetchError.NetworkError }\n    return 123\n}\n```",
          "is_bot": false,
          "headline": "Support call async Swift function from Rust (#346)",
          "author_name": "Vladimir Pankratov",
          "author_login": "Choochmeque",
          "committed_at": "2025-12-01T21:23:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "09171dcad46d7f55a1eb823ee4e6fa679dbdea07",
          "body": "This commit fixes #334, adding support for generating a Hashable conformance for Copy types.\n\nFor example, the following is now possible:\n\n```rust\nextern \"Rust\" {\n    #[swift_bridge(Copy(8), Equatable, Hashable)]\n    type T;\n}\n```",
          "is_bot": false,
          "headline": "Generate Hashable conformance for Copy types (#339)",
          "author_name": "Jonathan Tanner",
          "author_login": "aDifferentJT",
          "committed_at": "2025-10-26T14:32:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93da216d126987bb89cea8765dab0934a33d9955",
          "body": "This commit adds documentation to the internal book explaining why pull\nrequests should not simply link to existing issues.\n\nThe pull request must also include enough information for a maintainer\nto understand the change while working offline.",
          "is_bot": false,
          "headline": "Clarify why linking to issues is not enough (#343)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2025-10-11T23:43:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "36193c8a8fe68586b328c3e5b9dc9d6e401271a3",
          "body": "This commit adds documentation explaining our expectations of pull\nrequest titles and bodies.",
          "is_bot": false,
          "headline": "Document pull request guidelines (#342)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2025-10-11T23:25:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5350b061aeb3d06463b2bddefe71a412c7630a3e",
          "body": "Without this fix I get errors like the following under Swift 6:\n\n```\n/home/colinmarc/dev/swift-bridge/integration-tests/Sources/SharedLib/Generated/SharedLib.swift:4159:26: error: sending 'rustFnRetVal' risks causing data races\n4157 |     return try await withCheckedThrowingContinuation({ (continuat\n[…]\nask-isolated uses\n4160 |         }\n4161 |\n```\n\nI avoided adding `Sendable` for `RustString` since that's being discussed in #296 and elsewhere. Instead, I commented it out and left a TODO.\n\nFixes #311",
          "is_bot": false,
          "headline": "Add Sendable to all async return types in tests (#312)",
          "author_name": "Colin Marc",
          "author_login": "colinmarc",
          "committed_at": "2025-08-27T22:42:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "455e98639c714a576bf2c4c6467336a47bc06570",
          "body": "This commit adds an `@unchecked Sendable` protocol implementation for\nthe `RustString` class, as well as documentation explaining that this is\nthread safe so long as the rules outlined in the book's `Safety` chapter\nare upheld.\n\nThe following code now compiles:\n```swift\nlet rustString = RustString(\"hello world\")\n\nThread.detachNewThread {\n    XCTAssertEqual(rustString.len(), 11)\n}\n```",
          "is_bot": false,
          "headline": "Implement Sendable for `RustString` (#330)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2025-08-27T22:24:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "840235cbcc16d66329f7c49efa8136c2d66b3851",
          "body": "`SwiftBirdgeCore` -> `SwiftBridgeCore`",
          "is_bot": false,
          "headline": "Fix typo in `.expect` message for copying `SwiftBridgeCore.h` (#329)",
          "author_name": "Chris Krycho",
          "author_login": "chriskrycho",
          "committed_at": "2025-05-26T16:51:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "73dcc32753975120797090e5edfcef225347abca",
          "body": "Allows automatic use of `==` on opaque (`extern \"Rust\"`) copyable types. The correct code was already being generated for the Rust crate and C header, but was not exposed in Swift code.\n\nFor the given bridge module declaration:\n```rust\n// Rust\n#[swift_bridge::bridge]\nmod ffi {\n    extern \"Rust\" {\n  \n[…]\n does not need to be heap-allocated\nlet x = SomeOpaqueBytes(initWith: ~)\nlet y = SomeOpaqueBytes(initSomeOtherWay: ~)\n\n// With this PR, we can now compare them with `==`\nif x == y { // <--\n    ~\n}\n```",
          "is_bot": false,
          "headline": "Support `Equatable` on Rust `Copy` types (#328)",
          "author_name": "pearfalse",
          "author_login": "pearfalse",
          "committed_at": "2025-05-26T16:51:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0a0b44eddeb215e39fafa3fbdeb81aab61d64515",
          "body": "Closes https://github.com/chinedufn/swift-bridge/issues/107",
          "is_bot": false,
          "headline": "Support Linux in `rust-binary-calls-swift-package` example (#297)",
          "author_name": "Terraputix",
          "author_login": "terraputix",
          "committed_at": "2025-02-11T07:29:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "864cb4ee4f3d0efb0f03b62d679f7dc18a3f99e2",
          "body": "This commit adds documentation explaining that there is is no zero-copy\r\nway to create a Swift `String`.\r\n\r\nWe also add documentation explaining that the reason the `RustString`\r\ntype exists is to avoid the implicit allocation that would be required\r\nif we automatically converted Rust's `std::string::String` to Swift's\r\n`String`.\r\n\r\nWe also document some potential new attributes that would allow users to\r\nopt into automatically converted from a `Rust std::string::String` to a\r\nSwift String.",
          "is_bot": false,
          "headline": "Document Swift String copying (#318)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2025-02-06T14:05:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4827500b2caccaac1ca078762dd24a9c16f24429",
          "body": "This commit introduces a new `#[swift_bridge(Sendable)]`\r\nattribute that emits Swift `Sendable` implementations for opaque\r\nRust types, and Rust `Send + Sync` implementations for opaque\r\nSwift types.\r\n\r\nThese implementations are checked at compile time.\r\n\r\nExample usage:\r\n```rust\r\nmod ffi {\r\n    extern \"Rust\" {\r\n        #[swift_bridge(Sendable)]\r\n        type MyRustType;\r\n    }\r\n\r\n    extern \"Swift\" {\r\n        #[swift_bridge(Sendable)]\r\n        type MySwiftType;\r\n    }\r\n}\r\n```",
          "is_bot": false,
          "headline": "Add `#[swift_bridge(Sendable)]` attribute (#317)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2025-02-04T17:23:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c15279c5a412fbc597e6831673b6bf850ddb4217",
          "body": "This commit introduces a\r\n\"Minimum Supported Swift Version\" policy to help users understand\r\nwhether their code is guaranteed to work on a particular version of\r\nSwift.\r\n\r\nAs a starting point, we are supporting Swift 6.0+ .\r\n\r\nStarting at `6.0` allows us to begin leveraging Swift's new ownership\r\nfe\n[…]\n certain safety requirements.\r\n\r\nSee the `Safety` chapter in the internal book for more information about\r\nsafety requirements that, by leveraging Swift 6.0, we will be able to\r\nautomatically enforce.",
          "is_bot": false,
          "headline": "Add Minimum Supported Swift Version Policy (#316)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2025-02-02T16:43:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a661800559c8aec75e5959b2f4701828639e6c06",
          "body": "This commit introduces a new attribute that can be used to enable\r\nexperimental support for Swift ownership.\r\n\r\nThe new `__experimental_swift_ownership` can be used on an opaque Rust\r\ntype.\r\n\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod foo {\r\n    extern \"Rust\" {\r\n        #[swift_bridge(__experimental_swi\n[…]\n` protocol to ensure that\r\nwhen Swift has ownership over an opaque Rust type it cannot copy that\r\nhandle, which should make attempts to use-after-free a compile-time\r\nerror instead of a runtime error.",
          "is_bot": false,
          "headline": "Add attribute for Swift ownership support (#314)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2025-02-02T11:42:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "225380ed46cac687ebfec359fc8b5d9d5f764801",
          "body": "This commit introduces an example of using multiple bridge modules in a\r\nproject.",
          "is_bot": false,
          "headline": "Add multiple-bridge-modules example (#302)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2024-11-16T20:27:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d64db649d3670741b1c73f4915f06ae278977429",
          "body": "This commit introduces documentation explaining why `swift-bridge` uses\r\na bridge module design, as opposed to, say, a design where users\r\nannotate their types with proc macro attributes.",
          "is_bot": false,
          "headline": "Document motivation for bridge module (#301)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2024-11-16T19:52:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c45a38cf8730013a6a03af2184df0831f523b1a6",
          "body": "Support Rust returning `-> Result<_, String>`, e.g.:\r\n\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    extern \"Rust\" {\r\n        fn do_fallible_work() -> Result<(), String>;\r\n    }\r\n}\r\n```\r\n\r\n---\r\n\r\nIncorporate the changes from #282 to implement swift's `Error` protocol for ruststring, & extend them with the tests requested in https://github.com/chinedufn/swift-bridge/issues/295#issuecomment-2411049833",
          "is_bot": false,
          "headline": "Support Rust returning `-> Result<_, String>` (#296)",
          "author_name": "Britt",
          "author_login": "brittlewis12",
          "committed_at": "2024-10-14T20:20:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0698b41d0434c6036f4d13a921677dcdfdde34dc",
          "body": "This commit adds a `[package] name = \"...\"` entry to the example `Cargo.toml` file in the `Swift Packages` chapter of the book.\r\n\r\nThis prevents the example crate from being interpreted as a virtual manifest.\r\nThis is important because a Cargo virtual manifest cannot have a `[lib]` section.",
          "is_bot": false,
          "headline": "Add package name to example Cargo.toml (#290)",
          "author_name": "Seto Elkahfi",
          "author_login": "setoelkahfi",
          "committed_at": "2024-08-26T15:17:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9cfb0aa8c930fc79fa14d260f3567e6898db689b",
          "body": null,
          "is_bot": false,
          "headline": "0.1.57",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2024-08-15T13:31:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b547a5f0ca976d711e6671b8d70d06113e916c4",
          "body": "This PR implements throwing initializers. See: https://docs.swift.org/swift-book/documentation/the-swift-programming-language/errorhandling/.\r\n\r\nHere's an example of using this feature:\r\n\r\n```rust\r\n// Rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    enum ResultTransparentEnum {\r\n        NamedField { da\n[…]\n -> i32;\r\n    }\r\n}\r\n```\r\n\r\n```swift\r\n// Swift\r\ndo {\r\n    let throwingInitializer = try ThrowingInitializer(false)\r\n} catch let error as ResultTransparentEnum {\r\n    //...\r\n} catch {\r\n    //...\r\n}\r\n```",
          "is_bot": false,
          "headline": "Support throwing initializers (#287)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2024-08-15T10:19:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "495611ba39bc6b08838408751b92f6329b98f321",
          "body": "Related to #235.\r\n\r\nThis PR supports failable initializers.\r\n\r\nSomething like:\r\n\r\n```rust\r\n// Rust side\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    extern \"Rust\" {\r\n        #[swift_bridge(Equatable)]\r\n        type FailableInitType;\r\n\r\n        #[swift_bridge(init)]\r\n        fn new() -> Option<FailableIn\n[…]\n   ~\r\n} else {\r\n   ~\r\n}\r\n```\r\n\r\nSee: [Swift Documentation - Failable Initializers](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/initialization/#Failable-Initializers)",
          "is_bot": false,
          "headline": "Support failable initializers (#276)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2024-08-08T22:57:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d2c09e2e602a3dd9a2d0ff6c9298f77b2a4b5eeb",
          "body": null,
          "is_bot": false,
          "headline": "0.1.56",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2024-08-08T09:21:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3d2da4e01bcf321fe32d6b07c5dfff94ee48fa8",
          "body": "This commit upgrades the macOS CI runners from v11 to v14.\r\n\r\nGitHub has discontinued v11, so our CI was failing before this commit.",
          "is_bot": false,
          "headline": "Upgrade macOS CI runners (#285)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2024-08-01T20:43:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37ac2c2627362d65edb7cce06705d27ad6acf066",
          "body": "This commit makes `#[swift_bridge::bridge]` respect the bridge module's visibility.\r\n\r\nHere's an example of using this.\r\n\r\n```rust\r\n// enums.rs\r\n\r\n// NOTE that we can now use `pub mod`, `pub(crate) mod`, etc\r\n#[swift_bridge::bridge]\r\npub mod ffi {\r\n    enum MyEnum {\r\n        VariantA,\r\n        Varia\n[…]\nms;\r\nuse enums::ffi::MyEnum;\r\n\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n  #[swift_bridge(already_declared)]\r\n  enum MyEnum {}\r\n\r\n  extern \"Rust\" {\r\n    fn getEnum() -> MyEnum;\r\n  }\r\n}\r\n```\r\n\r\nCloses #252.",
          "is_bot": false,
          "headline": "Apply input module visibility to output module (#284)",
          "author_name": "Joshua Booth",
          "author_login": "jnbooth",
          "committed_at": "2024-07-30T22:12:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "34ce1ffb6bc5a54730bf60cf177042e1f4e479ff",
          "body": "…pe>` (#278)\n\nIn Rust 1.79.0, dead code warnings are emitted from enums where the compiler does not infer that wrapped data is used, even when the enum has been annotated with `#[repr(C]`. This warning triggers in `swift-bridge` when defining transparent structs or enums that will be returned in err\n[…]\n, self)\r\n    }\r\n}\r\n\r\nimpl std::fmt::Display for ffi:: TransparentErrorStruct {\r\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\r\n        write!(f, \"{}\", self.0)\r\n    }\r\n}\r\n```",
          "is_bot": false,
          "headline": "Suppress dead_code warning when returning `-> Result<*, TransparentTy…",
          "author_name": "Eric Saxby",
          "author_login": "sax",
          "committed_at": "2024-06-21T08:59:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "717fcef70d3c293c2fd8b962ad678da18b10a3c3",
          "body": "## What's this?\r\n\r\nA new `parse-bridges` subcommand.\r\nAlso, an update to the documentation in the example showing this feature's preview.\r\n\r\nThis is handy for usage in higher-level build systems.\r\nFor example, in my case, I build both Rust and Swift with CMake, and having this CLI command implemente\n[…]\nesome-crate -f src/lib.rs -o generated\r\n```\r\n\r\nMultiple files:\r\n```shell\r\nswift-bridge-cli parse-bridges --crate-name my-superb-crate \\\r\n-f src/lib.rs \\\r\n-f src/some_other_file.rs \\\r\n-o generated\r\n```",
          "is_bot": false,
          "headline": "Add parse-bridges CLI subcommand (#274)",
          "author_name": "Maksym",
          "author_login": "integer-overflown",
          "committed_at": "2024-06-16T01:33:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ef01d21001914b79e0384627535098e15f87f096",
          "body": null,
          "is_bot": false,
          "headline": "0.1.55",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2024-04-29T03:16:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87dbea3c28d4a96d9195bd3a70fdecfd85fd8f5c",
          "body": "This commit fixes a memory leak when passing `Option<SwiftType>` to\r\n`extern \"Rust\"` functions.\r\n\r\nFor example, the following bridge module would lead to memory leaks:\r\n\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    extern \"Swift\" {\r\n        type SomeSwiftType;\r\n    }\r\n\r\n    extern \"Rust\" {\r\n   \n[…]\ne on the Swift side\r\n\r\n- Pass `Option<SwiftType>` to Rust. Retain count is now 2\r\n\r\n- Rust passes ownership back to Swift. Retain count is now 1\r\n\r\n- Retain count never hits 0. Memory has been leaked.",
          "is_bot": false,
          "headline": "Fix memory leak for `Option<SwiftType>` (#273)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2024-04-29T03:14:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b4ba1a72a682c3917d78d6650ffb249c7109999b",
          "body": "This commit replaces calls to `pointer::cast` with explicit casting via\n`as *mut SomeType`.\n\nThis reduces the likelihood of our codegen generating unsound code that\ncasts a pointer to the wrong type.",
          "is_bot": false,
          "headline": "Use explicit pointer casting",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2024-04-29T02:11:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d02d8f4e8e0b1482e79cdceea9343456a6d4d57",
          "body": null,
          "is_bot": false,
          "headline": "0.1.54",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2024-04-28T17:49:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "636fa2774870c052a18f06d98ca5f6966c09bdd6",
          "body": "This adds support for bridging `Option<OpaqueSwiftType>` in `extern \"Rust\"` functions. This fixes #268, and makes the following now possible:\r\n\r\n```rs\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    extern \"Swift\" {\r\n        type SomeSwiftType;\r\n    }\r\n\r\n    extern \"Rust\" {\r\n        fn option_arg(arg: Option<SomeSwiftType>);\r\n        fn returns_option() -> Option<SomeSwiftType>;\r\n    }\r\n}\r\n```",
          "is_bot": false,
          "headline": "Support Option<OpaqueSwiftType> (#272)",
          "author_name": "BrightShard",
          "author_login": "Bright-Shard",
          "committed_at": "2024-04-28T14:54:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3c950c90867550e09a24c94357f1e502bf6d69d",
          "body": "This commit inlines some of the example code in the book.\n\nThis makes it easier to read book chapters using any text viewer, as\nopposed to needing to use `mdbook`.",
          "is_bot": false,
          "headline": "Inline example code in book",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2024-04-23T07:15:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75a1077f1661ad048398a850226472c3310abc47",
          "body": null,
          "is_bot": false,
          "headline": "Improve signature support docs (#267)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2024-04-09T11:47:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7fc3d3ccca618f3f231fc6f8a7678ad119ca99b0",
          "body": "This commit adds documentation that explains the `ToRustStr` protocol.",
          "is_bot": false,
          "headline": "Document the ToRustStr protocol (#266)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2024-04-09T11:27:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04e6abf522119fd11cf2e6f8b44172794eae11d2",
          "body": null,
          "is_bot": false,
          "headline": "0.1.53",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2024-03-26T00:38:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "58f4a40f96bb050607c746376422ab3c62e0e771",
          "body": "This commit adds support for passing `Option<String>` to and from\r\n`extern \"Swift\"` functions, as well as for passing `Option<&str>` to\r\nextern \"Swift\" functions.\r\n\r\nFor example, the following is now possible:\r\n\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    extern \"Swift\" {\r\n        fn opt_strin\n[…]\npt_str_function(arg: Option<&str>);\r\n    }\r\n}\r\n```\r\n\r\nNote that you can not yet return `-> Option<&str>` from Swift.\r\n\r\nThis is an uncommon use case, so we're waiting until someone actually\r\nneeds it.",
          "is_bot": false,
          "headline": "Swift Option<String> and Option<&str> (#264)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2024-03-26T00:37:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "53b118d17f2f1a2922e969de528b99a2ffbc7dde",
          "body": "Add test cases for Option<&T> and fix rust codegen\r\n\r\nCurrently swift-bridge only has tests for Option<T> - this adds test\r\ncases for Option<&T> and fixes a bug in rust codegen that does not\r\ncorrectly translate Option<&T>.\r\n\r\nThis is now possible:\r\n\r\n```rust\r\nmod ffi {\r\n  extern \"Rust\" {\r\n    type SomeType;\r\n\r\n    fn my_func(arg: Option<&SomeType>) -> Option<&SomeType>;\r\n  }\r\n}\r\n```",
          "is_bot": false,
          "headline": "Add test cases for Option<&T> and fix rust codegen (#257)",
          "author_name": "Peter Farr",
          "author_login": "PrismaPhonic",
          "committed_at": "2024-03-15T00:55:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd5bef56af28db4f1a1244d86115def6abede931",
          "body": "This commit fixes an `improper_ctypes` warning when bridging transparent\r\nstructs that contain non FFI safe types.\r\n\r\nWhile transparent structs that contained non FFI safe types were being\r\npassed in an FFI safe way before this commit, the Rust compiler could\r\nnot know that what we were doing was FF\n[…]\nield: *mut std::string::RustString\r\n}\r\n```\r\nwas triggering a warning because the Rust compiler can't know that the\r\nnon-FFI safe `std::string::RustString` is not being dereferenced on the\r\nSwift side.",
          "is_bot": false,
          "headline": "Fix `improper_ctypes` warning (#254)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2024-03-08T02:43:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "48195b550d5d92073550aded61f0504088067477",
          "body": "This cmmit removes an unnecessary call to `Deref::deref`.\n\nThis fixes a warning that was causing CI to fail.",
          "is_bot": false,
          "headline": "Remove unnecessary `.deref()`",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2024-02-14T15:23:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9746f311ce666ffd51676cabfe2a8adeb7b7cdd4",
          "body": null,
          "is_bot": false,
          "headline": "Fix typos in Vec<-->RustVec docs (#251)",
          "author_name": "Gabbi Fisher",
          "author_login": "gabbifish",
          "committed_at": "2024-02-01T20:12:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8059a445355200cca0e065cf45fb5a131b5b56e",
          "body": "in build-swiftc-links-rust.sh, the command\r\nswiftc -L target/x86_64-apple-darwin/debug/ -lswift_and_rust -import-objc-header bridging-header.h \\\r\n  main.swift lib.swift ./generated/swift-and-rust/swift-and-rust.swift \r\nis missing the source ./generated/SwiftBridgeCore.swift",
          "is_bot": false,
          "headline": "Fix compilation source in documentation (#250)",
          "author_name": "ItamarMu",
          "author_login": "ItamarMu",
          "committed_at": "2024-01-30T19:16:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0614ba7d6d99c5b961b0e80fdbac84ce32551ae1",
          "body": "This commit removes the `Array.toUnsafeBufferPointer` usage from the\ndocumentation.\nThis was a method that we used to have but removed in a previous commit.\n\nSwift pointers have lifetimes that can be shorter than the lifetime of\nthe object that they are pointing to, so the returned pointer could\nunpredictably become a dangling pointer.\n\nThe documentation has been updated with an alternative approach to\npassing a Swift buffer pointer to Rust.",
          "is_bot": false,
          "headline": "Remove `Array.toUnsafeBufferPointer`",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2024-01-26T23:15:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d527f3231636ab7188a8ae02245cd1f9db1511de",
          "body": "The panic message now contains the name of the unsupported attribute as well\r\nas the name of the struct that the attribute was found on.\r\n\r\nThis commit also updates the documentation to fix faulty struct attributes.",
          "is_bot": false,
          "headline": "Improve error message for unsupported attribute (#244)",
          "author_name": "Erik Živković",
          "author_login": "bes",
          "committed_at": "2023-09-10T19:08:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af962ca051ba15b81794575a0837f1e2abde9984",
          "body": null,
          "is_bot": false,
          "headline": "0.1.52",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-07-10T12:12:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27246447b4ac741b8bf086d3dfca15b47558e44f",
          "body": "Related to #201. This commit adds support `RustString`  in extern Swift functions.\r\n\r\nHere's an example of using this.\r\n\r\n```Swift\r\n//Swift\r\nfunc reflect_swift_string(arg: RustString) -> RustString {\r\n    arg\r\n}\r\n\r\n```\r\n\r\n```Rust\r\n//Rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    extern \"Swift\" {\r\n   \n[…]\n   fn reflect_swift_string(arg: String) -> String;\r\n    }\r\n}\r\n\r\nlet foo = \"foo\";\r\nlet string = ffi::reflect_swift_string(foo.to_string());\r\nassert_eq!(string.len(), 3);\r\nassert_eq!(&string, foo);\r\n```",
          "is_bot": false,
          "headline": "Support `RustString` in extern Swift functions (#225)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-06-23T21:59:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "36565f2c59b4bc438b54fdf5fb5a696ea63348df",
          "body": "This commit documents how we use the `RustString` type to avoid implicit\nSwift String allocations.",
          "is_bot": false,
          "headline": "Add docs on RustString",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-06-23T11:18:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df91f282e62b32755f1410c0e6f22b03f836f018",
          "body": "This commit fixes the `SwiftRustIntegrationTestRunner` project such that\nit now builds and runs the full test suite.\n\nBefore this commit there was a recently introduced file that was not\nactually added to the project, so the project could not compile.\n\nCI was failing for the last few commits so this slipped through the\ncracks. This commit should fix CI.",
          "is_bot": false,
          "headline": "Fix integration tests",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-06-21T08:22:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4fbd30f81085dc366bda3c0303eac66345de3ed9",
          "body": "Related to #225.\r\n\r\nBefore this commit, the integration tests sometimes fail, like so:\r\n\r\n```\r\nfield has incomplete type 'struct swift_bridge$tuple$I32ResultTestOpaqueRustTypeString'\r\n```\r\n\r\nThis PR fixes the issue.",
          "is_bot": false,
          "headline": "Fix non-deterministic generation order (#230)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-06-20T23:52:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ffe20d8c8eb4f0404e1e56ef3892f810c7182fea",
          "body": "Fixes #228.\r\n\r\nThis enables the following use case:\r\n```rust\r\n// Rust\r\nfn main() {\r\n    let bytes = ffi::receive_bytes();\r\n    println!(\"bytes: {:?}\", bytes);\r\n\r\n    let vec: Vec<u8> = vec![6, 1, 2, 3, 4, 5];\r\n    ffi::send_bytes(vec);\r\n}\r\n\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    extern \"Swift\" {\r\n\n[…]\ns with my PR given that this is my first time dealing with this kind of interop work, so by all means do let me know how to address the current weaknesses/problems and I'll do my best to resolve them.",
          "is_bot": false,
          "headline": "Swift `Vec<primitive>` ret type and fn arg (#229)",
          "author_name": "Tim Wedde",
          "author_login": "timwedde",
          "committed_at": "2023-06-20T17:17:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ecd3b974754e32fc951b8bc4098ecef84e974821",
          "body": "When generating the rust function wrappers for an extern swift function with an already_declared struct/enum the generated code used a locally defined struct/enum with this patch we add `super` to that function signature.\r\n\r\nAn example of code that was previously not working:\r\n\r\n```rs\r\n#[swift_bridg\n[…]\niously the genrated function would be something like:\r\n```rs\r\nmod ffi {\r\n  fn baz(a: Foo) {\r\n    // ...\r\n  }\r\n}\r\n```\r\n\r\nnow it's\r\n\r\n```rs\r\nmod ffi {\r\n  fn baz(a: super::Foo) {\r\n    // ...\r\n  }\r\n}\r\n```",
          "is_bot": false,
          "headline": "Fix `already_declared` attribute for enums and structs (#226)",
          "author_name": "Gabi",
          "author_login": "conectado",
          "committed_at": "2023-05-27T00:25:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7c14ea07ab71702019e652fcc5a5f7a111d5ea0e",
          "body": "Fixes #220 \r\n\r\nThis supports bridges of the form:\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    extern \"Rust\" {\r\n        type ErrorType;\r\n        async fn some_function() -> Result<(), ErrorType>;\r\n    }\r\n}\r\n\r\nasync fn some_function() -> Result<(), ErrorType> {\r\n  Ok(())\r\n}\r\n```",
          "is_bot": false,
          "headline": "Fix async Rust fn return Result<(), OpaqueType>  (#221)",
          "author_name": "Josh Faust",
          "author_login": "jfaust",
          "committed_at": "2023-05-04T12:33:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de059024732fa2f8135a9fe1232b727d96794af6",
          "body": "Fixes #217 \r\n\r\nThis supports bridges of the form:\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    extern \"Rust\" {\r\n        type OpaqueRust;\r\n        fn rust_func_return_result_of_vec_u32() -> Result<Vec<u32>, OpaqueRust>;\r\n        fn rust_func_return_result_of_vec_opaque(\r\n        ) -> Result<Vec<\n[…]\nfunc_return_result_of_vec_opaque(\r\n) -> Result<Vec<OpaqueRust>, OpaqueRust> {\r\n    Ok(vec![\r\n        OpaqueRust::new(...),\r\n        OpaqueRust::new(...),\r\n        OpaqueRust::new(...),\r\n    ])\r\n}\r\n```",
          "is_bot": false,
          "headline": "Fix returning Result<Vec<>, ...> from Rust (#218)",
          "author_name": "Josh Faust",
          "author_login": "jfaust",
          "committed_at": "2023-05-04T12:26:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "852ece728d3f362f3ada4368e037fe9ebb2a913f",
          "body": "This commit adds support for returning `Result<tuple, Any Type>` from Rust functions. Note that this doesn't support returning `Result<Any Type, tuple>` from Rust functions.\r\n\r\nHere's an example of using this.\r\n\r\n```Rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    extern \"Rust\" {\r\n        fn rust_func_\n[…]\n``Swift\r\n//...\r\ndo {\r\n    //...\r\n    let tuple: (Int32, ResultTestOpaqueRustType, RustString) = try rust_func_return_result_tuple_transparent_enum(true)\r\n    //...\r\n} catch {\r\n    //...\r\n}\r\n//...\r\n```",
          "is_bot": false,
          "headline": "Support returning Result<tuple, Any Type> from Rust (#213)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-05-04T12:20:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7e140ca5e6ec3f969c19001c844f98fe76bd787c",
          "body": "This commit adds a method to the `Vectorizable` protocol:\r\n\r\n```swift\r\nstatic func vecOfSelfAsPtr(vecPtr: UnsafeMutableRawPointer) -> UnsafePointer<SelfRef>\r\n```\r\n\r\nMy reason for adding this method was to be able to easily pass a serialized Protobuf object back and forth between Rust and Swift. Moti\n[…]\nta: Data(\r\n            // The `.as_ptr()` method keeps this very straightforward\r\n            bytes: output.as_ptr(),\r\n            count: output.len()\r\n        )\r\n    )\r\n} catch { ... }\r\n\r\n// ...\r\n```",
          "is_bot": false,
          "headline": "Add `RustVec<T>.as_ptr` method (#216)",
          "author_name": "aiongg",
          "author_login": "aiongg",
          "committed_at": "2023-04-26T15:41:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9e09fcefbd2581fc6e44cb4207c99d25eb175b4d",
          "body": null,
          "is_bot": false,
          "headline": "Update incorrect-return-type.stderr (#215)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-04-24T15:25:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f9dd05360b4001fbe4c167304f6815399882699",
          "body": null,
          "is_bot": false,
          "headline": "Support tuples from Swift -> Rust (#211)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-04-18T13:57:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53b93f47cc32d605377194a43f3164745cea6dd6",
          "body": "Related issue: #190 \r\n\r\nExample:\r\n\r\n```rs\r\n// Rust\r\n\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    #[derive(Debug)]\r\n    enum DeriveDebugEnum {\r\n        Variant,\r\n    }\r\n}\r\n```\r\n\r\n```swift\r\n// Swift\r\n\r\nlet debugString = String(reflecting: DeriveDebugEnum.Variant)\r\nXCTAssertEqual(debugString, \"Variant\")\r\n```",
          "is_bot": false,
          "headline": "Support derive(Debug) on enums (#194)",
          "author_name": "naturecodevoid",
          "author_login": "amsam0",
          "committed_at": "2023-04-06T01:38:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25b1ea0d2b440a628a6658caca953f72752b7329",
          "body": "This commit adds support for generating a `#include<~>` corresponding to each field in tuples. \r\n\r\nHere's an example.\r\n\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    extern \"Rust\" {\r\n        fn some_function(arg1: (i32, bool)) -> (i32, bool);\r\n    }\r\n}\r\n```\r\n\r\nGenerates the following c header file:\r\n```c\r\n#include <stdint.h>\r\n#include <stdbool.h>\r\n//...\r\n```",
          "is_bot": false,
          "headline": "Generate includes for tuples (#208)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-04-03T17:38:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b797f6595c9e45f30032db5a24403f746f5d1b0",
          "body": "This commit adds support for generating a compile error message when using `#[swift_bridge(associated_to = OpaqueRustType)]` on instance methods.\r\n\r\nRelated to #179.\r\n\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    extern \"Rust\" {\r\n        type SomeType;\r\n\r\n        #[swift_bridge(associated_to = \n[…]\nciated_to attribute is used for only an associated method.\r\n  --> tests/ui/invalid-associated-to-attribute.rs:16:25\r\n   |\r\n16 |         fn owned_method(self);\r\n   |                         ^^^^\r\n\r\n```",
          "is_bot": false,
          "headline": "Add compile error for associated_to attribute (#206)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-03-29T12:16:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d03f77295fb60bee9f1bbb67da9d1f49bc765966",
          "body": "This commit adds support tuples from Swift -> Rust, which consist of only primitives.\n\nrelated to #204.\n\nHere's an example of using this:\n\n```rust\n#[swift_bridge::bridge]\nmod ffi {\n    extern \"Swift\" {\n        fn swift_reflect_tuple_primitives(arg: (i32, u32)) -> (i32, u32);\n    }\n}\n```\n\n```rust\n//Rust\n\n//...\nlet tuple = swift_reflect_tuple_primitives((-123, 123));\n//...\n```",
          "is_bot": false,
          "headline": "Support primitive tuples Swift -> Rust (#205)",
          "author_name": "niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-03-27T17:06:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "637c7b353539c1122dacc3a64e7d5dc052a4fec9",
          "body": "This commit adds support for tuples. \r\n\r\nrelated to #188.\r\n\r\nHere's an example of using this:\r\n\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    extern \"Rust\" {\r\n        fn reflect_tuple_primitives(tuple: (i16, u32)) -> (i16, u32);\r\n    }\r\n}\r\n\r\nfn reflect_tuple_primitives(tuple: (i16, u32)) -> (i16, u32) {\r\n    tuple\r\n}\r\n```\r\n\r\n```swift\r\n//...\r\nlet tuple = reflect_tuple_primitives((-1, 10))\r\n//...\r\n```",
          "is_bot": false,
          "headline": "Support tuples (#195)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-03-20T16:33:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d713d36391a09fedc5c1b03cd3a15c814f2f11ef",
          "body": null,
          "is_bot": false,
          "headline": "Add Performance section to README",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-03-19T02:27:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fdca9fcc2080a60d30de958fc4ada2516691581e",
          "body": "This commit adds support for Option<PrimitiveType> in `extern \"Swift\"`\r\nfunctions.\r\n\r\nFor example, the following is now possible:\r\n\r\n```rust\r\nmod ffi {\r\n    extern \"Swift\" {\r\n        fn my_func(arg: Option<u8>) -> Option<bool>;\r\n    }\r\n}\r\n```",
          "is_bot": false,
          "headline": "Support Option<Primitive> in Swift fns (#203)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-03-19T01:52:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03ca04126a8f73f8208fbee3572ea905e1a93aec",
          "body": "Closes https://github.com/chinedufn/swift-bridge/issues/108",
          "is_bot": false,
          "headline": "Fix dangling pointer warning (#202)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-03-18T16:48:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4c5d9bffe2f457822b753a00c93bb3384e8f8ba",
          "body": "This commit adds support for `Vec<f32>`/`Vec<f64>`.\r\n\r\nRust code would look like:\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    #[swift_bridge(swift_repr = \"struct\")]\r\n    struct SomeStruct {\r\n        field: Vec<f32>,\r\n    }\r\n\r\n    extern \"Rust\" {\r\n        fn do_something(val: SomeStruct) -> Vec<f32>;\r\n    }\r\n}\r\n\r\nfn do_something(val: SomeStruct) -> Vec<f32> {\r\n    /* do something */\r\n}\r\n```\r\nOn Swift side, `Double` and `Float` are now `Vectorizable`.",
          "is_bot": false,
          "headline": "Add Vec<f32> and Vec<f64> support (#200)",
          "author_name": "Rodrigo Kreutz",
          "author_login": "rkreutz",
          "committed_at": "2023-03-17T23:26:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b151f1ab72fb3f36f61c42186dc3319b17936a9",
          "body": "This commit adds support for `#[derive(Copy, Clone)]` to `SharedStruct`s.\r\n\r\n## Example\r\n\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    #[swift_bridge(swift_repr = \"struct\")]\r\n    #[derive(Copy, Clone)]\r\n    struct Foo {\r\n        field: u8,\r\n    }\r\n}\r\n```",
          "is_bot": false,
          "headline": "Adding derive() macro support to SharedStructs (#198)",
          "author_name": "Rodrigo Kreutz",
          "author_login": "rkreutz",
          "committed_at": "2023-03-16T16:30:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d60d9ee83a153b07c5413af9f9cc3ad6075c9f4",
          "body": "This commit adds support for returning Result<(), TransparentEnum> from Rust async functions.\r\n\r\nHere's an example of using this:\r\n\r\n```Rust\r\n//Rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    enum SomeEnum {\r\n       //...\r\n    }\r\n    extern \"Rust\" {\r\n        async fn some_function() -> Result<(), SomeEnum>;\r\n    }\r\n}\r\n```\r\n\r\n```Swift\r\n//Swift\r\ndo {\r\n    let value = try await some_function()\r\n    //...\r\n} catch let error as SomeEnum {\r\n    //...\r\n} catch {\r\n    //...\r\n}\r\n```",
          "is_bot": false,
          "headline": "Support Rust async fn ret `Result<(),enum>` (#189)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-03-07T23:08:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68c3a385fcc21810f6f33794fc63003c3b9bb168",
          "body": "This commit adds support for returning `Result<OpaqueRustType, TransparentEnumType>` from `async` Rust functions. \r\nrelated to #159.\r\n\r\nHere's an example of using this.\r\n\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    enum NetworkError {\r\n\tNoData,\r\n\tAuthentication,\r\n    }\r\n    extern \"Rust\" {\r\n  \n[…]\n)\r\n    //...\r\n} catch let error as NetworkError {\r\n    //...\r\n} catch {\r\n    //...\r\n}\r\n```\r\n\r\nNote that This commit doesn't support `Result<TransparentEnum, ()>` and `Result<(), TransparentEnum>` yet.",
          "is_bot": false,
          "headline": "Rust async fn return Result<enum, enum> (#182)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-03-06T23:17:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "20baa731361c9cb86c2b4a9f5c7d0a5f65f6ff45",
          "body": "This commit replaces `ResultVoidAndPtr` with a pointer.  Note that this commit doesn't affect the user experience at all.\r\n\r\nrelated to #183.\r\n\r\nFor example, the following bridge module:\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    extern \"Rust\" {\r\n        type SomeType;\r\n\r\n        fn some_func\n[…]\n\n        Ok(ok) => std::ptr::null_mut(),\r\n        Err(err) => Box::into_raw(Box::new({\r\n            let val: super::SomeType = err;\r\n            val\r\n        })) as *mut super::SomeType\r\n    }\r\n}\r\n```",
          "is_bot": false,
          "headline": "Replace `ResultVoidAndPtr` with pointer (#184)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-03-05T02:17:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "321e03e8d7f51fbf0629f56960defebfced244dc",
          "body": "This commit adds support for returning `Result<transparent enum, transparent enum>` from Rust functions.\r\n\r\nrelated to #159.\r\n\r\nHere's an example of using this.\r\n\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    extern \"Rust\" {\r\n        type ResultTestOpaqueRustType;\r\n    }\r\n    enum ResultTranspar\n[…]\n\n        fn some_function() -> Result<ResultTestOpaqueRustType, ResultTransparentEnum>;\r\n    }\r\n}\r\n\r\n```\r\n\r\n```swift\r\ndo {\r\n    let value = try some_function()\r\n    //...\r\n} catch {\r\n    //...\r\n}\r\n```",
          "is_bot": false,
          "headline": "Support Rust fn return `Result<enum, enum>` (#182)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-03-04T17:51:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5acac1d4ba9269ed0de8d583a9c01509084ab197",
          "body": null,
          "is_bot": false,
          "headline": "0.1.51",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-02-28T01:11:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "832498a8a822690e2ef61e5929a05d713ba2fbe8",
          "body": "This commit adds support for opaque types as enum variant fields. However, This PR doesn't support generic opaque types. I'll write the reason later.\r\n\r\nHere's an example:\r\n\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    extern \"Rust\" {\r\n        #[swift_bridge(Equatable)]\r\n        type Foo;\r\n    \n[…]\nhNamedData.Variant3(foo: Foo.new())\r\nswitch reflect_enum_with_named_data(enumWithNamedData3) {\r\ncase .Variant3(let foo):\r\n    XCTAssertEqual(foo, Foo.new())\r\n    break\r\ndefault:\r\n    XCTFail()\r\n}\r\n```",
          "is_bot": false,
          "headline": "Support opaque types as enum variant fields  (#181)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-02-28T00:18:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "27d7be991141586fb120e4691b7bea7d9eeecd17",
          "body": "This commit adds support for returning `Result<(), OpaqueRust>` but not passing as an arg.\r\n\r\nThe change to `examples/rust-binary-calls-swift-package/build.rs` was to support xcode not existing in the default location (I use the `xcodes` tool).\r\n\r\nThis commit also supports empty types, such as `stru\n[…]\nit_result() -> Result<UnitType, OpaqueType>;\r\n    }\r\n}\r\n\r\nfn null_result() -> Result<(), OpaqueType> {\r\n    Ok(())\r\n}\r\n\r\nfn unit_result() -> Result<UnitType, OpaqueType> {\r\n    Ok(UnitType {})\r\n}\r\n```",
          "is_bot": false,
          "headline": "Support returning Result<(), OpaqueRust> from Rust functions (#180)",
          "author_name": "Josh Faust",
          "author_login": "jfaust",
          "committed_at": "2023-02-26T22:47:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b13c56ab399a9725bdb89b1435cafa76c056b21d",
          "body": "This commit adds documentation that explains that it is possible to\r\ntrigger undefined behavior by violating Rust's borrowing rules using\r\nSwift.\r\n\r\nRelated:\r\n- https://github.com/chinedufn/swift-bridge/issues/161\r\n- https://github.com/chinedufn/swift-bridge/issues/162",
          "is_bot": false,
          "headline": "Improve memory safety documentation (#164)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-02-25T02:23:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c15ba303a2c33dc457ddc2078cd0f8dbdc8e96de",
          "body": "This commit modifies our codegen to elide arguments and return types\r\nthat have exactly one FFI representation, such as `()` `struct Foo;` and\r\n`enum MyEnum { OneVariant }`.\r\n\r\nFor example, the following bridge module:\r\n\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    struct UnitStruct1;\r\n    stru\n[…]\nant }`.\r\n\r\nAlthough, perhaps not that notably, since I'm still not sure whether\r\nanyone will have an FFI use case that involves bridging single-repr\r\ntypes.\r\n\r\nWho knows. Developers will surprise you.",
          "is_bot": false,
          "headline": "Elide types with one FFI representation (#178)",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-02-24T05:19:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e9e312c470f924c93252aba850ec5fd3273714ae",
          "body": null,
          "is_bot": false,
          "headline": "Document the ResultPtrAndPtr FFI support type",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-02-22T10:48:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f087fe2a636b95948c7e909afda86cffebe19ab",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md (#176)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-02-21T13:44:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b7004e2602bb867c0cfba20868e7630e5c35a8c",
          "body": "This commit addresses #160 and adds support for enums with named data. \r\n\r\nHere's an example of using this.\r\n\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    enum EnumWithNamedData {\r\n        Variant1 { hello: String, data_u8: u8 },\r\n        Variant2 { data_i32: i32 },\r\n        Variant3,\r\n    }\r\n\r\n[…]\nnumWithNamedData1) {\r\n    case .Variant1(let hello, let dataU8):\r\n        XCTAssertEqual(hello.toString(), \"hello\")\r\n        XCTAssertEqual(dataU8, 123)\r\n    default:\r\n        XCTFail()\r\n    }\r\n}\r\n```",
          "is_bot": false,
          "headline": "Support enums with named data (#175)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-02-21T12:05:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8c7d1a3bb8c74a16e9417fbecb987896b52e7980",
          "body": null,
          "is_bot": false,
          "headline": "0.1.50",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-02-20T17:54:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81cfce43385efb55394ea066d3084593d4e57626",
          "body": null,
          "is_bot": false,
          "headline": "Cargo fmt",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-02-19T16:46:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe8f5216e6dc7c27cf87c3a72d687e3c3703d326",
          "body": null,
          "is_bot": false,
          "headline": "Simplify all variants empty method",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-02-19T16:05:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2fff2983df90810cf9b4551d8c1de574b50ca979",
          "body": "This commit addresses #160 and adds support for enums with unnamed data. This commit doesn't implement enums with named data.\r\n\r\nHere's an example of using this.\r\n\r\n```rust\r\n//Rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    enum EnumWithUnnamedData {\r\n        Variant1(String, u32),\r\n        Variant2(i\n[…]\nwitch enumWithUnnamedData {\r\ncase .Variant1(let rustString, let valueUInt32):\r\n    XCTAssertEqual(rustString.toString(), \"hello\")\r\n    XCTAssertEqual(valueUInt32, 0)\r\ndefault:\r\n    XCTFail()\r\n}\r\n\r\n```",
          "is_bot": false,
          "headline": "Support enums with unnamed data (#172)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-02-19T15:59:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "09c1f4f5280a2300a3957b100088d8760fbd85f8",
          "body": null,
          "is_bot": false,
          "headline": "cargo fmt",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-02-15T16:36:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b33e95b9c5b2d87ca2485aa972dcbb6f971ef18",
          "body": null,
          "is_bot": false,
          "headline": "Better invalid return type error message",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-02-15T16:17:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7aef343da039d0ff9e2783cf7989443ed39cca3",
          "body": "This commit introduces a compile time error for incorrect return types.\r\n\r\nFor example, the following will now fail to compile:\r\n\r\n```rust\r\n#[swift_bridge::bridge]\r\nmod ffi {\r\n    extern \"Rust\" {\r\n        fn get_reference() -> SomeType;\r\n    }\r\n}\r\n\r\nfn get_reference() -> &'static SomeType {\r\n    &SomeType\r\n}\r\n```\r\n\r\nBefore this commit the above example would compile and calling `get_reference` would cause undefined behavior.",
          "is_bot": false,
          "headline": "Fix to make incorrect return type into error (#169)",
          "author_name": "Mikuroさいな",
          "author_login": "MikuroXina",
          "committed_at": "2023-02-15T16:15:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5a0c893897f9aa2dddfdf1775876ff56b29d97c",
          "body": null,
          "is_bot": false,
          "headline": "Fix Copy attribute UI test",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-02-13T00:59:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e1b469dc2e6b5251f1313787e58b882c7fd61aaa",
          "body": null,
          "is_bot": false,
          "headline": "Document the Shared{Struct,Enum} traits",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-02-12T22:50:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3238914429980d105d8d93de143d391a6f74ffa6",
          "body": null,
          "is_bot": false,
          "headline": "Replace fatalError() with XCTFail() (#163)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-02-11T00:26:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bdbb028dea65148136851ff24bb8a025c5c66557",
          "body": null,
          "is_bot": false,
          "headline": "Fix docs",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-02-09T16:55:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d85c9b10bfcc0889cbdb944f788f831e4aa236db",
          "body": null,
          "is_bot": false,
          "headline": "0.1.49",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-02-09T12:20:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4a11f4e3fa7e9c0e1652f4e21e9b3d94c6c837b",
          "body": "This PR addresses #157 and adds support for returning a `Result<OpaqueRust, OpaqueRust>` from async functions.\n\nHere's an example of using this.\n\n```rust\n// Rust\n#[swift_bridge::bridge]\nmod ffi {\n    extern \"Rust\" {\n        type OpaqueType1;\n        type OpaqueType2;\n        async fn some_function() -> Result<OpaqueType1, OpaqueType2>;\n    }\n}\n```\n\n```Swift\n// Swift\ndo {\n    let opaqueType1 = try await some_function()\n} catch {\n    //...\n}\n```",
          "is_bot": false,
          "headline": "Support `Result<OpaqueRust>` in async fns (#158)",
          "author_name": "Niwaka",
          "author_login": "NiwakaDev",
          "committed_at": "2023-02-09T12:18:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5332f40d3abcfd4d0162d4ea1e1f8123e2ee476f",
          "body": null,
          "is_bot": false,
          "headline": "Alphabetize",
          "author_name": "Chinedu Francis Nwafili",
          "author_login": "chinedufn",
          "committed_at": "2023-02-05T01:35:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 42,
      "commits_last_year": 15,
      "latest_release_at": "2026-01-06T09:04:46Z",
      "latest_release_tag": "0.1.59",
      "releases_from_tags": false,
      "days_since_last_push": 200,
      "active_weeks_last_year": 7,
      "days_since_latest_release": 200,
      "mean_days_between_releases": 116.7
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "swift-bridge",
          "exists": true,
          "license": "Apache-2.0/MIT",
          "keywords": [
            "bindings",
            "ffi",
            "ios",
            "mac",
            "swift"
          ],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/swift-bridge",
          "is_deprecated": false,
          "latest_version": "0.1.59",
          "repository_url": "https://github.com/chinedufn/swift-bridge",
          "versions_count": 60,
          "total_downloads": 1909127,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 55776,
          "first_published_at": "2021-11-23T17:38:25.393174Z",
          "latest_published_at": "2026-01-06T09:03:02.401260Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 200
        }
      ]
    },
    "popularity": {
      "forks": 77,
      "stars": 1119,
      "watchers": 13,
      "fork_history": {
        "days": [
          {
            "date": "2021-12-29",
            "count": 1
          },
          {
            "date": "2021-12-30",
            "count": 1
          },
          {
            "date": "2022-01-02",
            "count": 1
          },
          {
            "date": "2022-01-26",
            "count": 1
          },
          {
            "date": "2022-01-28",
            "count": 1
          },
          {
            "date": "2022-02-19",
            "count": 1
          },
          {
            "date": "2022-03-19",
            "count": 1
          },
          {
            "date": "2022-03-21",
            "count": 1
          },
          {
            "date": "2022-04-10",
            "count": 1
          },
          {
            "date": "2022-04-21",
            "count": 1
          },
          {
            "date": "2022-05-15",
            "count": 1
          },
          {
            "date": "2022-06-04",
            "count": 1
          },
          {
            "date": "2022-08-03",
            "count": 1
          },
          {
            "date": "2022-08-06",
            "count": 1
          },
          {
            "date": "2022-09-12",
            "count": 1
          },
          {
            "date": "2022-11-05",
            "count": 1
          },
          {
            "date": "2022-12-01",
            "count": 1
          },
          {
            "date": "2022-12-13",
            "count": 1
          },
          {
            "date": "2022-12-27",
            "count": 1
          },
          {
            "date": "2023-01-08",
            "count": 1
          },
          {
            "date": "2023-01-12",
            "count": 1
          },
          {
            "date": "2023-01-24",
            "count": 2
          },
          {
            "date": "2023-02-13",
            "count": 1
          },
          {
            "date": "2023-02-17",
            "count": 1
          },
          {
            "date": "2023-02-24",
            "count": 1
          },
          {
            "date": "2023-03-08",
            "count": 1
          },
          {
            "date": "2023-03-11",
            "count": 1
          },
          {
            "date": "2023-04-24",
            "count": 1
          },
          {
            "date": "2023-05-02",
            "count": 1
          },
          {
            "date": "2023-05-11",
            "count": 1
          },
          {
            "date": "2023-05-29",
            "count": 1
          },
          {
            "date": "2023-06-04",
            "count": 1
          },
          {
            "date": "2023-06-14",
            "count": 1
          },
          {
            "date": "2023-08-19",
            "count": 1
          },
          {
            "date": "2023-09-06",
            "count": 1
          },
          {
            "date": "2023-11-07",
            "count": 1
          },
          {
            "date": "2023-11-15",
            "count": 1
          },
          {
            "date": "2023-12-12",
            "count": 1
          },
          {
            "date": "2024-01-09",
            "count": 1
          },
          {
            "date": "2024-01-28",
            "count": 1
          },
          {
            "date": "2024-02-01",
            "count": 1
          },
          {
            "date": "2024-03-05",
            "count": 1
          },
          {
            "date": "2024-03-14",
            "count": 1
          },
          {
            "date": "2024-03-17",
            "count": 1
          },
          {
            "date": "2024-04-09",
            "count": 1
          },
          {
            "date": "2024-04-28",
            "count": 1
          },
          {
            "date": "2024-05-10",
            "count": 1
          },
          {
            "date": "2024-06-17",
            "count": 1
          },
          {
            "date": "2024-07-19",
            "count": 1
          },
          {
            "date": "2024-08-26",
            "count": 1
          },
          {
            "date": "2024-09-04",
            "count": 1
          },
          {
            "date": "2024-09-13",
            "count": 1
          },
          {
            "date": "2024-10-14",
            "count": 1
          },
          {
            "date": "2024-10-23",
            "count": 1
          },
          {
            "date": "2024-11-10",
            "count": 1
          },
          {
            "date": "2024-12-09",
            "count": 1
          },
          {
            "date": "2025-01-26",
            "count": 1
          },
          {
            "date": "2025-02-07",
            "count": 1
          },
          {
            "date": "2025-04-07",
            "count": 1
          },
          {
            "date": "2025-04-24",
            "count": 1
          },
          {
            "date": "2025-05-08",
            "count": 1
          },
          {
            "date": "2025-05-10",
            "count": 1
          },
          {
            "date": "2025-05-25",
            "count": 1
          },
          {
            "date": "2025-10-01",
            "count": 1
          },
          {
            "date": "2025-10-10",
            "count": 1
          },
          {
            "date": "2025-10-27",
            "count": 1
          },
          {
            "date": "2025-11-10",
            "count": 1
          },
          {
            "date": "2025-11-30",
            "count": 1
          },
          {
            "date": "2025-12-03",
            "count": 2
          },
          {
            "date": "2026-03-14",
            "count": 1
          },
          {
            "date": "2026-04-25",
            "count": 2
          },
          {
            "date": "2026-05-15",
            "count": 1
          },
          {
            "date": "2026-07-01",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 76,
        "total_forks": 77
      },
      "star_history": null,
      "open_issues_and_prs": 101
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "Cargo.toml",
        "SwiftRustIntegrationTestRunner/integration-test-create-swift-package/Cargo.toml",
        "SwiftRustIntegrationTestRunner/swift-package-rust-library-fixture/Cargo.toml",
        "crates/swift-bridge-build/Cargo.toml",
        "crates/swift-bridge-cli/Cargo.toml",
        "crates/swift-bridge-ir/Cargo.toml",
        "crates/swift-bridge-macro/Cargo.toml",
        "crates/swift-integration-tests/Cargo.toml",
        "examples/async-functions/Cargo.toml",
        "examples/codegen-visualizer/Cargo.toml",
        "examples/multiple-bridge-modules/Cargo.toml",
        "examples/rust-binary-calls-swift-package/Cargo.toml",
        "examples/without-a-bridge-module/Cargo.toml"
      ],
      "largest_source_bytes": 79752,
      "source_files_sampled": 241,
      "oversized_source_files": 2,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "Cargo.toml"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 24,
        "malicious_count": 0,
        "assessed_package": "crates:swift-bridge@0.1.59",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "crates"
      ],
      "dependencies": [
        {
          "name": "swift-bridge-macro",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.59"
        },
        {
          "name": "tokio",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1"
        },
        {
          "name": "once_cell",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.9"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "once_cell",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "swift-bridge-macro",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "tokio",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "clap",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "crossbeam-channel",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "proc-macro2",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "quote",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "reqwest",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "swift-bridge-build",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "swift-bridge-ir",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "syn",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "tempfile",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "trybuild",
            "direct": false,
            "version": null,
            "ecosystem": "crates"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 13,
        "direct_count": 3,
        "indirect_count": 10
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 9,
        "merged_prs": 159,
        "open_issues": 92,
        "closed_ratio": 0.521,
        "closed_issues": 100,
        "closed_unmerged_prs": 10
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "chinedufn",
          "commits": 334,
          "avatar_url": "https://avatars.githubusercontent.com/u/2099811?v=4"
        },
        {
          "type": "User",
          "login": "NiwakaDev",
          "commits": 29,
          "avatar_url": "https://avatars.githubusercontent.com/u/61189782?v=4"
        },
        {
          "type": "User",
          "login": "Choochmeque",
          "commits": 7,
          "avatar_url": "https://avatars.githubusercontent.com/u/8397079?v=4"
        },
        {
          "type": "User",
          "login": "bes",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/85731?v=4"
        },
        {
          "type": "User",
          "login": "Jomy10",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/62475953?v=4"
        },
        {
          "type": "User",
          "login": "jfaust",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/1388377?v=4"
        },
        {
          "type": "User",
          "login": "rkreutz",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/8869678?v=4"
        },
        {
          "type": "User",
          "login": "onato",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/107999?v=4"
        },
        {
          "type": "User",
          "login": "akesson",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/1822029?v=4"
        },
        {
          "type": "User",
          "login": "simlay",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/1163510?v=4"
        }
      ],
      "contributors_sampled": 33,
      "top_contributor_share": 0.811
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "gh-pages.yml",
        "test.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 4,
            "reason": "9 out of 22 merged PRs checked by a CI test -- score normalized to 4",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 4,
            "reason": "Found 13/30 approved changesets -- score normalized to 4",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "0 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "e527dc7454bebbfab537d842990bf3a1672e676c",
        "ran_at": "2026-07-25T12:19:02Z",
        "aggregate_score": 3.4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-01-06T09:05:18Z",
      "oldest_open_prs": [
        {
          "number": 199,
          "created_at": "2023-03-16T22:50:02Z",
          "last_comment_at": "2024-01-09T08:35:59Z",
          "last_comment_author": "wooden-worm"
        },
        {
          "number": 209,
          "created_at": "2023-04-07T23:19:20Z",
          "last_comment_at": "2024-08-15T03:38:40Z",
          "last_comment_author": "chinedufn"
        },
        {
          "number": 248,
          "created_at": "2024-01-09T20:16:12Z",
          "last_comment_at": "2024-04-30T16:02:52Z",
          "last_comment_author": "extrawurst"
        },
        {
          "number": 262,
          "created_at": "2024-03-17T23:44:59Z",
          "last_comment_at": "2024-06-01T22:33:02Z",
          "last_comment_author": "chinedufn"
        },
        {
          "number": 307,
          "created_at": "2025-01-26T23:09:37Z",
          "last_comment_at": "2025-08-27T22:47:50Z",
          "last_comment_author": "chinedufn"
        },
        {
          "number": 340,
          "created_at": "2025-10-10T09:12:47Z",
          "last_comment_at": "2025-10-11T23:54:50Z",
          "last_comment_author": "chinedufn"
        },
        {
          "number": 341,
          "created_at": "2025-10-11T09:28:12Z",
          "last_comment_at": "2025-10-26T14:34:38Z",
          "last_comment_author": "chinedufn"
        },
        {
          "number": 369,
          "created_at": "2026-04-25T21:59:57Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 371,
          "created_at": "2026-07-01T21:56:57Z",
          "last_comment_at": "2026-07-03T03:40:44Z",
          "last_comment_author": "finn-devs"
        }
      ],
      "last_merged_pr_at": "2026-01-06T08:49:54Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 5,
          "created_at": "2021-12-29T14:05:17Z",
          "last_comment_at": "2025-02-06T14:07:07Z",
          "last_comment_author": "chinedufn"
        },
        {
          "number": 10,
          "created_at": "2022-01-17T09:07:27Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 14,
          "created_at": "2022-01-21T15:31:58Z",
          "last_comment_at": "2023-02-24T05:24:39Z",
          "last_comment_author": "chinedufn"
        },
        {
          "number": 44,
          "created_at": "2022-03-16T01:17:51Z",
          "last_comment_at": "2022-05-01T10:41:39Z",
          "last_comment_author": "chinedufn"
        },
        {
          "number": 47,
          "created_at": "2022-03-18T22:04:20Z",
          "last_comment_at": "2022-03-18T23:13:27Z",
          "last_comment_author": "chinedufn"
        },
        {
          "number": 58,
          "created_at": "2022-04-21T10:59:15Z",
          "last_comment_at": "2025-02-27T11:03:44Z",
          "last_comment_author": "chinedufn"
        },
        {
          "number": 62,
          "created_at": "2022-04-24T00:29:31Z",
          "last_comment_at": "2023-01-27T19:07:05Z",
          "last_comment_author": "chinedufn"
        },
        {
          "number": 65,
          "created_at": "2022-04-25T06:47:17Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 67,
          "created_at": "2022-04-26T07:59:22Z",
          "last_comment_at": "2023-01-23T02:12:22Z",
          "last_comment_author": "chinedufn"
        },
        {
          "number": 68,
          "created_at": "2022-04-26T08:09:41Z",
          "last_comment_at": "2023-07-12T06:19:39Z",
          "last_comment_author": "chinedufn"
        },
        {
          "number": 69,
          "created_at": "2022-04-26T08:14:45Z",
          "last_comment_at": "2023-01-28T00:05:32Z",
          "last_comment_author": "chinedufn"
        },
        {
          "number": 76,
          "created_at": "2022-04-28T21:01:02Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 91,
          "created_at": "2022-05-05T18:52:46Z",
          "last_comment_at": "2023-02-26T16:58:12Z",
          "last_comment_author": "antoniusnaumann"
        },
        {
          "number": 92,
          "created_at": "2022-05-08T12:12:43Z",
          "last_comment_at": "2023-01-27T19:23:35Z",
          "last_comment_author": "chinedufn"
        },
        {
          "number": 96,
          "created_at": "2022-05-10T22:25:15Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 97,
          "created_at": "2022-05-11T01:57:29Z",
          "last_comment_at": "2023-01-24T13:01:13Z",
          "last_comment_author": "chinedufn"
        },
        {
          "number": 99,
          "created_at": "2022-05-16T15:57:59Z",
          "last_comment_at": "2023-01-21T12:30:43Z",
          "last_comment_author": "chinedufn"
        },
        {
          "number": 102,
          "created_at": "2022-07-20T01:13:41Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 106,
          "created_at": "2022-07-29T16:40:03Z",
          "last_comment_at": "2024-05-11T23:10:09Z",
          "last_comment_author": "integer-overflown"
        },
        {
          "number": 112,
          "created_at": "2022-09-25T17:47:37Z",
          "last_comment_at": "2022-12-08T12:15:37Z",
          "last_comment_author": "chinedufn"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/chinedufn/swift-bridge",
    "host": "github.com",
    "name": "swift-bridge",
    "owner": "chinedufn"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 55,
      "inputs": {
        "security": 47,
        "vitality": 39,
        "community": 66,
        "governance": 60,
        "engineering": 64
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "at_risk",
        "name": "Vitality",
        "value": 39,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "critical",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 19,
            "inputs": {
              "commits_last_year": 15,
              "human_commit_share": 1,
              "days_since_last_push": 200,
              "active_weeks_last_year": 7
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 200 days ago",
                "points": 3.6,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 200
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "7/52 weeks with commits",
                "points": 4.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "15 commits in the last year",
                "points": 10.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 15
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "0 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 70,
            "inputs": {
              "releases_count": 42,
              "latest_release_tag": "0.1.59",
              "releases_from_tags": false,
              "days_since_latest_release": 200,
              "mean_days_between_releases": 116.7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "42 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 42
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 200 days ago",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 200
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~116.7 days",
                "points": 19.8,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 116.7
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "dormant",
              "guards": [
                "recent_release",
                "dependencies_clean"
              ],
              "signals": [
                "issue_rot",
                "scorecard_unmaintained"
              ],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": 7,
              "unanswered_open_issues": 7,
              "days_since_last_merged_pr": 200,
              "days_since_last_human_commit": 200,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "no human commit for 200 days, with nothing left unanswered; held at dormant by a release within the year, no affected dependency",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_quiet",
                    "params": {
                      "days": 200
                    }
                  },
                  {
                    "code": "abandonment_guarded",
                    "params": {
                      "guards": "a release within the year, no affected dependency"
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 66,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "good",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "forks": 77,
              "stars": 1119,
              "watchers": 13,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1,119 stars",
                "points": 49.4,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1119
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "77 forks",
                "points": 15.7,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 77
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "13 watchers",
                "points": 6,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "good",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 79,
            "inputs": {
              "packages": [
                "swift-bridge"
              ],
              "dependents": null,
              "ecosystems": "crates",
              "total_downloads": 1909127,
              "monthly_downloads": 55776
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "55,776 downloads/month across crates",
                "points": 63.3,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 55776,
                      "ecosystems": "crates"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 60,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 27,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 33,
              "top_contributor_share": 0.811
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 81% of commits",
                "points": 4.3,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 81
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "33 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 33
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 66,
            "inputs": {
              "merged_prs": 159,
              "open_issues": 92,
              "closed_issues": 100,
              "issue_closed_ratio": 0.521,
              "closed_unmerged_prs": 10
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "52% of issues closed",
                "points": 24.4,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 52
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "159/169 decided PRs merged",
                "points": 36,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 159,
                      "decided": 169
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 13/30 approved changesets -- score normalized to 4",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 68,
            "inputs": {
              "followers": 539,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "chinedufn",
              "public_repos": 106,
              "account_age_days": 5101
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "539 followers of chinedufn",
                "points": 19.6,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 539,
                      "login": "chinedufn"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "106 public repos, account ~13 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 106
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 13
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 91,
            "inputs": {
              "packages": [
                "swift-bridge"
              ],
              "ecosystems": "crates",
              "any_deprecated": false,
              "min_days_since_publish": 200
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on crates",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "crates"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 200 days ago",
                "points": 26,
                "status": "partial",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 200
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "60 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 60
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 64,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "9 out of 22 merged PRs checked by a CI test -- score normalized to 4",
                "points": 8,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [
                "rust",
                "swift",
                "ffi",
                "interop",
                "ios"
              ],
              "has_wiki": true,
              "homepage": "https://chinedufn.github.io/swift-bridge",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://chinedufn.github.io/swift-bridge",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "5 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 47,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 34,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 3.4
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "9 out of 22 merged PRs checked by a CI test -- score normalized to 4",
                "points": 1,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 13/30 approved changesets -- score normalized to 4",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "0 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the crates:swift-bridge@0.1.59 runtime dependency closure — what installing the published package pulls in — 24 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "crates:swift-bridge@0.1.59",
                  "assessed": 24
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 24,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 24,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 12
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 51,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.79,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "79 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 79,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 46,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "Cargo.toml",
                "SwiftRustIntegrationTestRunner/integration-test-create-swift-package/Cargo.toml",
                "SwiftRustIntegrationTestRunner/swift-package-rust-library-fixture/Cargo.toml",
                "crates/swift-bridge-build/Cargo.toml",
                "crates/swift-bridge-cli/Cargo.toml",
                "crates/swift-bridge-ir/Cargo.toml",
                "crates/swift-bridge-macro/Cargo.toml",
                "crates/swift-integration-tests/Cargo.toml",
                "examples/async-functions/Cargo.toml",
                "examples/codegen-visualizer/Cargo.toml",
                "examples/multiple-bridge-modules/Cargo.toml",
                "examples/rust-binary-calls-swift-package/Cargo.toml",
                "examples/without-a-bridge-module/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Cargo.toml, SwiftRustIntegrationTestRunner/integration-test-create-swift-package/Cargo.toml, SwiftRustIntegrationTestRunner/swift-package-rust-library-fixture/Cargo.toml (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "Cargo.toml, SwiftRustIntegrationTestRunner/integration-test-create-swift-package/Cargo.toml, SwiftRustIntegrationTestRunner/swift-package-rust-library-fixture/Cargo.toml"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Rust (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Rust",
              "largest_source_bytes": 79752,
              "source_files_sampled": 241,
              "oversized_source_files": 2
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Rust (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "2/241 source files over 60KB",
                "points": 54.5,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 241,
                      "oversized": 2
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T12:19:25.911514Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/c/chinedufn/swift-bridge.svg",
  "full_name": "chinedufn/swift-bridge",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikencrates.io.