62 karma · joined February 6, 2025
This first one covers the basic concepts - manifest files, content scripts, and how they work together.
If you have any questions or suggestions for future topics, feel free to comment!
Built *Fetch Beautifier* to solve this. It formats fetch requests instantly with `Ctrl+Shift+V`.
*Before:* ```js fetch('https://api.example.com/data?userId=123&type=post&limit=10&o...', { headers: { accept: 'application/json', 'content-type': 'application/json', authorization: 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9', }, body: '{"title":"Hello World","content":"This is a test"}', method: 'POST', }) ```
*After:* ```js const url = new URL('https://api.example.com/data') url.search = new URLSearchParams([ ['userId', '123'], ['type', 'post'], ['limit', '10'], ['offset', '0'], ]).toString() fetch(url, { headers: { accept: 'application/json', 'content-type': 'application/json', authorization: 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9', }, body: JSON.stringify({ title: 'Hello World', content: 'This is a test', }), method: 'POST', }) ```
Free on VS Code marketplace. Feedback welcome!
https://marketplace.visualstudio.com/items?itemName=rxliuli....
Demo Video: https://www.youtube.com/watch?v=9SMLOwZwnU0
The plugin (`tailwindcss-github-markdown`) lets you add GitHub's Markdown rendering to your projects with minimal effort - just import it and add the `prose` class to your container, exactly like you would with the official typography plugin. It fully supports both light and dark themes via the standard `prose-invert` class.
GitHub: https://github.com/rxliuli/tailwindcss-github-markdown
So I think it's possible for Web Apps to have a similar experience. Currently, the Chrome WebStore version has been approved, and Firefox/Safari are under review. Hopefully, this extension can eventually be used in all major browsers (including mobile support for plugins like Kiwi/Edge/Safari).
While trying to help solve this problem, I discovered that existing online tools all had various limitations. The top 5 ranked websites either had file size restrictions, couldn't preserve folder structures, or had difficult interfaces.
This prompted me to create myunzip, which can:
- Compress/decompress ZIP files of any size - Fully preserve directory structures - Provide an intuitive user interface - Process everything in-browser with no file uploads
The tool is completely free to use with no ads.
Feedback or bug reports welcome!
Youtube Demo: https://www.youtube.com/watch?v=8F_n_qC5IYc
*Why This Matters:* - No need for a backend proxy server - No server costs - No complex CORS configurations - Your web app can directly access APIs like a native app would
*How It Works:* 1. Install the extension from the [Chrome Web Store](https://chromewebstore.google.com/detail/odkadbffomicljkjfep...) 2. When your web app needs to access external APIs, it will request permission 3. You approve which domains the app can access 4. That's it! The app can now make cross-origin requests
*Security & Privacy:* - You control which websites can access which domains - All operations happen locally in your browser - No data collection - Permissions can be revoked anytime
Check out a demo here: https://web-content-extractor.rxliuli.com/
Let me know if you have any questions!
Yes, when I posted this content on Reddit, someone immediately brought up "Svelte's reactivity doesn't exist at runtime" to refute me, which isn't even a valid argument in Svelte 5. https://www.reddit.com/r/sveltejs/comments/1j6ayaf/comment/m...
> put your arguments in order of strength, and remove the weakest ones. Quality wins over volume, and most people are not going to read the whole thing
I did remove some of them, such as the issue of "data ownership," which is the first time I've heard this term outside of Rust's web framework, but it was just a warning, not a blocking issue, so I deleted it. https://svelte.dev/docs/svelte/runtime-warnings#Client-warni...
> In any case, i think some of this is reasonable. But having spent lots of time with frameworks, i'll keep using Svelte5, but I do hope things improve. I feel like i'd spend the same amount of time with other idiosyncrasies if i moved to Solid.
Yes, the current project has been underway for 3 months, and I won't replace the entire web framework now, but I will definitely consider whether there are better options for the next project.
It reminds me that React hooks must start with "use," which is a very strange thing, no matter how they explain it. Additionally, I mention this because Vue 3/SolidJS, which also uses proxies, does not require you to use special file names; you can use it in any regular JS.
> This is on purpose, as you know. They want reactivity to be explicit. The benefit of runes is, that if you like Vue and Solid so much, you can literally create their reactive primitives in Runes, and it works.
It just adds extra boilerplate work. Unless you use a custom Proxy to wrap the runes state, I don't think it's possible to implement the Vue Composition API, and if you do that, there will be a double proxy, and even $state.snapshot won't save me.
> This entire section is weird. The title complains about classes, but then the second code snippet is a function back again. And the third is also equally weird, why would you ever need that.
Because the escape hatch left by svelte5 is very strange and seems inconsistent, in the four situations I listed, svelte5 can only make half of them effective, while vue3 and similar frameworks can make them all work properly.
> Same here, Svelte always had this behavior. As you also state, this is present in other frameworks, such as Vue itself, which you're promoting as better than Svelte
Yes, it has always existed, but svelte5 still hasn't addressed it. Also, I don't think vue3 is better than svelte4 because I believe their APIs are very different and not easy to compare. The runes API of svelte5 looks very familiar, and I will certainly try to compare them.
Yes, but I immediately pointed out the oddities of the combination of class and runes below, which looks very strange and inconsistent.
> Despite all this, Svelte 5 introduces $writable
I don't know what this is.