<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Haoyuan Liu</title>
    <description>The latest articles on DEV Community by Haoyuan Liu (@yang991178).</description>
    <link>https://dev.to/yang991178</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F418802%2F17f1b0cb-a25b-4160-b236-5cb52f335d09.jpeg</url>
      <title>DEV Community: Haoyuan Liu</title>
      <link>https://dev.to/yang991178</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yang991178"/>
    <language>en</language>
    <item>
      <title>Fluent Reader: open-source RSS reader built with Electron &amp; React</title>
      <dc:creator>Haoyuan Liu</dc:creator>
      <pubDate>Wed, 01 Jul 2020 08:11:36 +0000</pubDate>
      <link>https://dev.to/yang991178/fluent-reader-open-source-rss-reader-built-with-electron-react-4cko</link>
      <guid>https://dev.to/yang991178/fluent-reader-open-source-rss-reader-built-with-electron-react-4cko</guid>
      <description>&lt;p&gt;Fluent Reader is a local desktop RSS reader that I have been working on for the past month. It started as a toy project for me to try React after using Vue for years, but has since turned into something quite usable. &lt;/p&gt;

&lt;p&gt;Website: &lt;a href="https://hyliu.me/fluent-reader/"&gt;https://hyliu.me/fluent-reader/&lt;/a&gt;&lt;br&gt;
GitHub: &lt;a href="https://github.com/yang991178/fluent-reader"&gt;https://github.com/yang991178/fluent-reader&lt;/a&gt;&lt;br&gt;
Microsoft Store: &lt;a href="https://www.microsoft.com/store/apps/9P71FC94LRH8?cid=devto"&gt;https://www.microsoft.com/store/apps/9P71FC94LRH8&lt;/a&gt;&lt;br&gt;
Mac App Store: &lt;a href="https://apps.apple.com/app/id1520907427"&gt;https://apps.apple.com/app/id1520907427&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A modern UI inspired by Fluent Design System with full dark mode support.&lt;/li&gt;
&lt;li&gt;Importing from or exporting to OPML files&lt;/li&gt;
&lt;li&gt;Full application data backup &amp;amp; restoration.&lt;/li&gt;
&lt;li&gt;Read the full content with the built-in article view or load webpages by default.&lt;/li&gt;
&lt;li&gt;Search for articles with regular expressions or filter by read status.&lt;/li&gt;
&lt;li&gt;Hide, mark as read, or star articles automatically as they arrive with regular expression rules.&lt;/li&gt;
&lt;li&gt;Organize your subscriptions with folder-like groupings.&lt;/li&gt;
&lt;li&gt;Single-key keyboard shortcuts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Development pitfalls
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Electron security
&lt;/h3&gt;

&lt;p&gt;It may be tempting to start developing with &lt;code&gt;nodeIntegration&lt;/code&gt; enabled in the renderer process or access functions in the main process with the &lt;code&gt;remote&lt;/code&gt; module. This is the first major pitfall I ran into knowing basically nothing about Electron a month ago. Overall, this creates a security blackhole for an app that fetches content from all over the web. In the end I had to rewrote most of those logic using IPC modules and context bridges. This &lt;a href="https://slack.engineering/the-app-sandbox-94178f77e5e3"&gt;article from the Slack engineering blog&lt;/a&gt; serves as a good introduction to the issue.&lt;/p&gt;

&lt;h3&gt;
  
  
  Publishing to the stores
&lt;/h3&gt;

&lt;p&gt;Packaging the app into appx bundles and uploading to Microsoft Store all went smoothly with &lt;a href="https://www.electron.build"&gt;Electron Builder&lt;/a&gt;. (For a side note, Microsoft Store even supports smart update by extracting the ~2MB of compressed JS files out of a ~70MB appx package.) The real hassles came from correctly signing the app for the Mac App Store. Following &lt;a href="https://webspaceteam.com/electron/how-to-publish-an-electron-application-to-mac-app-store"&gt;this article&lt;/a&gt; should do the trick, although the latest Electron version (v9.0.5) also works.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I may work on integrating the app with RSS services like Feedly and Inoreader. &lt;/li&gt;
&lt;li&gt;You can help &lt;a href="https://github.com/yang991178/fluent-reader#contribute"&gt;internationalize the app into additional languages&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;For my future projects, &lt;a href="https://microsoft.github.io/react-native-windows/"&gt;React Native Windows&lt;/a&gt; seems pretty promising as it compiles down to UWP components while providing macOS compatibility. &lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>electron</category>
      <category>typescript</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
