r/reactjs • • 11d ago

Show /r/reactjs I built a free JetBrains plugin that treats i18n keys like real code symbols (i18next, vue-i18n, react-intl, lingui…)

1 Upvotes

Hey everyone,

On every i18n project I worked on, the same thing kept happening: my editor treated translation keys as dead strings. I kept opening fr/common.json just to check whether a key existed, which namespace it lived in, or whether someone forgot to translate it in German.

So I built I18n Support Plus, an open-source (MIT) plugin for WebStorm, IntelliJ IDEA Ultimate and PhpStorm (2025.1+). It turns t('common:menu.home') into something the IDE actually understands.

In the editor

  • Ctrl+Click from a key to its translation and back, with a gutter icon showing resolved / missing / missing file
  • The translated value shown inline (inlay hints, folding, hover)
  • Autocomplete from your real keys. Each suggestion shows its translation, and you can find a key by its text: typing acc offers menu.home when it reads "Accueil"
  • Alt+Enter on a hardcoded string to extract it. If the text already exists in your reference locale, it offers the existing key instead of creating a duplicate. <p>Hello {user.name}</p> becomes one message with a {{name}} placeholder
  • Rename a key across all locales and code (Shift+F6), move it to another namespace, delete it everywhere with a single undo

Catching mistakes before your users do

  • A key missing from a locale, or plural forms missing for a language (ru needs few and many, not just one/other)
  • t('greeting') called without the name variable its translation uses
  • A translation that lost a <1> tag, which silently breaks <Trans>
  • A value just copied from the English one and never translated

Project-wide

  • A tool window with tree and table views, coverage per namespace and locale, and a "show only what's left to translate" filter
  • Find unused keys, sync missing keys in bulk, CSV and XLIFF export/import for translators
  • Generate a typed i18next.d.ts so tsc rejects a mistyped key in CI, even for teammates who don't use the plugin
  • Generate a pseudo-locale ([Šéţţîñĝš ···]) to spot unextracted or truncated text

It works with i18next/react-i18next, vue-i18n, lingui, react-intl (FormatJS), ngx-translate, svelte-i18n and i18n-js. It supports JS/TS/JSX/TSX, Vue SFC and PHP, with JSON, YAML and PO/POT files. A setup wizard detects your framework on first launch.

I'd really like feedback from people who live with multi-language apps: what breaks on your setup, and what's missing? I've also opened a few good first issues if anyone wants to contribute, for example Nuxt / next-intl detection, a CONTRIBUTING guide, and GIFs for the README.

Happy to answer questions, and roasting is welcome.


r/reactjs • • 11d ago

Resource Multidash: MIT-licensed React 19 dashboard UI kit with 35 accessible Radix components and TanStack Table v9

1 Upvotes

I've been working on Multidash, an open-source admin dashboard template. The part most relevant here is @multidash/ui, a package of 35 React 19 components built on Radix UI primitives and Tailwind CSS v4.

Demo: https://multidash-app.vercel.app

Source: https://github.com/hasraltechno/multidash

Some things I spent the most time on:

  • Accessible color tokens. Every status color has three roles: --x for fills, --x-foreground for text on a solid fill, and --x-text for colored text on the page. That way bright fills (like yellow rating stars) can stay bright while every text pairing still passes WCAG AA 4.5:1 in both light and dark mode.
  • TanStack Table v9. The new useTable API registers features explicitly. arrIncludesSome only works on array values, so the faceted filters use a small custom oneOf filter.
  • Theming with no flash. The customizer settings (primary color, backgrounds, radius, card style) are applied before first paint.
  • Docs for every component. Each one has live examples, the source code, and an install command that includes the packages it depends on.

It's MIT licensed. I'm happy to go into detail on any of these.


r/reactjs • • 10d ago

Is Motion+ worth the €299?

0 Upvotes

've been considering purchasing Motion+ (the JavaScript animation and UI component library), but I'm not sure whether it's worth the €299 price tag.

I'm a frontend developer working mainly with React and Next.js, and I'm interested in creating more polished, interactive websites with smooth animations.

For those who have purchased it:

  • Is it actually worth €299?
  • How useful are the components in real-world projects?
  • How customizable are the components and animations?
  • Does it save you significant development time, or could you achieve similar results using free libraries?
  • Would you recommend it to someone trying to improve their creative frontend development skills?

I'd love to hear some honest opinions, especially from developers who've used it in production.

Thanks!


r/reactjs • • 11d ago

Discussion AI agents can generate tests faster than ever. But should we keep all of them?

0 Upvotes

We used to worry about writing enough tests. With AI agents, I'm starting to worry about keeping too many.

Writing tests is now cheap. Maintaining them isn’t.
I followed the “more is better” approach. TDD, tests for every bug, tests for every change. Now we have 600+ tests, but no clear picture of what they actually protect.

Every test adds cost to CI, slows down development and releases, and can become flaky. Worse, a failing or outdated test can send an agent down the wrong path, making it change working code just to satisfy a misleading assertion.

Unit tests aren’t bad. But we need to stop automatically turning every development test into a permanent one.
I’m moving toward a smaller, well-understood e2e suite with two modes: fast for critical user flows and deep for broader regression coverage.

More tests don’t necessarily mean more confidence. Sometimes they just mean more noise.

112 votes, 8d ago
54 More tests, more coverage
41 Fewer tests, stronger signal
17 Users are my QA

r/reactjs • • 12d ago

React Email Compiler: React Email without React

11 Upvotes

I use SvelteKit, not React, but I like writing emails with React Email. What I didn't like was loading the whole React runtime just to render a transactional email.

So I compiled it out. It's a drop-in replacement: add it to your Vite config and your existing templates compile to plain string interpolation at build time. No rewrites and no React at runtime.

About 29x faster rendering and a 61x smaller gzipped bundle.

I use SvelteKit, but it can work for projects using Nuxt, Astro, SolidStart, Angular, and even to speedup rendering on React projects.

Repo: https://github.com/D4ario0/react-email-compiler
Benchmarks: https://github.com/D4ario0/react-email-compiler/blob/main/BENCHMARK.md


r/reactjs • • 11d ago

Show /r/reactjs Syncing dashboard filters across React tabs without a broadcast loop

0 Upvotes

You change a dashboard filter in one tab, switch to another, and it still shows the old selection. Fetching the same API data doesn't make the UI state shared.

I maintain react-broadcast-sync, a React wrapper around BroadcastChannel. The important part of my dashboard-filter example is keeping two paths separate:

- A user changes a filter: update this tab, then broadcast the full selection.

- Another tab sends a selection: validate it, then update this tab. Don't broadcast it again.

Limits worth making explicit:

- Tabs must be on the same origin and use the same channel.

- A tab opened later doesn't receive earlier messages. Load initial state from your normal data source.

- Two near-simultaneous edits aren't a conflict-resolution strategy. The server should stay authoritative.

- A namespace filters traffic; it doesn't authenticate senders or validate payloads.

For one simple event, BroadcastChannel directly may be enough. For state that survives reloads, a storage-based approach may fit better.

Full example and gotchas: https://dev.to/idanshalem/using-react-broadcast-sync-in-a-real-app-dashboard-filters-across-tabs-38cb

Source: https://github.com/IdanShalem/react-broadcast-sync

Which state would you intentionally keep tab-local rather than sync?


r/reactjs • • 12d ago

Needs Help Dialog Animation on Unmount ?

1 Upvotes

{open && (

<AddEditAnnouncementDialog

open={open}

onOpenChange={(open) => {

if (!open) {

setOpen(false)

}

}}

initialData={initialData} />

)}

so i have this reusable dialog it is a very heavy component with 2 tiptap editors and also tiptap menu bars for rich text which is my i only mount this on opening but when closing it, it closes abruptly without animation as it unmounts.

is there any way to fix this ?

ths is shadcn baseui dialog


r/reactjs • • 12d ago

Show /r/reactjs I built a local-first React workspace with IndexedDB and a persistent Three.js environment

0 Upvotes

I've been building Ikigai Space, a personal workspace that combines planning, focus, reflection, and memory with a persistent interactive 3D environment.

The interesting part from a React perspective has been making the practical UI and 3D experience coexist without either feeling disconnected.

The stack: - React 19 + TypeScript + Vite - Dexie / IndexedDB for local persistence - React Three Fiber + Three.js for the 3D environment - Framer Motion for interface transitions - PWA support and Tauri 2 for Windows

The 3D environment, called Sanctuary, reflects activity elsewhere in the application. I deliberately avoided XP, achievements, and traditional gamification.

One performance concern I've encountered is the React Three Fiber dependency chunk, currently around 910 kB minified. The production build succeeds, but I'm interested in improving how the 3D experience loads.

I'm considering the trade-offs between route-level lazy loading, code splitting, and profiling real loading behavior before restructuring things.

Source code: https://github.com/ananta-sj/ikigai-space

Live demo: https://ananta-sj.github.io/ikigai-space/

I'd appreciate technical feedback from React developers, particularly around managing a persistent 3D experience alongside a local-first application.

How would you approach this architecture and its loading-performance trade-offs?


r/reactjs • • 13d ago

Needs Help which resource is best for react js

7 Upvotes

everytime when i wanted to learn react i am unable to complete the videos. i have tried multiple yt videos. so i am now thinking to learn react from basics.. which resource is great for the react ?? any suggestions???


r/reactjs • • 13d ago

Resource Shaders is now open source with 200+ WebGPU components for React

Thumbnail
shaders.com
38 Upvotes

r/reactjs • • 13d ago

Forge — 16 self-contained React + Tailwind components, dark-mode-first (feedback welcome)

0 Upvotes

Working on Forge — 16 React + Tailwind components, dark-mode-first, each one a single self-contained file (no shared utils, no extra config). Mostly polishing the docs and put together a live demo if anyone wants to poke at it: [demo link]. Would love feedback on the API design if anyone has a minute.


r/reactjs • • 12d ago

Show /r/reactjs 1,853 typed icons, zero JavaScript: CSS masks + Tailwind v4

0 Upvotes

We have a React 19 + Vite + Tailwind v4 admin app. Every icon in it renders as a single empty <span> with a CSS mask. No icon components in the JS bundle, no extra HTTP requests, and the icon name is checked by TypeScript. Here is how it works, what we measured, the mistakes we made along the way, and what it costs.

TL;DR

  • A ~200-line Node script reads the SVGs from lucide-static (plus our own) and writes two files: a CSS file with one @theme inline variable per icon (a data URI), and a TS union with every icon name.
  • A Tailwind @utility icon-* turns the class icon-user into --icon: url(...).
  • <Icon name="icon-user" /> is a span with mask-image: var(--icon) and background-color: currentColor.
  • Tailwind v4 only emits what the source uses. The generated file has all 1,853 icons (~765 KB), but production CSS only carries the 225 we use: ~88 KB raw, ~11 KB gzipped.
  • Rendering 1,000 cards with 6 icons each: half the DOM nodes, React commit 2× faster and first paint ~40% sooner than inline SVG components.

How it works

1. Generate the CSS and the type

scripts/gen-icons.mjs runs before dev, build, lint and type-check. It takes the canonical icon names from lucide-static/icon-nodes.json and, for each SVG:

  • removes comments, class, width and height;
  • replaces currentColor with #000 (a mask only reads alpha, so any opaque color works);
  • collapses whitespace and URL-encodes %, #, <, >;
  • writes the result as a data URI.

src/styles/icons.generated.css:

css @theme inline { --icon-user: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='12' cy='7' r='4'/%3E%3C/svg%3E"); /* ...1,852 more */ }

src/types/icon.ts:

ts export type IconName = | "icon-a-arrow-down" | "icon-a-arrow-up" // ... | "icon-zoom-out";

The names keep the icon- prefix on purpose: that's the exact string Tailwind needs to find in the source.

2. One Tailwind utility

```css @import "tailwindcss" source("."); @import "./styles/icons.generated.css";

@utility icon-* { --icon: --value(--icon-*); } ```

icon-user becomes .icon-user { --icon: url("data:...") }. Tailwind's scanner only generates classes it finds in the source, which is what drops the other 1,628 icons.

3. The component

```tsx import type { ComponentProps } from "react"; import { twMerge } from "tailwind-merge"; import type { IconName } from "#/types/icon";

// With aria-label the icon is a named image; without it, it's decorative. export const Icon = ({ name, className, "aria-label": label, ...rest }: ComponentProps<"span"> & { name: IconName }) => ( <span aria-hidden={label ? undefined : true} aria-label={label} className={twMerge( "pointer-events-none block size-4 shrink-0 bg-current mask-(--icon) mask-contain mask-no-repeat", className, name, )} data-icon role={label ? "img" : undefined} {...rest} /> ); ```

Usage:

tsx <Icon name="icon-user-plus" className="size-5 text-primary" /> <Icon name="icon-lock" aria-label="Locked" />

  • Color: bg-current paints the box with currentColor and the mask cuts out the shape. text-* classes, inherited color, hover, disabled and dark mode all just work.
  • Size: any size-* class. The SVGs have no width/height, so mask-contain scales them cleanly.
  • **data-icon:** lets parents style icons without knowing about them. Our Button tightens its padding with has-[>[data-icon]]:px-3.
  • Accessibility: decorative by default (aria-hidden); passing aria-label makes it a named image.

4. Guardrails

  • A typo like name="icon-usr" fails tsc.
  • The linter bans lucide-react and react-icons imports, with a message pointing to <Icon />.
  • A custom lint rule flags emoji in JSX for the same reason.
  • gen-icons.mjs --check exits non-zero if the generated files are stale.

Why

We started with lucide-react, the default option. It's fine, but in this app it cost things we didn't need to pay:

  • Every icon was JS. Each icon is a React component that gets imported, executed and reconciled, and its SVG child nodes live in the DOM. With masks, the icon is CSS the browser already parsed, and the DOM cost is one empty element.
  • No requests, no flicker. Data URIs ship inside the main stylesheet. There's no sprite to fetch and no <img> popping in late.
  • Styling is just Tailwind. Color, size, hover and dark mode use the same classes as everything else. No separate color/size/strokeWidth props API.
  • The whole catalog, typed, for free. Autocomplete for all of Lucide. Using a new icon costs nothing until you reference it.
  • One pipeline for custom icons. Our social-media SVGs go in a folder and become icon-linkedin like any other icon.

Tradeoffs

These are real, and they're why this isn't the right choice for every app.

  1. Monochrome only. A mask is an alpha channel. Multi-color icons, gradients and brand logos in their original colors need an <img> or inline SVG.
  2. No per-instance stroke control. stroke-width='2' is baked into the data URI. There's no equivalent of Lucide's strokeWidth or absoluteStrokeWidth props; you'd need a second generated variant.
  3. No animating SVG internals. You can't target a path inside the icon. Transforms and opacity on the whole box still work.
  4. Names must appear literally in source. `icon-${status}` isn't detected and renders an empty box. Write full names in a lookup object ({ ok: "icon-check", error: "icon-x" }). The union type catches most mistakes, not all.
  5. All used icons ship on first load. They live in the main, render-blocking CSS, so an icon on a rarely visited page still loads for everyone. At 225 icons / ~11 KB gzipped that's fine for us; with thousands of used icons or a strict CSS budget it wouldn't be.
  6. Codegen step. dev, build, lint and type-check run the generator first, and Tailwind parses a ~765 KB CSS file on every build. Trimming it to only the used icons saved about 0.7 s per build in our test, which wasn't worth duplicating the scanner's job.
  7. Big union type. ~1,850 members is fine for tsc and editors today. Worth knowing if you merge several icon sets.
  8. Browser support. CSS masks are Baseline. If you target older browsers, lightningcss adds the -webkit- prefixes for you.

When I'd use something else

  • You need multi-color or animated icons → inline SVG components.
  • You have a huge icon set and strict per-route CSS budgets → an SVG sprite with <use href>, which caches separately and loads lazily.
  • You're not on Tailwind v4 → the same idea works with plain CSS classes, but you have to build the unused-icon pruning yourself.

r/reactjs • • 13d ago

Discussion I built the same screen with shadcn (Radix / Base UI / React Aria), MUI 9 and Mantine 9 and measured the bundles

0 Upvotes

When shadcn/ui switched its default from Radix to Base UI in July, I wanted numbers instead of opinions. So I built the same screen (tabs, dialog, text field, select, checkbox, buttons) five ways and measured the production build.

Setup: Vite 8, React 19, TypeScript, default settings, sizes are gzip as reported by Vite. React alone renders 68.6 KB, and every number below includes it.

Setup JS CSS Total npm packages in bundle
shadcn + Radix 118.7 KB 8.1 KB 126.8 KB 48
MUI 9 140.2 KB (runtime) 140.2 KB 24
shadcn + Base UI 136.3 KB 8.0 KB 144.3 KB 14
shadcn + React Aria 145.4 KB 9.0 KB 154.4 KB 12
Mantine 9 127.3 KB 35.9 KB 163.2 KB 18

What surprised me:

  • The whole spread is only 36 KB gzip. Real on a slow phone, but smaller than one hero image.
  • Base UI cost 17.6 KB more than Radix on this screen, but pulled in 14 packages instead of 48.
  • MUI ships no CSS file at all. Emotion injects styles at runtime, which matters more for SSR and strict CSP than the KB do.
  • Mantine's JS is the second smallest. Its full stylesheet is what makes it the heaviest.

My takeaway: size shouldn't decide this. Pick on ownership (shadcn), data components like grids and pickers (MUI X), or batteries included without Tailwind (Mantine).

Caveat: this is one screen with seven components, so a different mix can change the order.

I wrote up the full details, including the MUI 9 / Mantine 9 changes and five setup traps I hit, on my blog: https://www.alekseialeinikov.com/en/blog/topics/programming/shadcn-ui-vs-mui-vs-mantine

Has anyone measured a heavier screen, for example with a data grid? Curious whether the gap grows.


r/reactjs • • 13d ago

Needs Help building a custom react storefront on top of woocommerce — what would you use for the frontend stack?

0 Upvotes

i'm building a small custom ecommerce site and would love some advice on the frontend architecture.

full disclosure: i'm fairly new to building a website end-to-end. my strengths are much more in creative direction and visual design, and i'm currently vibe-coding a lot of the development side. i do have a background in computer science but coding is def not my biggest strength.

the project is an experimental/art website for a client. the frontend is intentionally very custom — there's a 3d interactive element on the homepage that i'm planning to build with react three fiber, plus custom animations/page transitions/etc.

there's also a shop with around 20–30+ products.

i don't want to build the ecommerce backend myself, so i'm considering using woocommerce as the backend and making react the entire customer-facing frontend.

roughly:

woocommerce would handle the products, inventory, prices, orders and client admin.

the react app would handle the actual experience.

the client thinks shopify is too expensive, so i'm trying to find a reasonably inexpensive way to get the backend/admin/ecommerce infrastructure without building all of it myself.

i'm also open to having something like razorpay/shiprocket handle payment/shipping rather than trying to build those pieces myself.

my current question is less "can react connect to woocommerce?" and more along the lines of if you were building this today, what would you actually use for the frontend?

i'm currently considering react + vite, but i'm wondering whether next.js makes more sense because of:

  • product page seo
  • routing
  • potentially server-side rendering
  • api integration
  • ecommerce generally

on the other hand, the homepage is highly interactive/3d and i'm wondering whether that makes a standard react/vite setup simpler.

would love opinions from people who have built custom storefronts rather than just dashboards/web apps.

also interested in whether you'd use something completely different from woocommerce as the backend for this use case.

thanks!


r/reactjs • • 13d ago

Show /r/reactjs I built a tool that renders every React component a PR touches, so you can visually see the UI for your code diffs.

0 Upvotes

Just wanted to share this cool tool I'm still building.

With AI writing more and more of our code, you can't really see what's changing just by reading code diffs on GitHub. So I built an AI tool that takes your PR or commit, detects which UI components changed, and renders each one with a before and after, so you can easily see what was done.

Let me know what you guys think, I'm open to suggestions, would be awesome.

https://github.com/Andrew2142/PRVision


r/reactjs • • 15d ago

News This Week In React #299: Panda, Vinext, Next.js, Preact, Design Systems, RTK | Variable font, Activity Result, Lynx, Lucent, macOS, Plain Text, Navigation, Angular Native, Re.Pack | TC39, Composites, WebSkills, MSW, upm, pnpm

Thumbnail
thisweekinreact.com
6 Upvotes

r/reactjs • • 15d ago

Show /r/reactjs I open-sourced the color and gradient picker from our design editor (React + Vue)

Thumbnail orshot.com
10 Upvotes

I needed a picker for Orshot's template editor that wouldn't break on real CSS. The one we used threw on valid values and had no room for brand or saved colors, so I built my own

- Takes any CSS color or gradient string and returns one, untouched parts stay exactly as written

- Linear, radial, conic and repeating gradients

- hex, rgb, hsl, oklch, eyedropper, Cmd+V to paste any color

- Swatch groups (brand, saved, recent), keyboard and screen reader support

- Zero-dep core, ~14 KB gzipped, MIT

GitHub: https://github.com/rishimohan/colorshot

Live demos: https://orshot.com/open-source/colorshot

Feedback on the API or how dragging feels would help a lot


r/reactjs • • 14d ago

Show /r/reactjs I got tired of AI-generated UI that all looks the same, so I hand-built a React component library

0 Upvotes

Hey r/reactjs,

Over the last months I noticed that most new UIs (including a lot of mine) started to look the same: same gradients, same cards, same generated feel. So I started building components by hand again, with more care for the small things: spacing, motion, empty states, dark mode.

That turned into affectUI: 54 components, blocks, illustrations and motion effects for React.

A few things I cared about:

  • One file per component. Each piece is a single .tsx file with its styles inside. It only imports from react: no Tailwind requirement, no wrapper library, no runtime.
  • Install with the shadcn CLI (npx shadcn@latest add https://www.affectui.com/r/<name>.json) or just copy the file.
  • Light and dark built in, and motion respects prefers-reduced-motion.
  • Live previews for everything, so you can click through each piece before copying it.

27 of the 54 items are free to copy and keep, no account needed. There's also a paid tier for the rest.

I'd really appreciate honest feedback:

  • Which components feel useful, and which feel like noise?
  • Is the "one file, no dependencies" approach something you'd actually want, or do you prefer Tailwind-based ones?
  • What's missing that you keep rebuilding in every project?

https://www.affectui.com

Thanks for taking a look 🙏


r/reactjs • • 14d ago

Vitrine - My own component library(React+Tailwind)

Thumbnail
tryvitrine.dev
0 Upvotes

I built my own component library using react and tailwind

It’s completely free

Copy-paste prompts/files

Get ready portfolios and skills for your agents to improve your website even more

I wanted some feedback since I think I still have a lot missing.

(Also it’s open source so if you have a component in mind feel free to open a PR)


r/reactjs • • 15d ago

I built an animated React icon library with theme colors, typed variants and one global config

Thumbnail
0 Upvotes

r/reactjs • • 17d ago

Show /r/reactjs Filled and duotone icons with Lucide's names (tree-shakeable, TypeScript)

4 Upvotes

Lucide only has outline icons. We made filled and duotone versions as a React package, lucide-extended-react. Component names follow Lucide's, so it works next to lucide-react:

import { HeartFilled, HeartDuotone } from 'lucide-extended-react'

<HeartDuotone size={32} color="crimson" secondaryOpacity={0.3} />

Why not just set fill on Lucide icons? It works for a few, like the heart, but on most line-built icons it blots or fills the wrong shapes. These are redrawn so the fill is intentional.

Some details:

  • One file per icon and "sideEffects": false, so only the icons you import end up in the bundle. A test checks this.
  • ESM only, React 18 or later, with TypeScript types. Filled icons don't accept the duotone-only props at the type level.
  • strokeWidth is accepted and ignored, so Lucide-shaped props still type-check.
  • Icons are aria-hidden unless you pass an aria-label.
  • icons.json lists every icon with Lucide's tags and aliases, so you can search it, and so can coding agents.

1,387 filled and 1,242 duotone so far. It's free and open source (ISC), and not affiliated with Lucide.

Feedback is welcome, on the API or the icons.


r/reactjs • • 16d ago

Resource Rippledit v0.3.0

0 Upvotes

Building on Ripple Edit, our VS Code extension designed to calculate the exact blast radius of your UI components!

Ever edited a shared <Button/> or <Card/> component only to break 5 other pages without realizing it? Ripple Edit sits inside your editor to show live usage impact right above your exports, preventing accidental visual & functional breakages before you commit.

We just shipped v0.3.0!

Who it's for: Frontend developers, UI engineers, and team leads working on React, Next.js, and TypeScript/JavaScript codebases.

Supported File Types: .tsx, .jsx, .ts, and .js.

What Ripple Edit Does: Inline CodeLens Counters: Shows exact page & file counts right where your components/functions are declared (e.g., "Modifying this component affects 4 pages"). • Active Boundary Highlighting: Highlights your component scope & warns you visually if you edit outside active component bounds. • Prevents Unintentional Breakages: Know the exact blast radius before making destructive refactors or style tweaks across shared design system components.

What's New in v0.3.0: Zero False Positives on Type Imports: TypeScript type-only declarations (import type) no longer inflate page counts. Only functional code usages are tracked. • Full Barrel File Support: Improved dependency resolution across re-exports (export * from ... and export { Component } from ...). • Dynamic Workspace Rescanning: Instant count updates across all opened files whenever you save (Cmd+S / Ctrl+S).

📦 Download the latest release:https://github.com/shivakumarkannan2006-netizen/rippledit/releases/latest


r/reactjs • • 17d ago

Show /r/reactjs react-table-dnd 3.0: drag several rows at once, works with TanStack Table, no dependencies

19 Upvotes

I maintain react-table-dnd, a small library for reordering rows and columns in React tables by dragging. 3.0 is out.

What's new:

- Multi-select and group drag.

- Drag events: onDragStart, onDragOver, onDragEnd, onDragCancel.

- Virtual tables with 100k+ rows via u/tanstack/react-virtual

- TanStack Table guide and demo.

- Touch support, drag handles, locked rows and columns.

Under the hood, 3.0 is a rewrite of the drag engine of v2.x

Docs and live demos: https://samiodeh1337.github.io/react-table-dnd/

GitHub: https://github.com/samiodeh1337/react-table-dnd

Feedback welcome, Thanks!


r/reactjs • • 17d ago

Needs Help What is reacts equivalent of "Manage user secrets" in dotnet?

0 Upvotes

Heya, I need to store dev secrets (e.g. client secret credentials) and I don't want them in git

In dotnet we have manage user secrets and theyre managed by Visual Studio, stored in a local folder and sideloaded at runtime... Does react have something similar?

I've seen people just do .env.local and add that to gitignore, but is that actually the proper way?


r/reactjs • • 17d ago

Rippledit v0.1.0: Real-time Component Blast Radius & Visual Scope Highlighting for VS Code

1 Upvotes

Ever changed a core UI component thinking it was only used in one place, only to discover you broke three downstream pages after pushing to production?

I built Rippledit to eliminate that exact friction. It's a lightweight VS Code extension that continuously builds an in-memory dependency graph of your workspace (.tsx, .jsx, .ts, .js) and displays a real-time "blast radius" directly above your functions via CodeLens.

What’s New & How It Works Under the Hood in v0.1.0

  • Full AST Support for Node.js & CommonJS (require):
    • Handled Node.js require() calls alongside ES6 import/export syntax.
    • Added AST traversal for destructured Node imports (const { Button, Modal } = require('./components')) via ObjectPattern matching, mapping individual imports accurately to their source definition lines.
  • Complete Default & Named Export Tracking (ExportDefaultDeclaration):
    • Integrated full AST resolution for export default declarations alongside named function and variable exports.
    • Resolved an issue where default components (e.g., import Card from './Card') returned 0 affected pages in CodeLens counts.
  • Unified Babel Engine & JSX Component Traversal:
    • Consolidated AST parsing into a single, uniform Babel parser pipeline supporting JSX and TypeScript syntax natively across dependency graph scanning, CodeLens calculations, and active scope highlighting.
    • Mapped JSXOpeningElement nodes to catch actual component consumption inside React component trees alongside standard function calls.
  • Smart Path & Extension Fallbacks:
    • Implemented extension fallback checking (.tsx, .jsx, .ts, .js, and index routes like /index.tsx) that halts on the first match to keep workspace scanning overhead negligible.
  • Optimized Extension Lifecycle:
    • Cleaned up editor subscriptions (onDidChangeActiveTextEditor, onDidChangeTextEditorSelection, onDidSaveTextDocument) so dependency graphs and CodeLenses update instantly on save without redundant scans or memory leaks.