

The Protocol Support Layer adds higher-level abstractions over `@ckb-ccc/core` for the CKB ecosystem's most-used protocols. Each SDK composes transactions through the same declarative pattern as core, so you can mix them freely with your own custom logic.

<Callout type="info">
  `@ckb-ccc/spore`, `@ckb-ccc/udt`, and `@ckb-ccc/ssri` are already bundled in `@ckb-ccc/shell` and `@ckb-ccc/ccc`. You only need to install them individually if you depend on `@ckb-ccc/core` directly.
</Callout>

## Architecture [#architecture]

<Mermaid
  chart="graph TB
    subgraph &#x22;Protocol Support Layer&#x22;
        Spore[&#x22;@ckb-ccc/spore<br/>NFT & Digital Objects&#x22;]
        UDT[&#x22;@ckb-ccc/udt<br/>User Defined Tokens&#x22;]
        SSRI[&#x22;@ckb-ccc/ssri<br/>Script Service Interface&#x22;]
        LumosPatches[&#x22;@ckb-ccc/lumos-patches<br/>Lumos Compatibility&#x22;]
    end
    
    subgraph &#x22;Core Foundation&#x22;
        Core[&#x22;@ckb-ccc/core<br/>Transaction · Client · Signer&#x22;]
    end
    
    Spore --> Core
    UDT --> Core
    UDT --> SSRI
    SSRI --> Core
    LumosPatches --> Core"
/>

## Package Overview [#package-overview]

| Package                                     | Purpose                                                                 | Built on    | Use when                                     |
| ------------------------------------------- | ----------------------------------------------------------------------- | ----------- | -------------------------------------------- |
| [`@ckb-ccc/spore`](./spore)                 | Create, transfer, and melt on-chain Digital Objects (DOBs) and Clusters | core        | Building NFT-like assets or on-chain media   |
| [`@ckb-ccc/udt`](./udt)                     | Issue, mint, and transfer User Defined Tokens (xUDT / sUDT)             | core + ssri | Issuing or moving fungible tokens            |
| [`@ckb-ccc/ssri`](./ssri)                   | Call named methods on SSRI-compliant CKB scripts                        | core        | Calling custom CKB scripts with SSRI methods |
| [`@ckb-ccc/lumos-patches`](./lumos-patches) | Add JoyID / Nostr / Portal lock support to legacy Lumos apps            | Lumos SDK   | Migrating a Lumos app gradually              |

## Quick Start [#quick-start]

All protocol SDKs follow the core declarative pattern — describe the desired outputs, then let CCC complete inputs, fees, and change:

```typescript
import { ccc } from "@ckb-ccc/shell";

// Example: transfer xUDT
const udt = new ccc.udt.Udt(udtCodeOutPoint, udtType);
const { res: tx } = await udt.transfer(signer, [
  { to: receiverLock, amount: 1000n },
]);

await tx.completeInputsByUdt(signer, udtType);
await tx.completeFeeBy(signer);
const txHash = await signer.sendTransaction(tx);
```

The same pattern applies to Spore creation, SSRI method calls, and any custom transaction you compose alongside them.


---

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