{"id":13596952,"url":"https://github.com/bitcoindevkit/bdk-ffi","last_synced_at":"2026-02-12T20:12:31.094Z","repository":{"id":37894119,"uuid":"375193209","full_name":"bitcoindevkit/bdk-ffi","owner":"bitcoindevkit","description":null,"archived":false,"fork":false,"pushed_at":"2026-02-02T20:09:02.000Z","size":6440,"stargazers_count":118,"open_issues_count":33,"forks_count":66,"subscribers_count":14,"default_branch":"master","last_synced_at":"2026-02-03T03:32:50.857Z","etag":null,"topics":["android","ios","jvm","kotlin","rust","swift"],"latest_commit_sha":null,"homepage":"https://bitcoindevkit.org/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bitcoindevkit.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-06-09T01:42:53.000Z","updated_at":"2026-02-02T15:12:57.000Z","dependencies_parsed_at":"2023-02-17T12:00:39.654Z","dependency_job_id":"b64db1ec-2bb1-4825-8fc7-cbe32264c5db","html_url":"https://github.com/bitcoindevkit/bdk-ffi","commit_stats":{"total_commits":1046,"total_committers":25,"mean_commits":41.84,"dds":0.5219885277246654,"last_synced_commit":"b25d48f6718fc58eee24331ba17a870973565c54"},"previous_names":[],"tags_count":45,"template":false,"template_full_name":null,"purl":"pkg:github/bitcoindevkit/bdk-ffi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitcoindevkit%2Fbdk-ffi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitcoindevkit%2Fbdk-ffi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitcoindevkit%2Fbdk-ffi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitcoindevkit%2Fbdk-ffi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bitcoindevkit","download_url":"https://codeload.github.com/bitcoindevkit/bdk-ffi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitcoindevkit%2Fbdk-ffi/sbom","scorecard":{"id":43654,"data":{"date":"2025-08-11","repo":{"name":"github.com/bitcoindevkit/bdk-ffi","commit":"bf8e48a264044604ec27b6d2dfdfdf94077febf3"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6.5,"checks":[{"name":"Maintained","score":10,"reason":"30 commit(s) and 19 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":8,"reason":"binaries present in source code","details":["Warn: binary detected: bdk-android/gradle/wrapper/gradle-wrapper.jar:1","Warn: binary detected: bdk-ffi/tests/jna/jna-5.14.0.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/publish-android.yaml:9"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":6,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'master'","Info: 'force pushes' disabled on branch 'master'","Warn: required approving review count is 1 on branch 'master'","Warn: codeowners review is not required on branch 'master'","Warn: no status checks found to merge onto branch 'master'","Info: PRs are required in order to make changes on branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/audit.yml:1","Info: found token with 'none' permissions: .github/workflows/cont_integration.yml:1","Info: found token with 'none' permissions: .github/workflows/kotlin-api-docs.yaml:1","Info: found token with 'none' permissions: .github/workflows/live-tests.yaml:1","Info: found token with 'none' permissions: .github/workflows/publish-android.yaml:1","Info: found token with 'none' permissions: .github/workflows/test-android.yaml:1","Info: found token with 'none' permissions: .github/workflows/test-swift.yaml:1","Warn: no topLevel permission defined: .github/workflows/zizmor.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: all commits (30) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":1,"reason":"dependency not pinned by hash detected -- score normalized to 1","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/audit.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/audit.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cont_integration.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/cont_integration.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cont_integration.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/cont_integration.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cont_integration.yml:78: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/cont_integration.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/kotlin-api-docs.yaml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/kotlin-api-docs.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/kotlin-api-docs.yaml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/kotlin-api-docs.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/kotlin-api-docs.yaml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/kotlin-api-docs.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/kotlin-api-docs.yaml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/kotlin-api-docs.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/live-tests.yaml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/live-tests.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/live-tests.yaml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/live-tests.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/live-tests.yaml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/live-tests.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/live-tests.yaml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/live-tests.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish-android.yaml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/publish-android.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish-android.yaml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/publish-android.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish-android.yaml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/publish-android.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-android.yaml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/test-android.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-android.yaml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/test-android.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-android.yaml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/test-android.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-swift.yaml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/test-swift.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/zizmor.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/zizmor.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/zizmor.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/bitcoindevkit/bdk-ffi/zizmor.yml/master?enable=pin","Info:   0 out of  21 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   1 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: RUSTSEC-2025-0047 / GHSA-qx2v-8332-m4fv"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-14T22:10:58.500Z","repository_id":37894119,"created_at":"2025-08-14T22:10:58.500Z","updated_at":"2025-08-14T22:10:58.500Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29380132,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T19:05:20.189Z","status":"ssl_error","status_checked_at":"2026-02-12T19:01:44.216Z","response_time":55,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","ios","jvm","kotlin","rust","swift"],"created_at":"2024-08-01T17:00:15.640Z","updated_at":"2026-02-12T20:12:31.081Z","avatar_url":"https://github.com/bitcoindevkit.png","language":"Rust","funding_links":[],"categories":["Libraries"],"sub_categories":[],"readme":"# Language Bindings for BDK\n\n\u003cp\u003e\n  \u003ca href=\"https://github.com/bitcoindevkit/bdk-ffi/blob/master/LICENSE\"\u003e\u003cimg alt=\"MIT or Apache-2.0 Licensed\" src=\"https://img.shields.io/badge/license-MIT%2FApache--2.0-blue.svg\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://discord.gg/d7NkDKm\"\u003e\u003cimg alt=\"Chat on Discord\" src=\"https://img.shields.io/discord/753336465005608961?logo=discord\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nThe code in this repository creates a library ready for export to other languages using [uniffi-rs] for the Rust-based [bdk_wallet] library from the [Bitcoin Dev Kit] project.\n\nEach supported language (Kotlin for Android and Swift for iOS) and the platforms it's packaged for has its own directory. The Rust code in this project is in the bdk-ffi directory and is a wrapper around the [bdk_wallet] library to expose its APIs in a uniform way using the [mozilla/uniffi-rs] bindings generator for each supported target language.\n\n## Supported target languages and platforms\n\nThe below directories include instructions for building and using the language binding for [bdk_wallet] supported by this project.\n\n| Language | Platform              | Published Package | Building Documentation | API Docs              |\n| -------- |-----------------------|-------------------|------------------------|-----------------------|\n| Kotlin   | Android               | [bdk-android]     | [Readme bdk-android]   | [Android API Docs]    |\n| Swift    | iOS, macOS            | [bdk-swift]       | [Readme bdk-swift]     |                       |\n\n## Other supported languages maintained in separate repositories\n\nThe `bdk-ffi` codebase in this repository can be used to produce language bindings for more than Swift and Kotlin. Some of these require the use of uniffi 3rd party plugins and some not. Below are some of the libraries that use the bdk-ffi API, but are maintained separately. Refer to their individual READMEs for information on their state of production-readiness.\n\n| Language | Platform              | Published Package         | Repository   | API Docs              |\n| -------- |-----------------------|---------------------------|--------------|-----------------------|\n| Kotlin   | JVM                   | [bdk-jvm (Maven Central)] | [bdk-jvm]    |                       |\n| Python   | Linux, macOS, Windows | [bdk-python (PyPI)]       | [bdk-python] |                       |\n\n## Building and testing the libraries\n\nIf you are familiar with the build tools for the specific languages you wish to build the libraries for, you can use their normal build/test workflows. We also include some [just](https://just.systems/) files to simplify the work across different languages. If you have the `just` tool installed on your system, you can simply call the commands defined in the justfiles, for example:\n\n```sh\ncd bdk-android\njust build\njust test\njust publish-local\n```\n\n## Contributing\n\nTo add new structs and functions, see the [UniFFI User Guide](https://mozilla.github.io/uniffi-rs/) and the [uniffi-examples](https://thunderbiscuit.github.io/uniffi-examples/) repository.\n\n## Goals\n\n1. Language bindings should feel idiomatic in target languages/platforms\n2. Adding new targets should be easy \n3. Getting up and running should be easy \n4. Contributing should be easy \n5. Get it right, then automate\n\n## Verifying Signatures\n\nBoth libraries and all their corresponding artifacts are signed with a PGP key you can find in the\nroot of this repository. To verify the signatures follow the below steps:\n\n1. Import the PGP key in your keyring.\n```shell\n# Navigate to the root of the repository and import the ./PGP-BDK-BINDINGS.asc public key\ngpg --import ./PGP-BDK-BINDINGS.asc\n    \n# Alternatively, you can import the key directly from a public key server\ngpg --keyserver keyserver.ubuntu.com --receive-key 2768C43E8803C6A3\n    \n# Verify that the correct key was imported\ngpg --list-keys\n# You should see the below output\npub   ed25519 2022-08-31 [SC]\n    88AD93AC4589FD090FF3B8D12768C43E8803C6A3\nuid           [ unknown] bitcoindevkit-bindings \u003cbindings@bitcoindevkit.org\u003e\nsub   cv25519 2022-08-31 [E]\n```\n\n2. Download the binary artifacts and corresponding signature files.\n- from [bdk-jvm]\n    - `bdk-jvm-\u003cversion\u003e.jar`\n    - `bdk-jvm-\u003cversion\u003e.jar.asc`\n- from [bdk-android]\n    - `bdk-android-\u003cversion\u003e.aar`\n    - `bdk-android-\u003cversion\u003e.aar.asc`\n\n3. Verify the signatures.\n```shell\ngpg --verify bdk-jvm-\u003cversion\u003e.jar.asc \ngpg --verify bdk-android-\u003cversion\u003e.aar.asc\n\n# you should see a \"Good signature\" result\ngpg: Good signature from \"bitcoindevkit-bindings \u003cbindings@bitcoindevkit.org\u003e\" [unknown]\n```\n\n### PGP Metadata\n\nFull key ID: `88AD 93AC 4589 FD09 0FF3 B8D1 2768 C43E 8803 C6A3`  \nFingerprint: `2768C43E8803C6A3`  \nName: `bitcoindevkit-bindings`  \nEmail: `bindings@bitcoindevkit.org`\n\n## Thanks\n\nThis project is made possible thanks to the wonderful work by the [mozilla/uniffi-rs] team.\n\n[bdk-jvm]: https://github.com/bitcoindevkit/bdk-jvm\n[bdk-jvm (Maven Central)]: https://central.sonatype.com/artifact/org.bitcoindevkit/bdk-jvm/\n[bdk-android]: https://central.sonatype.com/artifact/org.bitcoindevkit/bdk-android/\n[bdk-swift]: https://github.com/bitcoindevkit/bdk-swift\n[bdk-python]: https://github.com/bitcoindevkit/bdk-python\n[bdk-python (PyPI)]: https://pypi.org/project/bdk-python\n[mozilla/uniffi-rs]: https://github.com/mozilla/uniffi-rs\n[bdk_wallet]: https://github.com/bitcoindevkit/bdk_wallet\n[Bitcoin Dev Kit]: https://github.com/bitcoindevkit\n[uniffi-rs]: https://github.com/mozilla/uniffi-rs\n[Readme bdk-android]: https://github.com/bitcoindevkit/bdk-ffi/tree/master/bdk-android\n[Readme bdk-swift]: https://github.com/bitcoindevkit/bdk-swift\n[Android API Docs]: https://bitcoindevkit.org/android\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitcoindevkit%2Fbdk-ffi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbitcoindevkit%2Fbdk-ffi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitcoindevkit%2Fbdk-ffi/lists"}