> For the complete documentation index, see [llms.txt](/llms.txt).

# Vue composables for Solana

Embedded Wallets provides a set of Vue composables for basic Solana wallet operations. These composables are designed to simplify common Solana interactions in your Vue app.

info

For advanced Solana features, you should use [@solana/web3.js](https://solana.com/docs/clients/official/javascript#solana-web3js) to interact with the Solana blockchain using the Embedded Wallets Vue composables.

- npm
- Yarn
- pnpm
- Bun

```
npm install @solana/web3.js

```

```
yarn add @solana/web3.js

```

```
pnpm add @solana/web3.js

```

```
bun add @solana/web3.js

```

## Solana composables[​](#solana-composables "Direct link to Solana composables")

| Composable Name                                                                                      | Description                                  |
| ---------------------------------------------------------------------------------------------------- | -------------------------------------------- |
| [useSignAndSendTransaction](/embedded-wallets/sdk/vue/solana-composables/useSignAndSendTransaction/) | Sign and send a Solana transaction.          |
| [useSignMessage](/embedded-wallets/sdk/vue/solana-composables/useSignMessage/)                       | Sign a message with the Solana wallet.       |
| [useSignTransaction](/embedded-wallets/sdk/vue/solana-composables/useSignTransaction/)               | Sign a Solana transaction (without sending). |
| [useSolanaWallet](/embedded-wallets/sdk/vue/solana-composables/useSolanaWallet/)                     | Access Solana wallet state and utilities.    |

## Composable usage examples[​](#composable-usage-examples "Direct link to Composable usage examples")

### Get Solana wallet[​](#get-solana-wallet "Direct link to Get Solana wallet")

```
<template>
  <div>
    <h2>Solana Wallet</h2>
    <p>Connected: {{ connected ? 'Yes' : 'No' }}</p>
    <p v-if="address">Address: {{ address }}</p>
  </div>
</template>

<script setup>
  import { useSolanaWallet } from '@web3auth/modal/vue'

  const { address, connected } = useSolanaWallet()
</script>

```

### Sign message[​](#sign-message "Direct link to Sign message")

```
<template>
  <div>
    <h2>Sign message</h2>
    <button @click="handleSignMessage" :disabled="isPending">
      {{ isPending ? 'Signing...' : 'Sign message' }}
    </button>
    <p v-if="error">Error: {{ error.message }}</p>
  </div>
</template>

<script setup>
  import { useSignMessage } from '@web3auth/modal/vue'

  const { signMessage, isPending, error } = useSignMessage()

  const handleSignMessage = async () => {
    try {
      const message = new TextEncoder().encode('Hello Solana!')
      const signature = await signMessage(message)
      console.log('Signature:', signature)
    } catch (err) {
      console.error('Error signing message:', err)
    }
  }
</script>

```

### Sign transaction[​](#sign-transaction "Direct link to Sign transaction")

```
<template>
  <div>
    <h2>Sign transaction</h2>
    <button @click="handleSignTransaction" :disabled="isPending">
      {{ isPending ? 'Signing...' : 'Sign transaction' }}
    </button>
    <p v-if="error">Error: {{ error.message }}</p>
  </div>
</template>

<script setup>
  import { useSignTransaction } from '@web3auth/modal/vue'
  import { Transaction, SystemProgram, PublicKey, LAMPORTS_PER_SOL } from '@solana/web3.js'

  const { signTransaction, isPending, error } = useSignTransaction()

  const handleSignTransaction = async () => {
    try {
      // Create a simple transfer transaction
      const transaction = new Transaction().add(
        SystemProgram.transfer({
          fromPubkey: new PublicKey('YOUR_PUBLIC_KEY'),
          toPubkey: new PublicKey('DESTINATION_PUBLIC_KEY'),
          lamports: 0.01 * LAMPORTS_PER_SOL,
        })
      )

      const signedTransaction = await signTransaction(transaction)
      console.log('Signed Transaction:', signedTransaction)
    } catch (err) {
      console.error('Error signing transaction:', err)
    }
  }
</script>

```

### Sign and send transaction[​](#sign-and-send-transaction "Direct link to Sign and send transaction")

```
<template>
  <div>
    <h2>Sign and Send transaction</h2>
    <button @click="handleSignAndSend" :disabled="isPending">
      {{ isPending ? 'Processing...' : 'Sign and Send' }}
    </button>
    <p v-if="error">Error: {{ error.message }}</p>
  </div>
</template>

<script setup>
  import { useSignAndSendTransaction } from '@web3auth/modal/vue'
  import { Transaction, SystemProgram, PublicKey, LAMPORTS_PER_SOL } from '@solana/web3.js'

  const { signAndSendTransaction, isPending, error } = useSignAndSendTransaction()

  const handleSignAndSend = async () => {
    try {
      // Create a simple transfer transaction
      const transaction = new Transaction().add(
        SystemProgram.transfer({
          fromPubkey: new PublicKey('YOUR_PUBLIC_KEY'),
          toPubkey: new PublicKey('DESTINATION_PUBLIC_KEY'),
          lamports: 0.01 * LAMPORTS_PER_SOL,
        })
      )

      const signature = await signAndSendTransaction(transaction)
      console.log('Transaction Signature:', signature)
    } catch (err) {
      console.error('Error signing and sending transaction:', err)
    }
  }
</script>

```

Further code and advanced usage should be implemented using Solana's web3.js library as needed.
