---
title: "Integrate the SDK"
description: "Learn how to create a walt.id Wallet SDK instance in Kotlin or Swift and run your first holder flow."
stack: "Community Stack (open source) — version 1.1.1"
stack_version: "1.1.1"
stack_comparison: https://docs.walt.id/community-vs-enterprise.md
canonical_url: https://docs.walt.id/community-stack/mobile-wallet/integrate-the-sdk
generated: 2026-10-01
---
# Integrate the SDK

This guide shows you how to add the Wallet SDK to your app, create a wallet, initialize a signing identity, and drive [receive](https://docs.walt.id/community-stack/mobile-wallet/receive-credentials.md) and [present](https://docs.walt.id/community-stack/mobile-wallet/present-credentials.md) from your own UI.

## Prerequisites

Before you begin, ensure you have:

- **An Android or iOS application** — Android / Kotlin Multiplatform uses `waltid-openid4vc-wallet-mobile`. Native iOS uses the `WalletSDK` Swift package.
- **A way to test offers and requests** — Use [portal2.demo.walt.id](https://portal2.demo.walt.id).

---

## Add the Library

| Platform | Artifact |
|---|---|
| Android / Kotlin Multiplatform | [`waltid-openid4vc-wallet-mobile`](https://github.com/walt-id/waltid-identity/tree/main/waltid-libraries/protocols/waltid-openid4vc-wallet-mobile) |
| Native iOS | [`WalletSDK`](https://github.com/walt-id/waltid-identity/tree/main/waltid-libraries/protocols/waltid-wallet-sdk-ios) |

Generated API docs: [Android](https://sdk.docs.walt.id) and [iOS](https://sdk-ios.docs.walt.id). For local XCFramework and Swift package setup, see the [Mobile Wallet Development Guide](https://github.com/walt-id/waltid-identity/blob/main/docs/mobile-wallet-development.md).

## Create a Wallet

**Option: Kotlin**

```kotlin
val wallet = MobileWalletFactory(context).create(
    MobileWalletConfig(walletId = "consumer-wallet")
)
when (val result = wallet.signingIdentity.initialize()) {
    is SigningIdentityOperationResult.Active -> openWallet(result.identity)
    is SigningIdentityOperationResult.Pending -> showPendingSetup(result.identityId)
    is SigningIdentityOperationResult.Failed -> showFailure(result.reason)
}
```

**Option: Swift**

```swift
import WalletSDK

let wallet = try await Wallet(
    configuration: WalletConfiguration(
        walletID: "consumer-wallet",
        defaultKeyUseAuthorizationPolicy: .biometricCurrentSet,
        keyUseAuthorizationPrompt: WalletKeyUseAuthorizationPrompt(
            message: "Authorize wallet signing",
            cancelText: "Cancel"
        )
    )
)
guard case .active(let identity) = try await wallet.signingIdentity.initialize() else {
    return
}
```

Android `MobileWalletFactory` needs an application `Context`. Pass a resumed `FragmentActivity` provider if you use biometric signing. iOS apps import `WalletSDK` only — keep Kotlin Multiplatform types behind that package.

🎉 You've created a wallet with an active signing identity.

## First Flows

1. Receive an offer from [portal2.demo.walt.id](https://portal2.demo.walt.id) — [Receiving Credentials via OID4VCI](https://docs.walt.id/community-stack/mobile-wallet/receive-credentials.md).
2. Present back to Portal2 — [Presenting Credentials via OID4VP](https://docs.walt.id/community-stack/mobile-wallet/present-credentials.md).
3. Optional: register for the [Digital Credentials API](https://docs.walt.id/community-stack/mobile-wallet/digital-credentials-api.md) and [proximity sharing](https://docs.walt.id/community-stack/mobile-wallet/proximity-sharing.md).

For a complete UI reference, start from the [sample apps](https://docs.walt.id/community-stack/mobile-wallet/try-the-demo.md).

## Next Steps

- **See what belongs in the SDK vs your app** — [Architecture](https://docs.walt.id/community-stack/mobile-wallet/architecture.md).
- **Configure persistence and signing policy** — [Keys and Storage](https://docs.walt.id/community-stack/mobile-wallet/keys-and-storage.md).
- **Build the SDKs locally** — [Mobile Wallet Development Guide](https://github.com/walt-id/waltid-identity/blob/main/docs/mobile-wallet-development.md).
