> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dynamic.xyz/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Exporting embedded wallet keys

> Allow users to export their embedded wallet private keys in the Swift SDK.

## Overview

Dynamic allows users to export their embedded wallet private keys for maximum control and portability. During export:

1. The key shares are temporarily recombined on the user's device using secure MPC
2. The private key is constructed client-side and provided to the user

This ensures users maintain true self-custody and can always access their assets, even outside of Dynamic's ecosystem.

<Note>
  When implementing Dynamic in a custom UI, ensure you surface this flow to your end-users so they always maintain control of their wallet.
</Note>

## Private key export settings

By default, users can export their private keys from embedded wallets. You can control this setting in the [Embedded Wallets dashboard](https://app.dynamic.xyz/dashboard/embedded-wallets/dynamic). Navigate to the **Security** section and toggle **Private Key Exports** to enable or disable private key exports.

<Frame>
  <img src="https://mintcdn.com/dynamic-docs/tU4QJtnK1LxWeTz7/images/dashboard/dashboard-private-key-export-toggle.png?fit=max&auto=format&n=tU4QJtnK1LxWeTz7&q=85&s=525fb8534ae79260f8130e8c7707a348" alt="Private Key Export Toggle" width="2152" height="210" data-path="images/dashboard/dashboard-private-key-export-toggle.png" />
</Frame>

<Warning>
  Consider disabling private key exports if your use case requires additional security controls. Disabling exports prevents users from exporting keys, which can reduce the risk of key exposure but limits user portability. See [Best Practices - Private Key Export Controls](/overview/security/recommendedpaths#private-key-export-controls) for guidance.
</Warning>

## Revealing the private key

To open the export wallet flow on behalf of your users, call `revealEmbeddedWalletPrivateKey()` on the SDK's UI module. This presents a secure flow where only the end-user can see their private key.

```swift theme={"system"}
let sdk = DynamicSDK.instance()

sdk.ui.revealEmbeddedWalletPrivateKey()
```

### Example

```swift theme={"system"}
import SwiftUI
import DynamicSDKSwift

struct RevealPrivateKeyButton: View {
    private let sdk = DynamicSDK.instance()

    var body: some View {
        Button("Reveal Private Key") {
            sdk.ui.revealEmbeddedWalletPrivateKey()
        }
    }
}
```

<Warning>
  You should always provide your end-users with a path to reveal and replicate their keys from their embedded wallet. When using a custom UI embedded wallet flow, ensure you add a path for users to complete this step using the method described above.
</Warning>

End-users should be aware that replicating their wallet credentials can expose their wallet to risk if the credentials are not stored securely. Users are advised to store their credentials in a secure location and not share them with anyone. When implementing Dynamic in a custom UI, we recommend communicating these warnings to users.
