Canonical Example: Vite + React

Step-by-step guide to integrate @p47h/vault-react in a Vite + React project.


1. Create project

npm create vite@latest my-vault-app --template react-ts
cd my-vault-app
npm install

2. Install vault-react

npm install @p47h/vault-react

3. Set up the Provider

Update src/App.tsx:

import { P47hProvider } from "@p47h/vault-react";
import SecretNotes from "./SecretNotes";

function App() {
  return (
    <P47hProvider>
      <SecretNotes />
    </P47hProvider>
  );
}

export default App;

4. Create component with secrets

Create src/SecretNotes.tsx:

import { useSecret } from "@p47h/vault-react";

function SecretNotes() {
  const [note, setNote, status] = useSecret("my_diary");

  if (status === "loading") return <div>Loading...</div>;

  return (
    <textarea
      value={note || ""}
      onChange={(e) => setNote(e.target.value)}
      placeholder="Write your secret note..."
    />
  );
}

export default SecretNotes;

5. Configure Vite for WASM

Update vite.config.ts:

import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";

export default defineConfig({
  plugins: [react()],
  optimizeDeps: {
    exclude: ["@p47h/vault-react"],
  },
  build: {
    target: "esnext",
  },
});

6. Run

npm run dev

Project structure

my-vault-app/
├── src/
│   ├── App.tsx          # Provider
│   ├── SecretNotes.tsx  # Component with useSecret
│   └── main.tsx
├── vite.config.ts
└── package.json

For more hooks and advanced options, see the

hooks reference