<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: rxliuli</title><link>https://news.ycombinator.com/user?id=rxliuli</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 21 Jul 2026 20:20:41 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=rxliuli" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[Automating Safari Extension Publishing with GitHub Actions]]></title><description><![CDATA[
<p>Article URL: <a href="https://rxliuli.com/blog/automating-safari-extension-publishing-with-github-actions/">https://rxliuli.com/blog/automating-safari-extension-publishing-with-github-actions/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48979100">https://news.ycombinator.com/item?id=48979100</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 20 Jul 2026 14:08:58 +0000</pubDate><link>https://rxliuli.com/blog/automating-safari-extension-publishing-with-github-actions/</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=48979100</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48979100</guid></item><item><title><![CDATA[New comment by rxliuli in "[dead]"]]></title><description><![CDATA[
<p>This is the fourth post in the extension development series. I've just finished writing the seventh one, which will be published gradually after proofreading.</p>
]]></description><pubDate>Sun, 25 Jan 2026 12:24:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=46753503</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=46753503</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46753503</guid></item><item><title><![CDATA[New comment by rxliuli in "[dead]"]]></title><description><![CDATA[
<p>This is the second post in the extension development series blog. I just finished it, so if you find any errors or have any questions, feel free to leave me a comment!</p>
]]></description><pubDate>Wed, 21 Jan 2026 15:57:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=46707471</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=46707471</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46707471</guid></item><item><title><![CDATA[New comment by rxliuli in "[dead]"]]></title><description><![CDATA[
<p>I've been building browser extensions for about a year and created around 20 of them. Thought it might be useful to share what I've learned in a series of posts.<p>This first one covers the basic concepts - manifest files, content scripts, and how they work together.<p>If you have any questions or suggestions for future topics, feel free to comment!</p>
]]></description><pubDate>Fri, 16 Jan 2026 12:28:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=46645765</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=46645765</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46645765</guid></item><item><title><![CDATA[New comment by rxliuli in "The Anatomy of a macOS App"]]></title><description><![CDATA[
<p>That's right, there's a similar comparison between the iOS App Store and Android Play Store. Although the annual $99 fee is indeed expensive, the Play Store requires every app to find 12 users for 14 days of internal testing before submission for review, which is utterly incomprehensible, not to mention the constant warnings about inactive accounts potentially being disabled.</p>
]]></description><pubDate>Mon, 08 Dec 2025 04:00:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=46188140</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=46188140</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46188140</guid></item><item><title><![CDATA[New comment by rxliuli in "App Store web has exposed all its source code"]]></title><description><![CDATA[
<p>Haven't received it yet.</p>
]]></description><pubDate>Tue, 04 Nov 2025 15:22:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=45812010</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=45812010</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45812010</guid></item><item><title><![CDATA[New comment by rxliuli in "App Store web has exposed all its source code"]]></title><description><![CDATA[
<p>It appears to have been an accident now - they fixed the issue two hours after I posted on Reddit.</p>
]]></description><pubDate>Tue, 04 Nov 2025 08:03:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=45808533</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=45808533</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45808533</guid></item><item><title><![CDATA[New comment by rxliuli in "[dead]"]]></title><description><![CDATA[
<p>I guess you're promoting something, which could indeed get blocked.</p>
]]></description><pubDate>Sat, 18 Oct 2025 22:47:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=45630905</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=45630905</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45630905</guid></item><item><title><![CDATA[New comment by rxliuli in "[dead]"]]></title><description><![CDATA[
<p>Got tired of dealing with unreadable fetch code when copying from browser DevTools - especially those with long query strings and minified JSON.<p>Built *Fetch Beautifier* to solve this. It formats fetch requests instantly with `Ctrl+Shift+V`.<p>*Before:*
```js
fetch('<a href="https://api.example.com/data?userId=123&type=post&limit=10&offset=0" rel="nofollow">https://api.example.com/data?userId=123&type=post&limit=10&o...</a>', {
  headers: {
    accept: 'application/json',
    'content-type': 'application/json',
    authorization: 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9',
  },
  body: '{"title":"Hello World","content":"This is a test"}',
  method: 'POST',
})
```<p>*After:*
```js
const url = new URL('<a href="https://api.example.com/data" rel="nofollow">https://api.example.com/data</a>')
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',
})
```<p>Free on VS Code marketplace. Feedback welcome!<p><a href="https://marketplace.visualstudio.com/items?itemName=rxliuli.fetch-beautifier" rel="nofollow">https://marketplace.visualstudio.com/items?itemName=rxliuli....</a><p>Demo Video:
<a href="https://www.youtube.com/watch?v=9SMLOwZwnU0" rel="nofollow">https://www.youtube.com/watch?v=9SMLOwZwnU0</a></p>
]]></description><pubDate>Fri, 05 Sep 2025 14:27:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=45139022</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=45139022</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45139022</guid></item><item><title><![CDATA[New comment by rxliuli in "[dead]"]]></title><description><![CDATA[
<p>I built a simple tool to clean them up instantly. It auto-parses URL params, nested JSON, and formats the body perfectly.</p>
]]></description><pubDate>Sat, 14 Jun 2025 06:48:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=44274682</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=44274682</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44274682</guid></item><item><title><![CDATA[New comment by rxliuli in "Ask HN: Am I old?"]]></title><description><![CDATA[
<p>I want to be able to understand your point. For those who enjoy programming, writing code is indeed a pleasure. I spent the whole day today writing a JavaScript serialization package, and even though I know someone has already done it, I am still willing to write a new one for my specific scenario.
On the other hand, I think that although AI seems friendly to newcomers (inexperienced developers), it is actually more friendly to experienced developers because you can have AI help you complete some tasks and then review them yourself. Inexperienced developers have difficulty accurately pinpointing problems when they encounter issues, causing AI to keep going in circles and hitting walls.</p>
]]></description><pubDate>Wed, 28 May 2025 14:02:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=44116152</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=44116152</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44116152</guid></item><item><title><![CDATA[New comment by rxliuli in "[dead]"]]></title><description><![CDATA[
<p>Based on devalue, I wrote a new JS serialization library called devaluex, which supports asynchronous serialization and plugins. Through plugins, it supports types like Blob, Stream, Error, Request, Response, etc. It is still quite rudimentary at the moment and is mainly used for communication serialization between browser extension Content Script and Background, as JSON.stringify does not support many types.
I previously tried seroval (the SolidJS base library) and devalue (the Svelte base library). The authors support more features and use eval (very cleverly) for deserialization. Unfortunately, eval cannot be used in some environments (such as browser extensions). Although the authors also support a JSON mode, its performance is not as good as devalue, so I ultimately chose to wrap devalue.</p>
]]></description><pubDate>Wed, 28 May 2025 13:56:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=44116086</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=44116086</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44116086</guid></item><item><title><![CDATA[New comment by rxliuli in "Comparing Docusaurus and Starlight and why we made the switch"]]></title><description><![CDATA[
<p>I haven't used Starlight, but Docusaurus is very slow. The last time I used it, its performance on a large documentation site was terrible, even causing the GitHub Actions Runner to time out. In other words, a single build took over 30 minutes. I never considered using it again after that.</p>
]]></description><pubDate>Wed, 28 May 2025 13:51:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=44116040</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=44116040</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44116040</guid></item><item><title><![CDATA[New comment by rxliuli in "A privilege escalation from Chrome extensions (2023)"]]></title><description><![CDATA[
<p>Your journey of discovery is really cool.</p>
]]></description><pubDate>Wed, 28 May 2025 11:52:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=44114967</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=44114967</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44114967</guid></item><item><title><![CDATA[Intercepting Network Requests in JavaScript]]></title><description><![CDATA[
<p>Article URL: <a href="https://rxliuli.com/blog/intercepting-network-requests-in-chrome-extensions/">https://rxliuli.com/blog/intercepting-network-requests-in-chrome-extensions/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43942631">https://news.ycombinator.com/item?id=43942631</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 10 May 2025 01:49:59 +0000</pubDate><link>https://rxliuli.com/blog/intercepting-network-requests-in-chrome-extensions/</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=43942631</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43942631</guid></item><item><title><![CDATA[New comment by rxliuli in "tailwindcss-github-markdown – GitHub Markdown styling for TailwindCSS"]]></title><description><![CDATA[
<p>I was frustrated with the default styles of @tailwindcss/typography, so I created a plugin that ports GitHub's beautiful Markdown styling to Tailwind CSS.<p>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.<p>GitHub:
<a href="https://github.com/rxliuli/tailwindcss-github-markdown">https://github.com/rxliuli/tailwindcss-github-markdown</a></p>
]]></description><pubDate>Wed, 07 May 2025 16:27:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=43917700</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=43917700</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43917700</guid></item><item><title><![CDATA[tailwindcss-github-markdown – GitHub Markdown styling for TailwindCSS]]></title><description><![CDATA[
<p>I was frustrated with the default styles of @tailwindcss/typography, so I created a plugin that ports GitHub's beautiful Markdown styling to Tailwind CSS.<p>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.<p>GitHub:
<a href="https://github.com/rxliuli/tailwindcss-github-markdown">https://github.com/rxliuli/tailwindcss-github-markdown</a></p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43917611">https://news.ycombinator.com/item?id=43917611</a></p>
<p>Points: 2</p>
<p># Comments: 1</p>
]]></description><pubDate>Wed, 07 May 2025 16:20:28 +0000</pubDate><link>https://www.npmjs.com/package/tailwindcss-github-markdown</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=43917611</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43917611</guid></item><item><title><![CDATA[New comment by rxliuli in "[dead]"]]></title><description><![CDATA[
<p>As the title says, today I tried using deepwiki to generate links for one of my small tools. The architecture diagrams/flowcharts look particularly good, and the documentation also appears neat and well-organized. I wonder if placing this link on the GitHub repository homepage would be helpful for people using this project, or do you think that content generated by such LLMs cannot guarantee accuracy and only causes confusion?</p>
]]></description><pubDate>Sun, 27 Apr 2025 15:17:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=43812522</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=43812522</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43812522</guid></item><item><title><![CDATA[New comment by rxliuli in "Journey to Optimize Cloudflare D1 Database Queries"]]></title><description><![CDATA[
<p>It looks interesting, I will see what effect it has.</p>
]]></description><pubDate>Wed, 23 Apr 2025 01:49:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=43767971</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=43767971</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43767971</guid></item><item><title><![CDATA[New comment by rxliuli in "CORS Unblock – Make Web Apps Work Like Native Apps (No Back End Needed)"]]></title><description><![CDATA[
<p>Sorry for seeing the reply so late. This is an interesting idea, and my inspiration comes from Shizuku on Android, which allows granting permission only once using adb commands, and then other apps can use advanced Android APIs through this app without each app having to handle it via command line each time. <a href="https://shizuku.rikka.app/" rel="nofollow">https://shizuku.rikka.app/</a><p>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).</p>
]]></description><pubDate>Tue, 22 Apr 2025 17:07:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=43764254</link><dc:creator>rxliuli</dc:creator><comments>https://news.ycombinator.com/item?id=43764254</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43764254</guid></item></channel></rss>