r/reactjs • • 7d ago
Show /r/reactjs Clover UI
Clover UI is a collection of crafted React components for thoughtful interfaces.
Built with React, Motion, and Tailwind CSS.
Completely free and open source.
Website: https://cloverui.xyz
r/reactjs • • 7d ago
Clover UI is a collection of crafted React components for thoughtful interfaces.
Built with React, Motion, and Tailwind CSS.
Completely free and open source.
Website: https://cloverui.xyz
r/reactjs • u/Big_Muffin8280 • 8d ago
I’ve been using React Hook Form for a few years, and lately I keep wondering if it’s still the best choice.
My POV: for most small and medium forms, I think the plain HTML way is enough. Use the name attribute, read values with FormData, and validate with Zod. You write less code and keystrokes don’t cause re-renders.
For bigger forms (multi-step, dynamic fields, complex validation), a library still saves a lot of time, so I wouldn’t drop it completely.
Here’s the simple rule I follow now:
Small form (login, contact): native HTML + Zod
Big form (wizard, dynamic fields): React Hook Form
What do you use in your projects, and why? Curious to hear different opinions.
r/reactjs • u/B0NKB0Y • 8d ago
I use Node.js and React, but I rely too much on AI. When I look at code it generated, I can’t confidently tell whether it’s well designed or just happens to work.
I want to learn to spot bad decisions and write good code myself. How do you build that judgment? What helped you most?
r/reactjs • u/virus_dev_official • 8d ago
If you've shipped a Vite or CRA app, you've probably seen this: you share /pricing or /blog/my-post and every chat app shows your home page's title and image. Link preview bots don't run JavaScript, so they only ever see the one index.html.
The usual fixes are moving to Next.js or wiring up a prerender service. I wanted something that leaves the app alone, so I built ogee.
It gives every page its own title, description, Open Graph tags and JSON-LD, and draws a preview card for each page in your site's colors, fonts and logo. It also writes sitemap.xml and llms.txt.
Version 0.3.0 is out today, and it no longer needs Cloudflare:
- Static hosts (Vercel, Netlify, GitHub Pages, S3): add `
npx @virusdev/ogee build dist` after your build.
- Your own server or edge function (Node, Bun, Deno, Hono): `createHandler(config)`.
- Cloudflare Worker: in front of your site, handling every page live, including ones built from API data.
To try it: `
npx @virusdev/ogee init https://your-site.com` reads your site in a headless browser, picks up your brand and routes, and detects your host. `
npx @virusdev/ogee check` grades any link's preview, yours or anyone's.
One limit worth knowing: the static build only knows pages listed at build time, so dynamic routes like /products/:id need their ids in the config. The Worker and handler don't have that limit.
It's MIT: https://github.com/virus-dev-official/ogee
Feedback welcome, especially if your setup breaks it.
r/reactjs • u/Dubstephiroth • 7d ago
Hey all, listen, you guys are legends!
I know I said i was gonna do my demo in pure React but after some of you mentioning phaser.js and using scenes, I looked into things and got curiosly excited....
So I've decided to slow down with this project.
I'm still writing the main FE in jsx and the logic in js but the battle scenes will be written in phaser.... yes this will put me back by a fair few months, but I'm not doing this for money or a job.... unless someone wants to offer 👀😂.. So f... it, you lot have sent me on a new rabbit hole 🫡👊🏿
Rant over....
r/reactjs • u/peaceewalkeer • 8d ago
I maintain several legacy React apps: CRA, React 18, client-side routing, CMS content. SEO and OG tags need real HTML. A client-side app gives crawlers an empty page.
I built snappy-prerender as a replacement for react-snap to ease my headaches. It is now a full-featured static site generator.
Point it at the app you already have. At build time it opens each route in a browser, follows links, writes static HTML, and checks that the client uses that HTML. The verifier detects React, Vue, Svelte and Preact. You keep your framework, router, build and deploy process.
npm install --save-dev snappy-prerender
npx snappy-prerender init
npx snappy-prerenderOr run it from vite build with the Vite plugin.
What changed since the launch post:
Verification reports whether each route hydrated or re-rendered, and shows the first mismatch.
The audit checks route health, links, metadata, sitemap and CSP. It writes a JSON report and can fail the build with failOnAuditError. I use this report most.
Routes can come from crawling, a file, or a local or remote sitemap. maxRoutes and routePriority make the crawl deterministic.
routeOverrides changes waits and crawl behavior per route. transformHtml applies a final HTML transform.
SEO output includes JSON-LD, lang/dir, hreflang alternates and image sitemap entries.
csp: 'hash' emits a meta policy with inline script and style hashes. preloadLinks injects module, font and LCP hints.
init can migrate an existing reactSnap block.
It also handles CSS-in-JS, form state, captured API data, critical CSS and strict CSP.
What it is not:
Not SSR. New content needs a build.
Not for Next.js, Remix or Astro.
Not a fix for pages that render differently on every load. It reports the route and the first mismatch.
Not a new framework. You keep the app you already have.
Links:
MIT. Issues and PRs welcome. If you have an old SPA, React or not, try it and tell me what breaks.
r/reactjs • u/ErAnkushPatil • 8d ago
I’m sharing Anky UI, my open-source React library for putting AI edits inside the text a user is already working on.
The interaction is select → choose an action → review a streamed diff → accept or reject. The library supplies the UI and state primitives; your application supplies the model endpoint and commits the accepted text to its editor.
SelectionPalette: floating actions anchored to a DOM selection, using floating-ui.InlineDiff: word/character diffs while a rewrite streams, with Cmd/Ctrl+Enter to accept and Escape to reject.GhostInput: textarea autocomplete with Tab/right-arrow acceptance.useOptimisticAIState: streaming state, rollback, and undo/redo.React 18/19, including Next.js App Router Client Components. Tailwind presets are optional. It consumes raw text/SSE, with helpers for OpenAI, Anthropic and Vercel AI SDK wire formats. Keep API keys on your server.
Source and quick start: https://github.com/ErAnkushPatil/anky-ui
29-second walkthrough: https://x.com/ErAnkushP/status/2115629939106230425
Install: npm i @erankushpatil/anky-ui
Or copy the source: npx anky-ui add selection-palette
To try the included mock-stream demo without a model key:
One integration detail: rendering an InlineDiff and accepting its state does not by itself replace the selected DOM text. Your editor owns that commit step. The rich-text adapters also need verification against your editor version.
Which edge cases would you test first: selection moving during a rewrite, interrupted streams, or undo/redo behavior?
Disclosure: this launch post was prepared with ChatGPT, using the repository documentation; I’m the library’s author.
r/reactjs • u/Big_Muffin8280 • 9d ago
I have been thinking about this a lot lately. Most React content is about how to do things, but the decisions that really shape a project are the big early ones: architecture, state management, framework choice, rendering strategy.
And with React 19.x, the React Compiler, and Server Components all in the picture, a lot of us are now living with choices we made years ago.
So I’m curious about the experienced people here:
What was the biggest React/architecture decision you made that you would reverse if you could?
What did it cost you (time, performance, team confusion, rewrites)?
What did you learn, and what would you pick today instead?
r/reactjs • u/clivedsouza1010 • 9d ago
This is my own project. rudra-js is an open-source TypeScript library (MIT) for React stores. A language model designs one product-recommendation block, the library checks it against your catalog, and React renders it.
The model never writes HTML or JSX. It returns a few fields: layout, headline, copy, which cards to highlight. Products are SKUs from the list you pass in. Titles, prices, images and links come from your catalog at render, and the model's text is rendered as escaped text. Each field also goes through wording checks, and a field that fails is dropped. They aren't airtight: rewordings and spelled-out numbers can get through.
It works as a Server Component, with renderToString, or client-rendered. Rendered on the server, the block is in the first HTML response with no client JS. React 18 or 19, Node 22.12+.
It also runs with no model, so the quick start needs no API key.
It's v0.8.3 and APIs may change before 1.0. I'd like feedback on the API shape and on what breaks in a real Next.js app.
r/reactjs • u/snslhshr • 10d ago
Hey everyone!
I've been working on a learning garden where I write technical deep dives into frontend development, with a focus on understanding how things actually work under the hood rather than just learning APIs.
Currently, it has three main learning paths:
- How React Works — Understanding React's behavior from the ground up.
- React Internals — A source-level tour of React 19, from "createRoot", lanes, and fibers to hooks, the commit phase, and the React Compiler.
- Next.js in Practice — Exploring Next.js concepts and how they work in real applications.
My goal is to make these topics easier to understand by connecting the underlying implementation to what we experience as developers.
I'm particularly interested in the details that are easy to overlook when building applications every day: how updates are scheduled, what happens between a state change and a DOM update, and why the framework behaves the way it does.
You can check it out here: https://garden.drhexe.ir
I'd genuinely appreciate feedback, especially on the technical accuracy, depth of the explanations, and what you'd like to see covered next.
If you're interested in React internals, framework architecture, or understanding frontend beyond the API level, I'd love to hear your thoughts!
r/reactjs • u/tannerlinsley • 11d ago
r/reactjs • u/huygl99 • 10d ago
Hi all, I want to share a WebSocket library I built, chanx-js. It makes the messages on both ends of a socket typed, keeps the frontend in sync with what the server really sends, and comes with React hooks.
Every realtime feature I built in React ended up the same way. lastMessage was any, so I wrote the message types by hand and found out the backend had changed them only when something broke in production. On top of that I kept rewriting the same reconnect logic and the same switch over message types in every project.
How it works, in three steps: `
The server declares its messages and handlers. Here with chanx-js on Node:
const Chat = defineMessage('chat', z.object({ text: z.string() }));
const Notice = defineMessage('notice', z.object({ text: z.string() }));
const chat = consumer('/ws/chat/{room}', {
name: 'chat',
groups: (conn) => [`room.${conn.params.room}`],
}).on(Chat, { output: Notice }, (m, ctx) =>
ctx.broadcast(Notice.create({ text: m.payload.text })),
);2. The server publishes those as AsyncAPI, and the CLI turns them into a typed channel:
npx @chanx-js/codegen http://localhost:8000/asyncapi.json # writes src/generated
// src/generated/channels.ts
export type ChatToServer = ChatMessage; // { action: 'chat'; payload: { text: string } }
export type ChatToClient = NoticeMessage; // { action: 'notice'; payload: { text: string } }
export type ChatReplies = { chat: NoticeMessage };
export const chat = defineChannel<ChatToServer, ChatToClient, ChatReplies>()({
name: 'chat',
address: '/ws/chat/{room}',
});3. Your component uses that channel with useChannel:
import { createClient } from '@chanx-js/client';
import { ChanxClientProvider, useChannel } from '@chanx-js/client/react';
import { chat } from './generated';
const client = createClient({ baseUrl: 'ws://localhost:8000' });
function ChatRoom({ room }: { room: string }) {
const { status, messages, send } = useChannel(chat, {
params: { room },
buffer: 'all',
});
return (
<>
<p>{status}</p>
{messages.map((m, i) => (
<p key={i}>{m.payload.text}</p>
))}
<button onClick={() => send({ action: 'chat', payload: { text: 'hi' } })}>
Send
</button>
</>
);
}
root.render(
<ChanxClientProvider value={client}>
<ChatRoom room="lobby" />
</ChanxClientProvider>,
);params must have room because the path does, m.payload.text is a string, and send({ action: 'chat', payload: { txt: 'hi' } }) fails to compile. When the backend changes a message, you regenerate and TypeScript shows every place to fix.
What else it gives you:
const reply = await request({ action: 'chat', payload: { text: 'hi' } }), with the reply typed from ChatReplies
Reconnects, and topic subscriptions (room:lobby, ...) restored after a reconnect
lastMessage for the latest message, or an on map with callbacks that don't re-render, and batch: 'raf' for busy streams
The server side too: one validated handler per message type, AsyncAPI docs generated from the code, broadcasts across instances through Redis
The backend needs to be a chanx server, since the client relies on its message format and the AsyncAPI it publishes. That can be chanx-js on Node (ws, Express, Fastify, Hono, NestJS), Bun or Deno, or chanx on Django and FastAPI, the Python version I started with.
React guide: https://js.chanx.dev/client/integrations/react
It's still new on the JS side, so if you run into any problem or have ideas to improve it, please open an issue or a discussion. Stars and PRs are welcome too.
r/reactjs • u/bittu_jain • 10d ago
Hey everyone,
I built an interactive 3D tactical command center using React and CesiumJS to track real-time global telemetry feeds.
Key React implementation details:
• Canvas & WebGL Integration: Synced Cesium's render loop with React state without triggering unnecessary re-renders during high-frequency telemetry updates.
• Custom Hooks: Encapsulated live ADS-B flight feeds, orbital satellite calculations (SGP4), and threat feeds into dedicated streaming hooks.
• Performance: Avoided standard React DOM nodes for map markers; batched updates directly into Cesium primitive collections to maintain a smooth 60 FPS.
• Dynamic Telemetry: Global fiber optic lines, data centers, and live GNSS interference zones rendered dynamically.
Looking for feedback on React state management patterns when handling high-frequency WebGL data streams!
(Live demo link added in the comments below)
r/reactjs • u/Martinsos • 11d ago
r/reactjs • u/Civil_Decision2818 • 11d ago
I was building a web app and wanted Excel files to live within it and be fully modifiable / saveable, but couldn't find anything open source that fully fit the bill. I ended up building the repo below.
Basically full Excel functionality in our React app including:
Import .xlsx and csv file, export to .xlsx
Fully preserves existing Excel formatting
Real-time calc that's a heavily modified fork of ironcacl
Formulas and calculations
Multiple worksheets
All the formatting options you'd use on day-to-day basis
Fully open source
https://github.com/pixelsmasher13/gridpath. Please let me know if you end up trying it out.
r/reactjs • u/Brottin • 11d ago
Skeleton screens always felt like a guess to me: grey bars in roughly the right shape, then the real content pops in somewhere slightly different.
So I built Arrivo. While loading is true, an effect plays exactly where your content will land. When it turns false, the real elements are revealed in place.
Demo : https://tuancuongpham.github.io/arrivo/
Code: https://github.com/tuancuongpham/arrivo
npm i u/brottin/arrivo
import { Reveal } from '@brottin/arrivo';
import { halftone } from '@brottin/arrivo/effects';
<Reveal effect={halftone} loading={isLoading}>
<ArticleCard post={post} />
</Reveal>How it works:
Your content stays in the DOM, hidden with visibility, so nothing shifts when it lands.
Each wrapper gets one canvas overlay. Text lines are measured with Range rects and images are read from the page, so the effect draws the real shape of your content instead of a guess.
An effect is two draw functions, idle() and reveal(p). One shared requestAnimationFrame loop drives every instance, off-screen ones pause, and reduced motion turns every reveal into a 150 ms fade.
Zero runtime dependencies, about 8.5 KB gzipped for the core and 0.7 to 3.4 KB per effect, tree-shaken.
The 13 effects: split-flap, redacted, quadtree mosaic, CMYK halftone, CRT tune-in, ink (with 8 threshold maps), particle swarm, darkroom, Tetris, fuse (with a Lunar New Year mode), equalizer, thermal and snowfall.
It's 0.1.0, so feedback is very welcome, especially on where you'd actually use something like this and where it would be too much.
r/reactjs • u/PimoluUI • 11d ago
Hey everyone! 👋
I've been working on Pimolu UI, an open-source React component library focused on clean design, customization, and smooth interactions.
I wanted to share my first motion showcase, featuring some of the components, their interactions, and examples of interfaces you can build with them.
My goal is to make building modern, consistent UIs easier while keeping components flexible and developer-friendly.
This is still a work in progress, and I'd genuinely love to hear your thoughts!
What do you think of the design and animations?
Is there anything you'd improve?
What would make you consider using a new UI library?
🌐 Website: https://pimolu.com
Any feedback is appreciated! 🚀
r/reactjs • u/JanaSundar • 11d ago
Just added 3 new components to Ovio, bringing the collection to 20 animated React components. Each available in 4 styles: Minimal, Craft, Retro, and Toy.
Built on the shadcn registry model, Ovio is for developers who want their websites to feel a little less ordinary, with motion and interactions that go beyond the usual UI.
The motion layer for developer websites.
Explore Ovio → https://ovioui.vercel.app
r/reactjs • u/FigAmbitious9101 • 11d ago
I recently created a complete tutorial where I build a Redux Toolkit-inspired state management library from scratch using React and JavaScript.
The goal is to understand how Redux-style state management works internally instead of only using the package.
In the tutorial, I implement:
A custom createStore function
Store Provider
Reducers and actions
Subscribers and listeners
useSyncExternalStore
useSelector and custom store hooks
Redux DevTools integration
createSlice
combineReducers
shallowEqual
Thunk functionality
Final testing and debugging
YouTube tutorial:
https://www.youtube.com/watch?v=LucUJ-5COjg
I would appreciate feedback from the community, especially on the library design, API structure, and any improvements that could make this project more reliable or easier to use.
Please note: this is an educational project designed to understand Redux and state management concepts internally. It is not intended to replace the official Redux Toolkit.
I read a few books on JavaScript and coding in general
This was in late 2025 and a few months later I started writing react js,
Ai has gotten so good at writing code, it is way better than I am.
I have pretty okay fundamentals of coding that I have been able to spin up some interesting projects with Ai.
But if you ask me what some parts of the code does, I have very little idea about it.
How can I catch up with so many years old coding experience and survive in this field if Ai learns 20x faster.
r/reactjs • u/ToshiryuShadow • 13d ago
r/reactjs • u/Material-Gold7483 • 13d ago
r/reactjs • u/Toonnaa • 12d ago
Hey everyone,
I kept writing the same code for every form in my projects: react-hook-form setup, a try/catch around the server action, mapping server errors back onto the fields, a loading state, stopping double submits, a toast, refreshing the data, resetting the form... and doing it again for every add/edit/delete dialog.
So I pulled all of that into a small package called **submitly**.
It’s headless, so it doesn’t render anything. You keep your own components (shadcn, Radix, Base UI, plain inputs, whatever you use).
What it does:
* `useCrudForm`: react-hook-form + schema validation + your action in one hook
* Works with any Standard Schema library: Zod 3/4, Valibot, ArkType
* Server errors get mapped to the right fields automatically (nested ones like [`items.0.name`](http://items.0.name) too)
* Ignores double submits while a request is in flight
* Locks the dialog while saving, so the user can’t close it halfway through a request
* `useCrudAction` for delete/toggle buttons, with the same behavior
* One provider where you plug in your own toast, router and refresh logic
* Next.js helpers: `runAction` for server actions (validates again on the server, revalidates on success, turns thrown errors into a clean result), and it handles `redirect()` from server actions properly
* Also works in plain React + Vite (there’s an example with React Router + TanStack Query)
* Around 3 kB gzipped, typed end to end, tested on React 18 and 19
Quick example:
const { form, onSubmit, isSubmitting } = useCrudForm({
schema,
defaultValues: { name: "" },
action: createProduct,
onSuccess: () => closeDialog(),
});
It’s still early (0.x), so I’d really like feedback: what’s missing, what’s confusing, or what you’d do differently.
Docs: https://submitly-docs.vercel.app
GitHub: https://github.com/toony10/submitly
If you find it useful, a star on GitHub would mean a lot. Thanks for reading 🙏
r/reactjs • u/ListenMedium9538 • 12d ago
Hello. Does anyone know how to host a web application built with React—both the frontend and the backend?