Using the Pluto Frame SDKs
Getting Started
Pluto offers two npm packages to help you integrate the Pluto Frame into your application:
@plutoxyz/react-frame: For React applications
@plutoxyz/frame-js: For vanilla JavaScript applications
Choose Your Implementation
Select your preferred implementation method below:
Installation
npm install @plutoxyz/react-frameBasic Usage
"use client"; // if using Next.js app router, include "use client" directive
import { Frame } from "@plutoxyz/react-frame";
 
function App() {
  const handleProof = (proof: any) => {
    console.log(proof.data);
  };
 
  const handleError = (error: any) => {
    console.log(error.code);
    console.log(error.display_message);
    console.log(error.message);
  };
 
  return (
    <Frame
      script={`myScript`}
      onProof={handleProof}
      onError={handleError}
      brand={{
        logo: "https://plutoxyz.com/logo.png",
        name: "Plutoxyz",
      }}
    />
  );
}React Frame Package Overview
A React library that provides components and hooks for Pluto frame UI.
Full docs are on npm.
Frame Component
Frame is a wrapper around the Pluto frame that gives you an end-to-end flow out of the box.
Note: Mount
Frameonly when you’re ready to start the Pluto flow (e.g., after a button click).
Data Types
| Type | Description | 
|---|---|
| ProofPayload | Returned by onProof.{ data: Record<string,string>; signature: string } | 
| ErrorPayload | Returned by onError.{ code: string; display_message: string; message: string } | 
Advanced Use Cases
If your app splits logic across multiple trees, inject PlutoProvider at the top level and use hooks where needed. You can still mount Frame later even when you provide your own context.
PlutoProvider
// App.tsx
import { PlutoProvider } from "@plutoxyz/react-frame";
 
function App() {
  return (
    <PlutoProvider>
      <div id="pluto-frame"></div>
      {/* Your components here */}
    </PlutoProvider>
  );
}Component with Hooks
// MyComponent.tsx
import { usePlutoFrame, useProof, useError } from "@plutoxyz/react-frame";
 
const MyComponent = () => {
  const { isConnected, isReady, connect } = usePlutoFrame();
  const proof = useProof();
  const error = useError();
 
  const handleClick = () => connect(`myScript`);
 
  return (
    <div>
      {!isConnected && (
        <button disabled={!isReady} onClick={handleClick}>
          Connect
        </button>
      )}
      {error && <div>{error}</div>}
      {proof && <div>{JSON.stringify(proof)}</div>}
    </div>
  );
};
 
export default MyComponent;Hooks Summary
| Hook | Purpose | 
|---|---|
| usePlutoFrame | { isReady, isConnected, connect }—core control hook | 
| useProof | Access the current proof payload | 
| useError | Access any proof-generation errors |