Launch HN: JSX Tool (YC F25) – A Browser Dev-Panel IDE for React
111 points| jsunderland323 | 4 months ago | reply
Demo video: https://www.youtube.com/watch?v=JIIXvN7vhrs
I’ve been writing React code for nearly a decade. Since I first saw source maps in the days of Babel and Redux, I’ve always wanted to be able to edit my code from the source maps. I’ve also always wanted to be able to inspect my JSX like it was HTML.
Last year, I found my first real use of AI was taking ad-hoc CSS changes in the Chrome element inspector, pasting them into ChatGPT, and asking for the equivalent in Tailwind. I’d then paste those changes into my React TSX files.
I wanted to streamline this process but came to the conclusion that to do so I needed to build a JSX inspector. I had to write a custom AST parser to create a mapping between the JSX and HTML. So I hacked on an inspector for a couple of months that connected JSX to the DOM in both directions.
The next feature was adding a CSS editor, like the one in the browser inspectors but for JSX. Unlike styling a piece of HTML I decided that any in memory style edits to a React fiber should be globally applied, as if you had tweaked that line of code in your codebase.
Finally, I was able to add the two AI features I really wanted: (1) prompt for in-memory styles for when I was pixel tweaking, and (2) save those temporary changes back to my codebase in the convention of the codebase I was working in.
To accomplish talking to the filesystem from the Chrome extension I built a little local server that mounts from the root of your project and allows the extension to send file-system commands back to your project root. We named this the “Dev Server”. (Note: You can fully use us as a JSX inspector without this server installed.)
After all that, I found that to convert myself as a user I needed it to be a pretty fully functional IDE. I needed vim bindings, I needed a typechecker, I needed auto-complete, I needed a linter, I needed code search and I needed a proper file explorer. Fortunately we were able to take advantage of the dev-server architecture we had stumbled onto in order to add an LSP server and Rip Grep. At this point, after months of dog fooding, I use JSX Tool for almost all of my website edits.
We’re still rough around the edges for mobile but we’re working on that.
All of the IDE stuff not involving AI is free and works fine without AI. We let you get a taste of the prompting stuff for free but apply some rate limits.
The extension itself is not open source but the dev server with the LSP is. It’s a great foundation if you want to build any sort of in-browser IDE and it's nearly React agnostic. Building the dev server was a big undertaking so I’d love to see someone fork it and find value in it.
In the future we want to start adding things that we are in a position to take advantage of over something like Cursor, such as letting AI give you code suggestions for runtime exceptions or work with the network logs. We think that the convenience of having your IDE in the dev panel gives us a leg up in convenience and workflow context.
Anyway, regardless of how you feel about AI coding, I wanted to make something that was useful with or without AI. We’d love it if you gave it a spin and we want to share anything we can about the technical side of the product that you might find interesting.
[+] [-] onion2k|4 months ago|reply
If you open Devtools, then click "Sources", there are two options in the left panel 'Page' and 'Workspace'. Change to workspace and add the folder where your project lives. Now you can edit the code for your React (or anything else) project in Devtools and it'll save to your filesystem. You can make this a part of the project if you want to - https://chromium.googlesource.com/devtools/devtools-frontend...
Gemini is integrated into the Sources panel, so I just opened a JSX file and asked what classes I'd use in Tailwind to replace my CSS and it told me the right answer. It didn't update the code though. That 'Apply Edits' feature in jsxtool would be useful for a non-dev user.
[+] [-] chrisweekly|4 months ago|reply
[+] [-] jsunderland323|4 months ago|reply
I'm excited for you to try it out too! Please let me know how it goes
[+] [-] zaksingh|4 months ago|reply
As an aside, thinking back to learning React seven or eight years ago by watching a bunch of tutorial videos where they'd switch between IDE and browser views or awkward split screens, this seems like a way better format for explainers/walkthroughs of frontend code.
[+] [-] jsunderland323|4 months ago|reply
Thanks for the comment man!
[+] [-] csomar|4 months ago|reply
I tried
but got Maybe you should explain a bit what the server does and what it needs to connect to? why does it need some kind of a "proxy"? I understand you are trying to make a simple one click/command solution but some setups are more complicated than the standard yarn dev nextjs app.[+] [-] jsunderland323|4 months ago|reply
> I understand you are trying to make a simple one click/command solution but some setups are more complicated than the standard yarn dev nextjs app.
I agree our docs are totally lacking on the more advanced dns setups! I'm so sorry.
> Maybe you should explain a bit what the server does and what it needs to connect to? why does it need some kind of a "proxy"?
If you don't do the manual installation where you point to the web-socket server in your <head>, it will inject that tag into your <head> tag. The web socket it how the chrome extension communicates with your file system.
You don't need the proxy for most things. It's fine to continue to just use codeinput.com as long as you have a way of making the websocket url discoverable to the extension.
The only other use case for the proxy is if you are on a page that has over 10k react fibers and are not using vite. This comes up a lot in things like CRMs or Next projects with a lot of 3rd party dependencies. In that case we have to find and replace a part of the react source that limits the number of React Fibers with source maps from 10k to 1m.
I tried to give a system design overview here but I will be the first to admit that it's pretty lacking https://jsxtool.com/docs/dev-server/system-design
[+] [-] polishdude20|4 months ago|reply
My current workflow is to be in the dev tools, find the element I want to edit, edit the CSS to see if it looks how I want, copy the classname and html to then search in my codebase and make the exact same change there.
[+] [-] mundial2k2|4 months ago|reply
Known thing?
Seen through documentation, tried all i can see. Even tried getting into the discord channel, but that was invalid as well..
[+] [-] dahyman|4 months ago|reply
I'd recommend ensuring you're on the latest version, as we just deployed some bug fixes. If you continue to run into problems opening your app on a new tab and then opening the extension on that tab is usually the fix.
Hopefully chat with you soon on discord!
[+] [-] copypaper|4 months ago|reply
>I needed it to be a pretty fully functional IDE. I needed [IDE feature]...
I'm just curious, why didn't you make this as a VS Code plugin to benefit from all the features of an IDE? I'd imagine you could do something similar to the Live Server plugin. That way you could support any browser and not worry about maintaining the IDE features.
[+] [-] jsunderland323|4 months ago|reply
> I'm just curious, why didn't you make this as a VS Code plugin to benefit from all the features of an IDE?
What I was trying to articulate is that I want is to write code in my dev-panel. I don't want to switch panes to an IDE for frontend tweaking. Of course there are times that I do want to switch to my IDE, which is why we developed the VSCode extension that is coming.
> I'd imagine you could do something similar to the Live Server plugin. That way you could support any browser and not worry about maintaining the IDE features.
This may turn out to be the right approach in the end. I've just explored the one avenue that you see today but I could be totally wrong and you might be right that the embedded browser in the IDE approach is the way to go.
[+] [-] apsurd|4 months ago|reply
I watched the video and "deving from the UI" makes sense! Instantly get the value. Pretty cool!
It's another hurdle as to whether I'm really going to pay the switching cost of changing my dev flow, but it is a very intuitive and compelling proposition. well done.
[+] [-] jsunderland323|4 months ago|reply
In my experience, I found the switching cost to be low for things like copy changes and css stuff (or lower than I expected). Obviously I am incentivized more than anyone else to use it but it’s actually painful to go to an IDE to make those small changes after you get used to it.
I don’t realistically expect anyone to use us as a full IDE yet. It’s got a ways to go but for simple things, it’s awesome. We’re going to keep chipping away though.
[+] [-] whatamidoingyo|4 months ago|reply
If you can implement some Vim-style navigation and key-bindings into this, that would be awesome!
[+] [-] jsunderland323|4 months ago|reply
[+] [-] catchmeifyoucan|4 months ago|reply
I hope there’s a right click, “edit JSX” button.
[+] [-] jsunderland323|4 months ago|reply
[+] [-] ARussell|4 months ago|reply
[+] [-] jsunderland323|4 months ago|reply
[+] [-] hungryhobbit|4 months ago|reply
[+] [-] jsunderland323|4 months ago|reply
I swear it isn't vaporware but there's only one way to find out.
There are definitely rough edges, we are after all a 2 man band but I don't ship things that don't work and it's admittedly not done great with older versions of React. You should try it though!
[+] [-] dang|4 months ago|reply
https://news.ycombinator.com/item?id=24215211
https://hn.algolia.com/?dateRange=all&page=0&prefix=true&que...
[+] [-] allisdust|4 months ago|reply
What is the point of posting here if anything critical is just a downvoted down
I thought these posts are for feedback
[+] [-] ontouchstart|4 months ago|reply
[+] [-] jsunderland323|4 months ago|reply
[+] [-] throwthrow0987|4 months ago|reply
[+] [-] jsunderland323|4 months ago|reply
[+] [-] kaeland|4 months ago|reply
[+] [-] jsunderland323|4 months ago|reply
[+] [-] leobuskin|4 months ago|reply
I apologize for the writing style, don't take it personally, just every devtool product I see on HN nowadays fails for this particular reason.
[+] [-] jsunderland323|4 months ago|reply
So from my vantage point we need some way to create revenue. We have tried to make as much of the tool free as we can. We do a 10% markup on tokens issued by us. That's better than cursor who does 25%. We support BYOK so you can use your own claude key, and vertex key. If you do that you are basically just paying us a flat troll tole of $16/month to use our entire frontend but you are free to be unbounded by a markup on your tokens. We actually prefer this because it's better unit economics for us. So please bring your own key!
[+] [-] jcheng|4 months ago|reply
If there's an official way for 3rd party devs to piggyback on Anthropic plans, someone please tell me how!
[+] [-] swyx|4 months ago|reply
[+] [-] mrafiee|4 months ago|reply
[+] [-] jsunderland323|4 months ago|reply
[+] [-] cyberdrunk2|4 months ago|reply
> React 19 Memory Optimization Detected React has detected that this is a large page and is removing source information that is necessary for JSX Tool to run. This optimization helps improve performance but prevents JSX Tool from inspecting your React components. You can either navigate to a different page or override this limitation using the proxy setup.
[+] [-] jsunderland323|4 months ago|reply
[+] [-] marcelr|4 months ago|reply
[+] [-] jsunderland323|4 months ago|reply
[+] [-] cadamsdotcom|4 months ago|reply
Are you saying you invented hot reload? And a dev tools css editor?
I am confused, because the ability to edit code and have the page update instantly exists with Vite, and next.js, and a bunch of other frameworks. It’s janky at times but good enough for most - and your edits are in your repo ready to commit. And browser CSS inspectors are really great. And there’s the React DevTools if you need to see props & component hierarchy.
Can you explain the value add over all these free things we already have?
[+] [-] jsunderland323|4 months ago|reply
I'm not saying that, no. We are super dependent upon HMR servers from Vite/Next.
We made the ability to write back from your dev panel to your filesystem and made a JSX inspector. As far as I know these are not things supported by either Next or Vite.
> And browser CSS inspectors are really great
I couldn't agree more. I agree so much that we wanted to make one so that you could do the same to JSX as you can do to HTML.
> Can you explain the value add over all these free things we already have?
You should watch the demo video!