Loading...
Loading...
Install and work with uifork, a CLI tool and React component library for managing UI component versions. Use when the user wants to version components, test UI variations, gather stakeholder feedback, or work with uifork commands like init, watch, new, fork, promote.
npx skill4agent add sambernhardt/uifork uiforknpm install uiforkUIForkimport { UIFork } from "uifork";
const showUIFork = import.meta.env.MODE !== "production";
function App() {
return (
<>
<YourApp />
{showUIFork && <UIFork />}
</>
);
}// components/UIForkProvider.tsx
"use client";
import { UIFork } from "uifork";
export function UIForkProvider() {
if (process.env.NODE_ENV === "production") return null;
return <UIFork />;
}
// app/layout.tsx
import { UIForkProvider } from "@/components/UIForkProvider";
export default function RootLayout({ children }) {
return (
<html>
<body>
{children}
<UIForkProvider />
</body>
</html>
);
}// pages/_app.tsx
import { UIFork } from "uifork";
export default function App({ Component, pageProps }) {
return (
<>
<Component {...pageProps} />
{process.env.NODE_ENV !== "production" && <UIFork />}
</>
);
}npx uifork init src/components/Button.tsxversions.ts-wimport Button from "./components/Button";
// Works exactly as before - active version controlled by UIFork widget
<Button onClick={handleClick}>Click me</Button>;npx uiforkinit <component-path>npx uifork init src/components/Dropdown.tsx
npx uifork init src/components/Dropdown.tsx -w # Start watching after initwatch [directory]npx uifork watch # Watch current directory
npx uifork watch ./src # Watch specific directorynew <component-path> [version-id]npx uifork new Button # Auto-increment version number
npx uifork new Button v3 # Specify version explicitlyfork <component-path> <version-id> [target-version]npx uifork fork Button v1 # Fork v1 to auto-incremented version
npx uifork fork Button v1 v2 # Fork v1 to specific version
npx uifork duplicate Button v1 v2 # Alias for forkrename <component-path> <version-id> <new-version-id>npx uifork rename Button v1 v2delete <component-path> <version-id>npx uifork delete Button v2promote <component-path> <version-id>npx uifork promote Button v2Button.tsxButton.v2.tsxButton.v*.tsxButton.versions.tsnpx uifork init src/components/Button.tsxsrc/components/
├── Button.tsx # Wrapper component (import this)
├── Button.versions.ts # Version configuration
├── Button.v1.tsx # Original component (version 1)
├── Button.v2.tsx # Additional versions
└── Button.v1_1.tsx # Sub-versions (v1.1, v2.1, etc.)v1v2v3v1_1v1_2v2_1v2_2UIForkCmd/Ctrl + Arrow Up/Down// Enable via NEXT_PUBLIC_ENABLE_UIFORK=true or VITE_ENABLE_UIFORK=true
const showUIFork =
process.env.NODE_ENV !== "production" ||
process.env.NEXT_PUBLIC_ENABLE_UIFORK === "true";npm install uifork<UIFork />npx uifork init src/components/MyComponent.tsxnpx uifork watch# Create empty version
npx uifork new Button
# Or fork existing version
npx uifork fork Button v1npx uifork promote Button v2ForkedComponentUIForkForkedComponentversions.ts