
Product
Introducing Socket Firewall Enterprise: Flexible, Configurable Protection for Modern Package Ecosystems
Socket Firewall Enterprise is now available with flexible deployment, configurable policies, and expanded language support.
@prokodo/ui
Advanced tools
UI components for production-grade Next.js + Headless CMS (Strapi, Contentful, Headless WordPress) websites by prokodo β built for Core Web Vitals & SEO.
Modern, customizable UI components built with React and TypeScript β developed by prokodo for high-performance web interfaces.
πΊπΈ Need help shipping production Next.js (App Router) fast?
prokodo β Next.js Agency β click hereπ©πͺ Sie suchen eine Next.js Agentur (App Router, SEO, Performance)?
prokodo β Next.js Agentur β hier klicken
SEO (Metadata API, hreflang):
https://www.prokodo.com/en/guide/next-js/next-js-seo/?utm_source=github&utm_medium=readme_examples&utm_campaign=ui&utm_content=seo_en
Performance (LCP/INP/CLS, Streaming SSR):
https://www.prokodo.com/en/guide/next-js/next-js-performance/?utm_source=github&utm_medium=readme_examples&utm_campaign=ui&utm_content=perf_en
Migration Playbook (RACI, Canary, Rollback):
https://www.prokodo.com/en/guide/next-js/next-js-migration/?utm_source=github&utm_medium=readme_examples&utm_campaign=ui&utm_content=migration_en
Adaptive Island Components (AIC) are fully modular and optimized for modern frameworks (Next.js, Remix, etc.).
Each component is built for lazy loading, works seamlessly with React Server Components (RSC), and can be tree-shaken out when unused.
Total bundle (all components): ~195β―kB gzipped
This makes @prokodo/ui ideal for modern SSR apps using Next.js or Remix, with excellent Time-to-Interactive (TTI) and Core Web Vitals.
β οΈ ESM-only: This package does not support CommonJS (
require()).
pnpm add @prokodo/ui
# or
npm install @prokodo/ui
import { Button, type ButtonProps } from "@prokodo/ui/button"
export default function Layout() {
// Renders to HTML on the server with zeroβJS.
// On the client, it will hydrate when scrolled into view or the user interacts.
return <Button title="Click me" />
}
import { Button, type ButtonProps } from "@prokodo/ui/button"
export default function Layout() {
// Renders to HTML on the server with zeroβJS.
// On the client, it will hydrate when scrolled into view or the user interacts.
return <Button title="Click me" />
}
import { Button, type ButtonProps } from "@prokodo/ui/button"
export default function AboveTheFoldHero() {
// Because this lives above the fold, we want it to hydrate right away:
return <Button priority title="Welcome to prokodo" />
}
"use client"
import { Button, type ButtonProps } from "@prokodo/ui/button"
import { type FC, memo } from "react"
// In a pureβclient file, you can wrap the AIC export.
// The `priority` prop here ensures hydration runs immediately when mounted.
export const HeadlineClient: FC<ButtonProps> = memo(props => {
return <Button {...props} priority />
})
import { Headline, type ButtonProps } from "@prokodo/ui/button"
export default function GalleryPage() {
return (
<div style={{ height: "200vh" }}>
<p>Keep scrollingβ¦</p>
<div style={{ marginTop: "100vh" }}>
{/* This will render as HTML on the server;
on the client, it only hydrates when this element scrolls into view. */}
<Button title="I hydrate when you see me" />
</div>
</div>
)
}
| Component | β AIC (RSC + optional client) | β
SSR-Compatible ("use client") |
|---|---|---|
| Accordion | β | β |
| Animated | β | β |
| AnimatedText | β | β |
| Avatar | β | β |
| BaseLink | β | β |
| Button | β | β |
| Calendly | β | β |
| Card | β | β |
| Carousel | β | β |
| Chip | β | β |
| DatePicker | β | β |
| Dialog | β | β |
| Drawer | β | β |
| DynamicList | β | β |
| Form | β | β |
| FormResponse | β | β |
| Grid/GridRow | β | β |
| Headline | β | - |
| Icon | β | β |
| Image | β | β |
| ImageText | β | - |
| Input | β | β |
| Label | β | β |
| Link | β | β |
| List | β | β |
| Loading | β | β |
| Lottie | β | β |
| Map | β | β |
| PostItem | β | β |
| PostTeaser | β | β |
| PostWidget | β | β |
| PostWidgetCarousel | β | β |
| ProgressBar | β | β |
| Quote | β | β |
| RichText | β | β |
| Select | β | β |
| SideNav | β | β |
| Skeleton | β | β |
| Slider | β | β |
| Snackbar & Provider | β | β |
| Stepper | β | β |
| Switch | β | β |
| Table | β | β |
| Teaser | β | - |
Island architecture lets you render components on the server and hydrate them on the client only when needed.
import { createIsland } from "@prokodo/ui/createIsland"
import { NavbarServer } from "./Navbar.server"
import type { NavbarProps } from "./Navbar.model"
export const Navbar = createIsland<NavbarProps>({
name: "Navbar",
Server: NavbarServer,
loadLazy: () => import("./Navbar.lazy"),
// Optional: Force client-side hydration as soon as someone uses an action
// We are automatically recognizing onChange, onKeyDown, ... events. Only needed for custom attributes.
isInteractive: (p: NavbarProps) => p.customEvent === true,
})
"use client"
import { createLazyWrapper } from "@prokodo/ui/createLazyWrapper"
import { NavbarClient } from "./Navbar.client"
import { NavbarServer } from "./Navbar.server"
import type { NavbarProps } from "./Navbar.model"
export default createLazyWrapper<NavbarProps>({
name: "Navbar",
Client: NavbarClient,
Server: NavbarServer,
// Optional: Defer hydration until the component becomes visible in the viewport (Default: true)
// Can be controlled by priority attribute.
hydrateOnVisible: false,
// Optional: Force client-side hydration as soon as someone uses an action.
// We are automatically recognizing onChange, onKeyDown, ... events. Only needed for custom attributes.
isInteractive: (p: NavbarProps) => p.customEvent === true,
})
Real-world setups we ship:
Need help or a quick scoping?
SEO (Metadata API, hreflang):
https://www.prokodo.com/en/guide/next-js/next-js-seo/?utm_source=github&utm_medium=readme_examples&utm_campaign=ui&utm_content=seo_en
Performance (LCP/INP/CLS, Streaming SSR):
https://www.prokodo.com/en/guide/next-js/next-js-performance/?utm_source=github&utm_medium=readme_examples&utm_campaign=ui&utm_content=perf_en
Migration Playbook (RACI, Canary, Rollback):
https://www.prokodo.com/en/guide/next-js/next-js-migration/?utm_source=github&utm_medium=readme_examples&utm_campaign=ui&utm_content=migration_en
Explore all components and examples in the official Storybook:
pnpm i
pnpm dev # Start Vite dev server
pnpm storybook # Start Storybook locally
To build:
pnpm run build
pnpm run storybook:build
This library is published under the Business Source License 1.1 (BUSL-1.1).
Β© 2025 prokodo β All rights reserved. Visit us at prokodo.com.
0.0.56
FAQs
UI components for production-grade Next.js + Headless CMS (Strapi, Contentful, Headless WordPress) websites by prokodo β built for Core Web Vitals & SEO.
The npm package @prokodo/ui receives a total of 105 weekly downloads. As such, @prokodo/ui popularity was classified as not popular.
We found that @prokodo/ui demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket Firewall Enterprise is now available with flexible deployment, configurable policies, and expanded language support.

Security News
Open source dashboard CNAPulse tracks CVE Numbering Authoritiesβ publishing activity, highlighting trends and transparency across the CVE ecosystem.

Product
Detect malware, unsafe data flows, and license issues in GitHub Actions with Socketβs new workflow scanning support.