<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Harmony Developers]]></title><description><![CDATA[We are developers passionate about Huawei's new HarmonyOS Next, Open Harmony and Eclipse Oniro.]]></description><link>https://www.harmony-developers.com</link><image><url>https://substackcdn.com/image/fetch/$s_!levV!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F962ee86e-9877-46f5-856a-d609206a53e9_608x608.png</url><title>Harmony Developers</title><link>https://www.harmony-developers.com</link></image><generator>Substack</generator><lastBuildDate>Sat, 31 Oct 2026 09:47:52 GMT</lastBuildDate><atom:link href="https://www.harmony-developers.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Harmony OS Developers]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[hosdevs@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[hosdevs@substack.com]]></itunes:email><itunes:name><![CDATA[Harmony OS Developers]]></itunes:name></itunes:owner><itunes:author><![CDATA[Harmony OS Developers]]></itunes:author><googleplay:owner><![CDATA[hosdevs@substack.com]]></googleplay:owner><googleplay:email><![CDATA[hosdevs@substack.com]]></googleplay:email><googleplay:author><![CDATA[Harmony OS Developers]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Compile and install the Neovim and AstroNvim configuration guide in the HarmonyOS PC Convergence Development Engine ]]></title><description><![CDATA[This article records the complete process of compiling Neovim and tree-sitter from source code due to the limitations of the glibc version in the container environment of the HarmonyOS PC fusion dev]]></description><link>https://www.harmony-developers.com/p/compile-and-install-the-neovim-and</link><guid isPermaLink="false">https://www.harmony-developers.com/p/compile-and-install-the-neovim-and</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Sat, 03 Oct 2026 18:06:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/MaSmGlSqkDk" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mM0_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005498a6-737e-4b5a-90fd-df74102d1db3_320x180.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mM0_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005498a6-737e-4b5a-90fd-df74102d1db3_320x180.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mM0_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005498a6-737e-4b5a-90fd-df74102d1db3_320x180.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mM0_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005498a6-737e-4b5a-90fd-df74102d1db3_320x180.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mM0_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005498a6-737e-4b5a-90fd-df74102d1db3_320x180.jpeg" width="320" height="180" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/005498a6-737e-4b5a-90fd-df74102d1db3_320x180.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:180,&quot;width&quot;:320,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7938,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/193109817?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005498a6-737e-4b5a-90fd-df74102d1db3_320x180.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!mM0_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005498a6-737e-4b5a-90fd-df74102d1db3_320x180.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mM0_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005498a6-737e-4b5a-90fd-df74102d1db3_320x180.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mM0_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005498a6-737e-4b5a-90fd-df74102d1db3_320x180.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mM0_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F005498a6-737e-4b5a-90fd-df74102d1db3_320x180.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></div></figure></div><div id="youtube2-MaSmGlSqkDk" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;MaSmGlSqkDk&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/MaSmGlSqkDk?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>title=&#8221;HarmonyOS PC openEuler is commonly used to develop software&#8221; frameborder=&#8221;0&#8221; allow=&#8221;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#8221; referrerpolicy=&#8221;strict-origin-when-cross-origin&#8221; allowfullscreen&gt;&lt;/iframe&gt;</p><h2><strong>Background of the problem</strong></h2><h3><strong>glibc version conflict</strong></h3><p>In the openEuler container of the HarmonyOS PC Convergence Development Engine, an error is encountered when trying to install the nvim-treesitter plugin:</p><pre><code><code>[nvim-treesitter/install/c] error: Error during &#8220;tree-sitter build&#8221;: 
tree-sitter: /usr/lib64/libc.so.6: version `GLIBC_2.39&#8217; not found (required by tree-sitter)</code></code></pre><h3><strong>Version check</strong></h3><pre><code><code>ldd --version
# &#36755;&#20986;&#65306;ldd (GNU libc) 2.38

cat /etc/os-release
# NAME=&#8221;openEuler&#8221;
# VERSION=&#8221;24.03 (LTS-SP1)&#8221;</code></code></pre><p>glibc for openEuler 24.03 SP1 is 2.38, while the precompiled tree-sitter CLI downloaded by nvim-treesitter requires glibc 2.39.</p><h3><strong>Root causes</strong></h3><p>Container environments share virtual machine kernels and cannot be upgraded to glibc. The solution is to <strong>compile all components from source</strong>, using the glibc version of the current system.</p><h2><strong>Solution overview</strong></h2><pre><code><code>1. &#23433;&#35013;&#32534;&#35793;&#20381;&#36182;
2. &#23433;&#35013;Rust&#24037;&#20855;&#38142;&#65288;&#32534;&#35793;tree-sitter CLI&#38656;&#35201;&#65289;
3. &#20174;&#28304;&#30721;&#32534;&#35793;tree-sitter CLI
4. &#20174;&#28304;&#30721;&#32534;&#35793;Neovim
5. &#37197;&#32622;AstroNvim</code></code></pre><h2><strong>1. Install compilation dependencies</strong></h2><h3><strong>Basic tools</strong></h3><pre><code><code># &#23433;&#35013;cmake&#21644;ninja
sudo dnf install -y cmake ninja-build

# &#39564;&#35777;&#23433;&#35013;
cmake --version
ninja --version</code></code></pre><h3><strong>Other dependencies</strong></h3><pre><code><code># gcc&#12289;make&#31561;&#24050;&#39044;&#35013;
gcc --version
make --version</code></code></pre><h2><strong>2. Install the Rust toolchain</strong></h2><p>The tree-sitter CLI is written in Rust and needs to be installed first:</p><pre><code><code># &#35774;&#32622;&#20195;&#29702;&#65288;&#21487;&#36873;&#65289;
export https_proxy=http://192.168.3.6:1080

# &#23433;&#35013;Rust
curl --proto &#8216;=https&#8217; -sSf https://sh.rustup.rs | sh -s -- -y

# &#21152;&#36733;&#29615;&#22659;
source ~/.cargo/env

# &#39564;&#35777;
cargo --version
rustc --version</code></code></pre><h2><strong>3. Compile the tree-sitter CLI</strong></h2><h3><strong>Get the source code</strong></h3><pre><code><code>export https_proxy=http://192.168.3.6:1080

# &#20811;&#38534;tree-sitter CLI&#65288;&#20351;&#29992;&#31283;&#23450;&#29256;&#26412;v0.24.1&#65289;
git clone --depth 1 --branch v0.24.1 \
    https://github.com/tree-sitter/tree-sitter.git \
    ~/tree-sitter-cli</code></code></pre><h3><strong>Compilation</strong></h3><pre><code><code>cd ~/tree-sitter-cli
cargo build --release</code></code></pre><p>The compilation process takes about 1-2 minutes.</p><h3><strong>Installation</strong></h3><pre><code><code># &#31995;&#32479;&#23433;&#35013;
sudo cp ~/tree-sitter-cli/target/release/tree-sitter /usr/local/bin/

# &#25110;&#26367;&#25442;mason&#30340;&#39044;&#32534;&#35793;&#29256;&#26412;
cp ~/tree-sitter-cli/target/release/tree-sitter \
    ~/.local/share/nvim/mason/packages/tree-sitter-cli/tree-sitter-linux-arm64

# &#39564;&#35777;
tree-sitter --version
# &#36755;&#20986;&#65306;tree-sitter 0.24.1</code></code></pre><h2><strong>4. Compiling Neovim</strong></h2><h3><strong>Get the source code</strong></h3><pre><code><code>export https_proxy=http://192.168.3.6:1080

# &#26597;&#30475;&#26368;&#26032;&#29256;&#26412;
git ls-remote --tags https://github.com/neovim/neovim.git | \
    grep -v &#8216;\^{}&#8217; | grep &#8216;v0\.1[0-2]&#8217; | tail -5

# &#20811;&#38534;&#26368;&#26032;&#31283;&#23450;&#29256;v0.12.0
git clone --depth 1 --branch v0.12.0 \
    https://github.com/neovim/neovim.git \
    ~/neovim</code></code></pre><h3><strong>Compilation</strong></h3><pre><code><code>cd ~/neovim
make CMAKE_BUILD_TYPE=Release</code></code></pre><p>The compilation process takes about 3-5 minutes and automatically downloads and compiles all dependencies.</p><h3><strong>Installation</strong></h3><pre><code><code>sudo make install

# &#39564;&#35777;
nvim --version
# &#36755;&#20986;&#65306;
# NVIM v0.12.0
# Build type: Release
# LuaJIT 2.1.1774638290</code></code></pre><h3><strong>Compile output location</strong></h3><pre><code><code>ls ~/neovim/build/bin/nvim
# -rwxr-xr-x 1 user user 10346568 ... nvim</code></code></pre><h2><strong>5. Configure AstroNvim</strong></h2><p>AstroNvim is a pre-configured Neovim distribution that provides a complete IDE experience.</p><h3><strong>Back up existing configurations</strong></h3><pre><code><code># &#22791;&#20221;&#26087;&#37197;&#32622;
mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak
mv ~/.local/state/nvim ~/.local/state/nvim.bak</code></code></pre><h3><strong>Install AstroNvim</strong></h3><pre><code><code># &#20811;&#38534;AstroNvim&#37197;&#32622;
git clone --depth 1 https://github.com/AstroNvim/AstroNvim \
    ~/.config/nvim

# &#22797;&#21046;&#40664;&#35748;&#29992;&#25143;&#37197;&#32622;&#27169;&#26495;
cp ~/.config/nvim/lua/user_template.lua ~/.config/nvim/lua/user.lua</code></code></pre><h3><strong>First launch</strong></h3><pre><code><code>nvim</code></code></pre><p>The first launch automatically installs all plugins and the tree-sitter parser. Since we have compiled the tree-sitter CLI, the treesitter installation does not give glibc errors.</p><h3><strong>Custom configuration</strong></h3><p>Edit :<code>~/.config/nvim/lua/user.lua</code></p><pre><code><code>return {
  -- &#33258;&#23450;&#20041;&#39068;&#33394;&#26041;&#26696;
  colorscheme = &#8220;catppuccin-mocha&#8221;,
  
  -- &#33258;&#23450;&#20041;&#36873;&#39033;
  options = {
    opt = {
      relativenumber = true, -- &#30456;&#23545;&#34892;&#21495;
    },
  },
  
  -- &#33258;&#23450;&#20041;&#25554;&#20214;
  plugins = {
    &#8220;rebelot/kanagawa.nvim&#8221;,
    -- &#28155;&#21152;&#26356;&#22810;&#25554;&#20214;...
  },
  
  -- LSP&#37197;&#32622;
  lsp = {
    formatting = {
      format_on_save = true,
    },
    servers = {
      -- &#28155;&#21152;LSP&#26381;&#21153;&#22120;...
    },
  },
}</code></code></pre><h3><strong>Install LSPs and tools</strong></h3><p>Running in Neovim:</p><pre><code><code>:LspInstall python
:LspInstall lua_ls
:TSInstall python
:TSInstall lua
:MasonInstall prettier</code></code></pre><h2><strong>6. Verify the tree-sitter work</strong></h2><h3><strong>Install the parser</strong></h3><pre><code><code>:TSInstallInfo</code></code></pre><p>Review the available parsers and select the desired installation:</p><pre><code><code>:TSInstall vimdoc
:TSInstall lua
:TSInstall python
:TSInstall javascript
:TSInstall html
:TSInstall css
:TSInstall json
:TSInstall markdown</code></code></pre><h3><strong>Check the status</strong></h3><pre><code><code>:TSInstallInfo</code></code></pre><p>All parsers should appear as .<code>&#10003; installed</code></p><h2><strong>7. Summary</strong></h2><h3><strong>Compiled checklist</strong></h3><p>Components version state cmake 3.27.9</p><p>&#10003; Installedninja1.11.1</p><p>&#10003; InstalledRust1.94.1</p><p>&#10003; Installedtree-sitter CLI0.24.1</p><p>&#10003; Compiled Neovim0.12.0</p><p>&#10003; Compiled Astro Nvim latest</p><p>&#10003; Configured</p><h3><strong>Key points</strong></h3><ol><li><p><strong>glibc compatible</strong>: Compiling from source ensures that the current glibc is used</p></li><li><p><strong>Rust dependencies</strong>: tree-sitter CLI requires Rust compilation</p></li><li><p><strong>Full flow</strong>: Rely on &#8594; Rust &#8594; tree-sitter &#8594; Neovim &#8594; AstroNvim</p></li></ol><h3><strong>Performance</strong></h3><p>The compiled Neovim runs smoothly in the openEuler container:</p><ul><li><p>Startup speed: &lt; 100ms</p></li><li><p>LSP Response: Fast</p></li><li><p>Treesitter Highlight: Normal</p></li><li><p>Plugin ecosystem: Full support</p></li></ul><h3><strong>Guide to avoiding pits</strong></h3><ol><li><p><strong>Don&#8217;t use precompiled tree-sitter</strong>: mason downloaded precompiled versions of glibc are not compatible</p></li><li><p><strong>Remember to replace Mason&#8217;s tree-sitter</strong>: otherwise nvim-treesitter will still use the precompiled version</p></li><li><p><strong>Use stable version</strong>: avoid instability in the main branch</p></li></ol><h2><strong>8. Clean up the construction files</strong></h2><p>After the compilation is complete, you can clean up the source code:</p><pre><code><code># &#21487;&#36873;&#65306;&#20445;&#30041;&#28304;&#30721;&#29992;&#20110;&#21518;&#32493;&#21319;&#32423;
# &#25110;&#21024;&#38500;&#20197;&#33410;&#30465;&#31354;&#38388;
rm -rf ~/tree-sitter-cli
rm -rf ~/neovim</code></code></pre><p>It is recommended to keep the source code directory for future version upgrades.</p><h2><strong>9. Follow-up upgrades</strong></h2><p>Upgrading Neovim:</p><pre><code><code>cd ~/neovim
git fetch --tags
git checkout v0.13.0  # &#20551;&#35774;&#26032;&#29256;&#26412;
make CMAKE_BUILD_TYPE=Release
sudo make install</code></code></pre><p>Upgrade tree-sitter:</p><pre><code><code>cd ~/tree-sitter-cli
git fetch --tags
git checkout v0.25.0  # &#20551;&#35774;&#26032;&#29256;&#26412;
cargo build --release
sudo cp target/release/tree-sitter /usr/local/bin/</code></code></pre><div><hr></div><p><strong>References</strong>:</p><ul><li><p>Neovim official website:</p></li></ul><p>https://neovim.io</p><ul><li><p>tree-sitter project:</p></li></ul><p>https://tree-sitter.github.io</p><ul><li><p>AstroNvim documentation:</p></li></ul><p>https://astronvim.com</p><ul><li><p>AstroNvim repository: <a href="https://github.com/AstroNvim/AstroNvim">https://github.com/AstroNvim/AstroNvim</a></p></li></ul><p>Source: <a href="https://ystyle.top/2026/04/03/matebookpro-container-build-neovim/">&#27426;&#36814;&#22238;&#26469;&#9582;(&#9583;&#9661;&#9584;)&#9581;</a></p>]]></content:encoded></item><item><title><![CDATA[Cangjie language Neovim development environment configuration guide ]]></title><description><![CDATA[This document describes how to configure the Neovim (AstroNvim) development environment on the openEuler (aarch64) system for Cangjie language development.]]></description><link>https://www.harmony-developers.com/p/cangjie-language-neovim-development</link><guid isPermaLink="false">https://www.harmony-developers.com/p/cangjie-language-neovim-development</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Sat, 03 Oct 2026 18:03:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!A2cM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f0776d-4db6-4862-82cd-478d3922914e_1280x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!A2cM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f0776d-4db6-4862-82cd-478d3922914e_1280x720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A2cM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f0776d-4db6-4862-82cd-478d3922914e_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!A2cM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f0776d-4db6-4862-82cd-478d3922914e_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!A2cM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f0776d-4db6-4862-82cd-478d3922914e_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!A2cM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f0776d-4db6-4862-82cd-478d3922914e_1280x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!A2cM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f0776d-4db6-4862-82cd-478d3922914e_1280x720.jpeg" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a2f0776d-4db6-4862-82cd-478d3922914e_1280x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:183587,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/193208543?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f0776d-4db6-4862-82cd-478d3922914e_1280x720.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!A2cM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f0776d-4db6-4862-82cd-478d3922914e_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!A2cM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f0776d-4db6-4862-82cd-478d3922914e_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!A2cM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f0776d-4db6-4862-82cd-478d3922914e_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!A2cM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f0776d-4db6-4862-82cd-478d3922914e_1280x720.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div id="youtube2-cRwESP2IkBo" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;cRwESP2IkBo&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/cRwESP2IkBo?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>This document describes how to configure the Neovim (AstroNvim) development environment on the openEuler (aarch64) system for Cangjie language development.</p><h2><strong>Table of contents</strong></h2><ul><li><p><a href="https://ystyle.top/2026/04/03/cangjie-neovim-dev-setup/#%E7%B3%BB%E7%BB%9F%E8%A6%81%E6%B1%82">System requirements:</a></p></li><li><p><a href="https://ystyle.top/2026/04/03/cangjie-neovim-dev-setup/#%E5%AE%89%E8%A3%85%E4%BB%93%E9%A2%89-sdk">Install the Cangjie SDK</a></p></li><li><p><a href="https://ystyle.top/2026/04/03/cangjie-neovim-dev-setup/#%E5%AE%89%E8%A3%85-cangjie-stdx">&#23433;&#35013; Cangjie STDX</a></p></li><li><p><a href="https://ystyle.top/2026/04/03/cangjie-neovim-dev-setup/#%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E9%85%8D%E7%BD%AE">Environment variable configuration</a></p></li><li><p><a href="https://ystyle.top/2026/04/03/cangjie-neovim-dev-setup/#neovim-%E9%85%8D%E7%BD%AE">Neovim Configuration</a></p></li><li><p><a href="https://ystyle.top/2026/04/03/cangjie-neovim-dev-setup/#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98">FAQs</a></p></li></ul><h2><strong>System requirements:</strong></h2><ul><li><p>&#25805;&#20316;&#31995;&#32479;&#65306;openEuler 2403 SP1 (aarch64)</p></li><li><p>GCC version: 12.3.1 or higher</p></li><li><p>Neovim version: 0.9.0 or higher</p></li></ul><h2><strong>Install the Cangjie SDK</strong></h2><ol><li><p>Download Cangjie SDK (aarch64 version) from official channels</p></li><li><p>Extract to the directory<code>~/.config/cjvs/store/</code></p></li></ol><p>Example of a directory structure:</p><pre><code><code>~/.config/cjvs/
&#9492;&#9472;&#9472; store/
    &#9492;&#9472;&#9472; 1.1.0-beta.25/
        &#9500;&#9472;&#9472; envsetup.sh
        &#9500;&#9472;&#9472; lib/
        &#9500;&#9472;&#9472; runtime/
        &#9492;&#9472;&#9472; ...</code></code></pre><h2><strong>&#23433;&#35013; Cangjie STDX</strong></h2><p>STDX is Cangjie&#8217;s standard extension library and needs to be installed separately:</p><ol><li><p>&#20174;&#21457;&#24067;&#39029;&#38754;&#19979;&#36733;&#65306;<a href="https://gitcode.com/Cangjie/cangjie_stdx/releases/v1.1.0-beta.24.1">https://gitcode.com/Cangjie/cangjie_stdx/releases/v1.1.0-beta.24.1</a></p></li><li><p>Select Version<code>linux_aarch64_cjnative</code></p></li><li><p>Extract to the directory<code>~/.config/cjvs/stdx/</code></p></li></ol><p>Example of a directory structure:</p><pre><code><code>~/.config/cjvs/
&#9492;&#9472;&#9472; stdx/
    &#9492;&#9472;&#9472; 1.1.0-beta.24/
        &#9492;&#9472;&#9472; linux_aarch64_cjnative/
            &#9492;&#9472;&#9472; static/
                &#9492;&#9472;&#9472; stdx/
                    &#9500;&#9472;&#9472; stdx.cjo
                    &#9492;&#9472;&#9472; ...</code></code></pre><h2><strong>Environment variable configuration</strong></h2><p>Edit to add the following configuration:<code>~/.zshrc</code></p><pre><code><code># &#20179;&#39049; SDK &#29615;&#22659;&#37197;&#32622;
source $HOME/.config/cjvs/store/1.1.0-beta.25/envsetup.sh

# STDX &#36335;&#24452;&#37197;&#32622;
export CANGJIE_STDX_PATH=&#8221;$HOME/.config/cjvs/stdx/1.1.0-beta.24/linux_aarch64_cjnative/static/stdx&#8221;</code></code></pre><p>After configuration, execute:</p><pre><code><code>source ~/.zshrc</code></code></pre><p><strong>Note</strong>:</p><ul><li><p><code>envsetup.sh</code>: Sets the environment variables required by the Cangjie compiler</p></li><li><p><code>CANGJIE_STDX_PATH</code>: Specifies the path to the STDX library</p></li></ul><h3><strong>Create a gmotic link to the GCC runtime library</strong></h3><p>Since the Cangjie linker script searches the directory by default, you need to create a symlink:<code>/lib64</code></p><pre><code><code>sudo ln -sf /usr/lib/gcc/aarch64-openEuler-linux/12/crtbeginS.o /lib64/crtbeginS.o
sudo ln -sf /usr/lib/gcc/aarch64-openEuler-linux/12/crtendS.o /lib64/crtendS.o
sudo ln -sf /usr/lib/gcc/aarch64-openEuler-linux/12/crtbegin.o /lib64/crtbegin.o
sudo ln -sf /usr/lib/gcc/aarch64-openEuler-linux/12/crtend.o /lib64/crtend.o</code></code></pre><p><strong>Note</strong>: Addresses an issue where runtime libraries such as cannot be found when linking<code>crtbeginS.o</code></p><h2><strong>Neovim Configuration</strong></h2><h3><strong>1. Install AstroNvim</strong></h3><pre><code><code>git clone --depth 1 https://github.com/AstroNvim/AstroNvim ~/.config/nvim</code></code></pre><h3><strong>2. Configure the Cangjie LSP plug-in</strong></h3><p>Create File :<code>~/.config/nvim/lua/plugins/cangjie-lsp.lua</code></p><pre><code><code>return {
  &#8220;https://gitcode.com/ystyle/cangjie-nvim&#8221;,
  dependencies = { &#8220;neovim/nvim-lspconfig&#8221; },
  opts = { auto_install = true },
  config = function(plugin)
    require(&#8221;cangjie-nvim&#8221;).setup(plugin.opts)

    vim.api.nvim_create_autocmd(&#8221;LspAttach&#8221;, {
      callback = function(args)
        if vim.bo[args.buf].filetype ~= &#8220;Cangjie&#8221; then return end
        
        local function map(mode, lhs, rhs, desc)
          vim.keymap.set(mode, lhs, rhs, { buffer = args.buf, desc = desc })
        end

        map(&#8221;n&#8221;, &#8220;&lt;leader&gt;li&#8221;, &#8220;&lt;cmd&gt;LspInfo&lt;cr&gt;&#8221;, &#8220;LSP Info&#8221;)
        map(&#8221;n&#8221;, &#8220;K&#8221;, vim.lsp.buf.hover, &#8220;Hover Document&#8221;)
        map(&#8221;n&#8221;, &#8220;&lt;leader&gt;lf&#8221;, function() vim.lsp.buf.format { async = true } end, &#8220;Format Document&#8221;)
        map(&#8221;n&#8221;, &#8220;gl&#8221;, vim.diagnostic.open_float, &#8220;Line Diagnostics&#8221;)
        map(&#8221;n&#8221;, &#8220;&lt;leader&gt;ld&#8221;, vim.diagnostic.open_float, &#8220;Line Diagnostics&#8221;)
        map(&#8221;n&#8221;, &#8220;&lt;leader&gt;lD&#8221;, vim.diagnostic.setqflist, &#8220;All Diagnostics&#8221;)
        map(&#8221;n&#8221;, &#8220;gra&#8221;, vim.lsp.buf.code_action, &#8220;Code Actions&#8221;)
        map(&#8221;n&#8221;, &#8220;&lt;leader&gt;la&#8221;, vim.lsp.buf.code_action, &#8220;Code Actions&#8221;)
        map(&#8221;n&#8221;, &#8220;&lt;leader&gt;lh&#8221;, vim.lsp.buf.signature_help, &#8220;Signature Help&#8221;)
        map(&#8221;n&#8221;, &#8220;grn&#8221;, vim.lsp.buf.rename, &#8220;Rename&#8221;)
        map(&#8221;n&#8221;, &#8220;&lt;leader&gt;lr&#8221;, vim.lsp.buf.rename, &#8220;Rename&#8221;)
        map(&#8221;n&#8221;, &#8220;&lt;leader&gt;ls&#8221;, vim.lsp.buf.document_symbol, &#8220;Document Symbols&#8221;)
        map(&#8221;n&#8221;, &#8220;&lt;leader&gt;lG&#8221;, vim.lsp.buf.workspace_symbol, &#8220;Workspace Symbols&#8221;)
        map(&#8221;n&#8221;, &#8220;]d&#8221;, vim.diagnostic.goto_next, &#8220;Diagnostic Next&#8221;)
        map(&#8221;n&#8221;, &#8220;[d&#8221;, vim.diagnostic.goto_prev, &#8220;Diagnostics Previous&#8221;)
        map(&#8221;n&#8221;, &#8220;]e&#8221;, function() vim.diagnostic.goto_next { severity = vim.diagnostic.severity.ERROR } end, &#8220;Error Next&#8221;)
        map(&#8221;n&#8221;, &#8220;[e&#8221;, function() vim.diagnostic.goto_prev { severity = vim.diagnostic.severity.ERROR } end, &#8220;Error Previous&#8221;)
        map(&#8221;n&#8221;, &#8220;]w&#8221;, function() vim.diagnostic.goto_next { severity = vim.diagnostic.severity.WARN } end, &#8220;Warning Next&#8221;)
        map(&#8221;n&#8221;, &#8220;[w&#8221;, function() vim.diagnostic.goto_prev { severity = vim.diagnostic.severity.WARN } end, &#8220;Warning Previous&#8221;)
        map(&#8221;n&#8221;, &#8220;gD&#8221;, vim.lsp.buf.declaration, &#8220;Declaration&#8221;)
        map(&#8221;n&#8221;, &#8220;gy&#8221;, vim.lsp.buf.type_definition, &#8220;Type Definition&#8221;)
        map(&#8221;n&#8221;, &#8220;gd&#8221;, vim.lsp.buf.definition, &#8220;Definition&#8221;)
        map(&#8221;n&#8221;, &#8220;gri&#8221;, vim.lsp.buf.implementation, &#8220;Implementation&#8221;)
        map(&#8221;n&#8221;, &#8220;grr&#8221;, vim.lsp.buf.references, &#8220;References&#8221;)
      end,
    })
  end,
}</code></code></pre><h3><strong>3. Launch Neovim and install the plugin</strong></h3><pre><code><code>nvim</code></code></pre><p>AstroNvim automatically detects and installs plugins. When you first open the file, the plugin automatically downloads the LSP wrapper binary.<code>cangjie-nvim.cj</code></p><p><strong>LSP Wrapper Address</strong>:</p><ul><li><p>&#39033;&#30446;&#22320;&#22336;&#65306;<a href="https://gitcode.com/ystyle/cangjie-lsp-wrapper">https://gitcode.com/ystyle/cangjie-lsp-wrapper</a></p></li><li><p>Automatic download location:<code>~/.local/share/nvim/data/cangjie-nvim/bin/</code></p></li></ul><h2><strong>FAQs</strong></h2><h3><strong>1. &#38142;&#25509;&#38169;&#35823;&#65306;cannot find crtbeginS.o</strong></h3><p><strong>Error message</strong>:</p><pre><code><code>/usr/bin/ld: cannot find crtbeginS.o: No such file or directory</code></code></pre><p><strong>Solution</strong>:<br>Create a symbolic link to the GCC runtime library:</p><pre><code><code>sudo ln -sf /usr/lib/gcc/aarch64-openEuler-linux/12/crtbeginS.o /lib64/crtbeginS.o
sudo ln -sf /usr/lib/gcc/aarch64-openEuler-linux/12/crtendS.o /lib64/crtendS.o
sudo ln -sf /usr/lib/gcc/aarch64-openEuler-linux/12/crtbegin.o /lib64/crtbegin.o
sudo ln -sf /usr/lib/gcc/aarch64-openEuler-linux/12/crtend.o /lib64/crtend.o</code></code></pre><h3><strong>2. LSP does not work</strong></h3><p><strong>Check Steps</strong>:</p><ol><li><p>Verify that the Cangjie SDK environment variables are loaded:<code>echo $CANGJIE_HOME</code></p></li><li><p>Confirm that the LSP wrapper is downloaded:<code>ls ~/.local/share/nvim/data/cangjie-nvim/bin/</code></p></li><li><p>To install the LSP wrapper manually:</p></li></ol><ol><li><p></p></li></ol><pre><code><code>:lua require(&#8221;cangjie-nvim&#8221;).install()</code></code></pre><h3><strong>3. STDX not found</strong></h3><p><strong>Error message</strong>:</p><pre><code><code>error: cannot find stdx module</code></code></pre><p><strong>Solution</strong>:<br>Confirm that the environment variable points to the correct directory:<code>CANGJIE_STDX_PATH</code></p><pre><code><code>ls $CANGJIE_STDX_PATH
# &#24212;&#35813;&#33021;&#30475;&#21040; stdx.cjo &#25991;&#20214;</code></code></pre><h3><strong>4. Quick event context error</strong></h3><p><strong>Error message</strong>:</p><pre><code><code>E5560: nvim_create_namespace must not be called in a fast event context</code></code></pre><p><strong>Solution</strong>:<br>This issue has been fixed in the plugin, make sure you are using the latest version.<code>cangjie-nvim</code></p><h2><strong>Keybit mapping</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!d44k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5a939b-d02a-4ddd-97f9-8f41fd5eb552_899x650.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d44k!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5a939b-d02a-4ddd-97f9-8f41fd5eb552_899x650.png 424w, https://substackcdn.com/image/fetch/$s_!d44k!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5a939b-d02a-4ddd-97f9-8f41fd5eb552_899x650.png 848w, https://substackcdn.com/image/fetch/$s_!d44k!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5a939b-d02a-4ddd-97f9-8f41fd5eb552_899x650.png 1272w, https://substackcdn.com/image/fetch/$s_!d44k!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5a939b-d02a-4ddd-97f9-8f41fd5eb552_899x650.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!d44k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5a939b-d02a-4ddd-97f9-8f41fd5eb552_899x650.png" width="899" height="650" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f5a939b-d02a-4ddd-97f9-8f41fd5eb552_899x650.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:650,&quot;width&quot;:899,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:51819,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/193208543?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5a939b-d02a-4ddd-97f9-8f41fd5eb552_899x650.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!d44k!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5a939b-d02a-4ddd-97f9-8f41fd5eb552_899x650.png 424w, https://substackcdn.com/image/fetch/$s_!d44k!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5a939b-d02a-4ddd-97f9-8f41fd5eb552_899x650.png 848w, https://substackcdn.com/image/fetch/$s_!d44k!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5a939b-d02a-4ddd-97f9-8f41fd5eb552_899x650.png 1272w, https://substackcdn.com/image/fetch/$s_!d44k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5a939b-d02a-4ddd-97f9-8f41fd5eb552_899x650.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Source: <a href="https://ystyle.top/2026/04/03/cangjie-neovim-dev-setup/">&#27426;&#36814;&#22238;&#26469;&#9582;(&#9583;&#9661;&#9584;)&#9581;</a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Installing Node-RED on HarmonyOS PC (openEuler terminal) ]]></title><description><![CDATA[HarmonyOS PC system openEuler terminal on HiShell with Fusion/Converged Development Engine is installed with node-red]]></description><link>https://www.harmony-developers.com/p/installing-node-red-on-harmonyos</link><guid isPermaLink="false">https://www.harmony-developers.com/p/installing-node-red-on-harmonyos</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Sat, 03 Oct 2026 18:01:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dujz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55d66c4-f8b6-4338-a085-1956bdd7f0f7_1884x1060.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dujz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55d66c4-f8b6-4338-a085-1956bdd7f0f7_1884x1060.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dujz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55d66c4-f8b6-4338-a085-1956bdd7f0f7_1884x1060.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dujz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55d66c4-f8b6-4338-a085-1956bdd7f0f7_1884x1060.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dujz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55d66c4-f8b6-4338-a085-1956bdd7f0f7_1884x1060.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dujz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55d66c4-f8b6-4338-a085-1956bdd7f0f7_1884x1060.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dujz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55d66c4-f8b6-4338-a085-1956bdd7f0f7_1884x1060.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d55d66c4-f8b6-4338-a085-1956bdd7f0f7_1884x1060.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:149777,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/193384086?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55d66c4-f8b6-4338-a085-1956bdd7f0f7_1884x1060.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dujz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55d66c4-f8b6-4338-a085-1956bdd7f0f7_1884x1060.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dujz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55d66c4-f8b6-4338-a085-1956bdd7f0f7_1884x1060.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dujz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55d66c4-f8b6-4338-a085-1956bdd7f0f7_1884x1060.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dujz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd55d66c4-f8b6-4338-a085-1956bdd7f0f7_1884x1060.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><div id="youtube2-xUgbBv2DfkU" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;xUgbBv2DfkU&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/xUgbBv2DfkU?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1><strong>I. Basic Environment Setup</strong></h1><h2><strong>1. nodejs</strong></h2><p>Note: Some versions of the latest Node.js may have issues; we recommend using version 20, which is included in the repository, when running Node-RED.</p><pre><code><code>sudo dnf update -y
sudo dnf install nodejs -y
node -v</code></code></pre><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8Ojb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8348c3-629f-4163-925f-cd69c5cb1b03_470x84.png 424w, https://substackcdn.com/image/fetch/$s_!8Ojb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8348c3-629f-4163-925f-cd69c5cb1b03_470x84.png 848w, https://substackcdn.com/image/fetch/$s_!8Ojb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8348c3-629f-4163-925f-cd69c5cb1b03_470x84.png 1272w, https://substackcdn.com/image/fetch/$s_!8Ojb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8348c3-629f-4163-925f-cd69c5cb1b03_470x84.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8Ojb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8348c3-629f-4163-925f-cd69c5cb1b03_470x84.png" width="470" height="84" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc8348c3-629f-4163-925f-cd69c5cb1b03_470x84.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:84,&quot;width&quot;:470,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!8Ojb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8348c3-629f-4163-925f-cd69c5cb1b03_470x84.png 424w, https://substackcdn.com/image/fetch/$s_!8Ojb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8348c3-629f-4163-925f-cd69c5cb1b03_470x84.png 848w, https://substackcdn.com/image/fetch/$s_!8Ojb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8348c3-629f-4163-925f-cd69c5cb1b03_470x84.png 1272w, https://substackcdn.com/image/fetch/$s_!8Ojb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8348c3-629f-4163-925f-cd69c5cb1b03_470x84.png 1456w" sizes="100vw"></picture><div></div></div></div></figure></div><h2><strong>2. Development Tools</strong></h2><pre><code><code>sudo dnf groupinstall "Development Tools" -y
sudo dnf install cmake -y</code></code></pre><h1><strong>2. Installing Node-RED</strong></h1><h2><strong>1. Installation</strong></h2><pre><code><code>sudo npm install -g --unsafe-perm node-red --registry=https://registry.npmmirror.com</code></code></pre><p>Once the installation is complete, type `node-red` to start it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!o5Fd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabe4ad2-d828-4b48-91bc-0a6a4fd62655_1356x1372.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!o5Fd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabe4ad2-d828-4b48-91bc-0a6a4fd62655_1356x1372.png 424w, https://substackcdn.com/image/fetch/$s_!o5Fd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabe4ad2-d828-4b48-91bc-0a6a4fd62655_1356x1372.png 848w, https://substackcdn.com/image/fetch/$s_!o5Fd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabe4ad2-d828-4b48-91bc-0a6a4fd62655_1356x1372.png 1272w, https://substackcdn.com/image/fetch/$s_!o5Fd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabe4ad2-d828-4b48-91bc-0a6a4fd62655_1356x1372.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!o5Fd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabe4ad2-d828-4b48-91bc-0a6a4fd62655_1356x1372.png" width="1356" height="1372" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/babe4ad2-d828-4b48-91bc-0a6a4fd62655_1356x1372.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1372,&quot;width&quot;:1356,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!o5Fd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabe4ad2-d828-4b48-91bc-0a6a4fd62655_1356x1372.png 424w, https://substackcdn.com/image/fetch/$s_!o5Fd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabe4ad2-d828-4b48-91bc-0a6a4fd62655_1356x1372.png 848w, https://substackcdn.com/image/fetch/$s_!o5Fd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabe4ad2-d828-4b48-91bc-0a6a4fd62655_1356x1372.png 1272w, https://substackcdn.com/image/fetch/$s_!o5Fd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbabe4ad2-d828-4b48-91bc-0a6a4fd62655_1356x1372.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Then open http://172.16.100.2:1880 in your browser. A pop-up window will appear by default to notify you of updates; choose whether to enable notifications based on your preferences.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PL0O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d0e940-4504-40e3-8216-4f765313a2e7_3108x1710.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PL0O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d0e940-4504-40e3-8216-4f765313a2e7_3108x1710.png 424w, https://substackcdn.com/image/fetch/$s_!PL0O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d0e940-4504-40e3-8216-4f765313a2e7_3108x1710.png 848w, https://substackcdn.com/image/fetch/$s_!PL0O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d0e940-4504-40e3-8216-4f765313a2e7_3108x1710.png 1272w, https://substackcdn.com/image/fetch/$s_!PL0O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d0e940-4504-40e3-8216-4f765313a2e7_3108x1710.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!PL0O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d0e940-4504-40e3-8216-4f765313a2e7_3108x1710.png" width="1456" height="801" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3d0e940-4504-40e3-8216-4f765313a2e7_3108x1710.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:801,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!PL0O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d0e940-4504-40e3-8216-4f765313a2e7_3108x1710.png 424w, https://substackcdn.com/image/fetch/$s_!PL0O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d0e940-4504-40e3-8216-4f765313a2e7_3108x1710.png 848w, https://substackcdn.com/image/fetch/$s_!PL0O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d0e940-4504-40e3-8216-4f765313a2e7_3108x1710.png 1272w, https://substackcdn.com/image/fetch/$s_!PL0O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d0e940-4504-40e3-8216-4f765313a2e7_3108x1710.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>1. Node.js</strong></h2><p>Note: Some versions of the latest Node.js may have issues; we recommend using version 20, which is included in the repository, when running Node-RED.</p><pre><code><code>sudo dnf update -y
sudo dnf install nodejs -y
node -v</code></code></pre><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MShL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf093962-78a2-4b31-8429-18364f0a0e7d_470x84.png 424w, https://substackcdn.com/image/fetch/$s_!MShL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf093962-78a2-4b31-8429-18364f0a0e7d_470x84.png 848w, https://substackcdn.com/image/fetch/$s_!MShL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf093962-78a2-4b31-8429-18364f0a0e7d_470x84.png 1272w, https://substackcdn.com/image/fetch/$s_!MShL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf093962-78a2-4b31-8429-18364f0a0e7d_470x84.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!MShL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf093962-78a2-4b31-8429-18364f0a0e7d_470x84.png" width="470" height="84" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf093962-78a2-4b31-8429-18364f0a0e7d_470x84.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:84,&quot;width&quot;:470,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!MShL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf093962-78a2-4b31-8429-18364f0a0e7d_470x84.png 424w, https://substackcdn.com/image/fetch/$s_!MShL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf093962-78a2-4b31-8429-18364f0a0e7d_470x84.png 848w, https://substackcdn.com/image/fetch/$s_!MShL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf093962-78a2-4b31-8429-18364f0a0e7d_470x84.png 1272w, https://substackcdn.com/image/fetch/$s_!MShL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf093962-78a2-4b31-8429-18364f0a0e7d_470x84.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><h2><strong>2. Development Tools</strong></h2><pre><code><code>sudo dnf groupinstall "Development Tools" -y
sudo dnf install cmake -y</code></code></pre><h1><strong>2. Installing Node-RED</strong></h1><h2><strong>1. Installation</strong></h2><pre><code><code>sudo npm install -g --unsafe-perm node-red --registry=https://registry.npmmirror.com</code></code></pre><p>Once the installation is complete, type `node-red` to start it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!t4_f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbc8614-7955-407c-8807-1c96fc32e26b_1356x1372.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!t4_f!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbc8614-7955-407c-8807-1c96fc32e26b_1356x1372.png 424w, https://substackcdn.com/image/fetch/$s_!t4_f!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbc8614-7955-407c-8807-1c96fc32e26b_1356x1372.png 848w, https://substackcdn.com/image/fetch/$s_!t4_f!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbc8614-7955-407c-8807-1c96fc32e26b_1356x1372.png 1272w, https://substackcdn.com/image/fetch/$s_!t4_f!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbc8614-7955-407c-8807-1c96fc32e26b_1356x1372.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!t4_f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbc8614-7955-407c-8807-1c96fc32e26b_1356x1372.png" width="1356" height="1372" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/adbc8614-7955-407c-8807-1c96fc32e26b_1356x1372.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1372,&quot;width&quot;:1356,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!t4_f!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbc8614-7955-407c-8807-1c96fc32e26b_1356x1372.png 424w, https://substackcdn.com/image/fetch/$s_!t4_f!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbc8614-7955-407c-8807-1c96fc32e26b_1356x1372.png 848w, https://substackcdn.com/image/fetch/$s_!t4_f!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbc8614-7955-407c-8807-1c96fc32e26b_1356x1372.png 1272w, https://substackcdn.com/image/fetch/$s_!t4_f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbc8614-7955-407c-8807-1c96fc32e26b_1356x1372.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Then open http://172.16.100.2:1880 in your browser. A pop-up window will appear by default to notify you of updates; choose whether to enable notifications based on your preferences.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YvrH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49761b81-13fa-499e-8861-74e7891a849d_3108x1710.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YvrH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49761b81-13fa-499e-8861-74e7891a849d_3108x1710.png 424w, https://substackcdn.com/image/fetch/$s_!YvrH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49761b81-13fa-499e-8861-74e7891a849d_3108x1710.png 848w, https://substackcdn.com/image/fetch/$s_!YvrH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49761b81-13fa-499e-8861-74e7891a849d_3108x1710.png 1272w, https://substackcdn.com/image/fetch/$s_!YvrH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49761b81-13fa-499e-8861-74e7891a849d_3108x1710.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!YvrH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49761b81-13fa-499e-8861-74e7891a849d_3108x1710.png" width="1456" height="801" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49761b81-13fa-499e-8861-74e7891a849d_3108x1710.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:801,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!YvrH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49761b81-13fa-499e-8861-74e7891a849d_3108x1710.png 424w, https://substackcdn.com/image/fetch/$s_!YvrH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49761b81-13fa-499e-8861-74e7891a849d_3108x1710.png 848w, https://substackcdn.com/image/fetch/$s_!YvrH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49761b81-13fa-499e-8861-74e7891a849d_3108x1710.png 1272w, https://substackcdn.com/image/fetch/$s_!YvrH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49761b81-13fa-499e-8861-74e7891a849d_3108x1710.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>2. Enable HTTPS</strong></h2><p>Enable HTTPS so that certain components, such as those related to the microphone and camera, can function properly.</p><pre><code><code>cd /home/user/.node-red
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout private.key -out certificate.crt</code></code></pre><p>Fill in the country, province, city, and company according to your actual information, or you can just enter any values.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kHgI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8255b-1db6-434a-9b4b-5009d06d958a_2064x1028.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kHgI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8255b-1db6-434a-9b4b-5009d06d958a_2064x1028.png 424w, https://substackcdn.com/image/fetch/$s_!kHgI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8255b-1db6-434a-9b4b-5009d06d958a_2064x1028.png 848w, https://substackcdn.com/image/fetch/$s_!kHgI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8255b-1db6-434a-9b4b-5009d06d958a_2064x1028.png 1272w, https://substackcdn.com/image/fetch/$s_!kHgI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8255b-1db6-434a-9b4b-5009d06d958a_2064x1028.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!kHgI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8255b-1db6-434a-9b4b-5009d06d958a_2064x1028.png" width="1456" height="725" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/48f8255b-1db6-434a-9b4b-5009d06d958a_2064x1028.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:725,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!kHgI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8255b-1db6-434a-9b4b-5009d06d958a_2064x1028.png 424w, https://substackcdn.com/image/fetch/$s_!kHgI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8255b-1db6-434a-9b4b-5009d06d958a_2064x1028.png 848w, https://substackcdn.com/image/fetch/$s_!kHgI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8255b-1db6-434a-9b4b-5009d06d958a_2064x1028.png 1272w, https://substackcdn.com/image/fetch/$s_!kHgI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f8255b-1db6-434a-9b4b-5009d06d958a_2064x1028.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><pre><code><code>vi /home/user/.node-red/settings.js</code></code></pre><p>Comment out or delete the following content, then modify the paths for the key and certificate.</p><p>key&#65306;<code>/home/user/.node-red/private.key</code></p><p>cert&#65306;<code>/home/user/.node-red/certificate.crt</code></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wLTj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9c9634-d1f3-4b32-9705-916d30281c7e_2058x682.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wLTj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9c9634-d1f3-4b32-9705-916d30281c7e_2058x682.png 424w, https://substackcdn.com/image/fetch/$s_!wLTj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9c9634-d1f3-4b32-9705-916d30281c7e_2058x682.png 848w, https://substackcdn.com/image/fetch/$s_!wLTj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9c9634-d1f3-4b32-9705-916d30281c7e_2058x682.png 1272w, https://substackcdn.com/image/fetch/$s_!wLTj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9c9634-d1f3-4b32-9705-916d30281c7e_2058x682.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!wLTj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9c9634-d1f3-4b32-9705-916d30281c7e_2058x682.png" width="1456" height="483" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b9c9634-d1f3-4b32-9705-916d30281c7e_2058x682.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:483,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!wLTj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9c9634-d1f3-4b32-9705-916d30281c7e_2058x682.png 424w, https://substackcdn.com/image/fetch/$s_!wLTj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9c9634-d1f3-4b32-9705-916d30281c7e_2058x682.png 848w, https://substackcdn.com/image/fetch/$s_!wLTj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9c9634-d1f3-4b32-9705-916d30281c7e_2058x682.png 1272w, https://substackcdn.com/image/fetch/$s_!wLTj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b9c9634-d1f3-4b32-9705-916d30281c7e_2058x682.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#25509;&#30528;&#25191;&#34892;<code>vi ~/.bashrc</code>&#25171;&#24320;bashrc&#65292;&#22312;&#26368;&#21518;&#19968;&#34892;&#28155;&#21152;&#22914;&#19979;&#20869;&#23481;&#65292;&#24573;&#30053;&#35777;&#20070;&#35686;&#21578;&#12290;&#26368;&#21518;&#25191;&#34892;<code>source ~/.bashrc</code></p><pre><code><code>export NODE_TLS_REJECT_UNAUTHORIZED=0</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!X1FA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d7fc099-9983-4b42-a032-08e3bd91285f_2066x1010.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X1FA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d7fc099-9983-4b42-a032-08e3bd91285f_2066x1010.png 424w, https://substackcdn.com/image/fetch/$s_!X1FA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d7fc099-9983-4b42-a032-08e3bd91285f_2066x1010.png 848w, https://substackcdn.com/image/fetch/$s_!X1FA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d7fc099-9983-4b42-a032-08e3bd91285f_2066x1010.png 1272w, https://substackcdn.com/image/fetch/$s_!X1FA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d7fc099-9983-4b42-a032-08e3bd91285f_2066x1010.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!X1FA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d7fc099-9983-4b42-a032-08e3bd91285f_2066x1010.png" width="1456" height="712" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d7fc099-9983-4b42-a032-08e3bd91285f_2066x1010.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:712,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!X1FA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d7fc099-9983-4b42-a032-08e3bd91285f_2066x1010.png 424w, https://substackcdn.com/image/fetch/$s_!X1FA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d7fc099-9983-4b42-a032-08e3bd91285f_2066x1010.png 848w, https://substackcdn.com/image/fetch/$s_!X1FA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d7fc099-9983-4b42-a032-08e3bd91285f_2066x1010.png 1272w, https://substackcdn.com/image/fetch/$s_!X1FA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d7fc099-9983-4b42-a032-08e3bd91285f_2066x1010.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Restart Node-RED, then visit https://172.16.100.2:1880/. If you see a warning about an insecure certificate, just ignore it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q7qL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb092637c-75c7-455e-adf2-ed00dc3b853f_752x386.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q7qL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb092637c-75c7-455e-adf2-ed00dc3b853f_752x386.png 424w, https://substackcdn.com/image/fetch/$s_!q7qL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb092637c-75c7-455e-adf2-ed00dc3b853f_752x386.png 848w, https://substackcdn.com/image/fetch/$s_!q7qL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb092637c-75c7-455e-adf2-ed00dc3b853f_752x386.png 1272w, https://substackcdn.com/image/fetch/$s_!q7qL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb092637c-75c7-455e-adf2-ed00dc3b853f_752x386.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!q7qL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb092637c-75c7-455e-adf2-ed00dc3b853f_752x386.png" width="752" height="386" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b092637c-75c7-455e-adf2-ed00dc3b853f_752x386.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:386,&quot;width&quot;:752,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!q7qL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb092637c-75c7-455e-adf2-ed00dc3b853f_752x386.png 424w, https://substackcdn.com/image/fetch/$s_!q7qL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb092637c-75c7-455e-adf2-ed00dc3b853f_752x386.png 848w, https://substackcdn.com/image/fetch/$s_!q7qL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb092637c-75c7-455e-adf2-ed00dc3b853f_752x386.png 1272w, https://substackcdn.com/image/fetch/$s_!q7qL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb092637c-75c7-455e-adf2-ed00dc3b853f_752x386.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1><strong>III. Installation Nodes</strong></h1><h2><strong>1. Installation Instructions</strong></h2><p>Here, I&#8217;ll use the base64 module as an example for the installation</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JG6B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0424f865-990b-4254-87e9-7dff6e8a5ae2_1214x1260.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JG6B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0424f865-990b-4254-87e9-7dff6e8a5ae2_1214x1260.png 424w, https://substackcdn.com/image/fetch/$s_!JG6B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0424f865-990b-4254-87e9-7dff6e8a5ae2_1214x1260.png 848w, https://substackcdn.com/image/fetch/$s_!JG6B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0424f865-990b-4254-87e9-7dff6e8a5ae2_1214x1260.png 1272w, https://substackcdn.com/image/fetch/$s_!JG6B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0424f865-990b-4254-87e9-7dff6e8a5ae2_1214x1260.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!JG6B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0424f865-990b-4254-87e9-7dff6e8a5ae2_1214x1260.png" width="1214" height="1260" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0424f865-990b-4254-87e9-7dff6e8a5ae2_1214x1260.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1260,&quot;width&quot;:1214,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!JG6B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0424f865-990b-4254-87e9-7dff6e8a5ae2_1214x1260.png 424w, https://substackcdn.com/image/fetch/$s_!JG6B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0424f865-990b-4254-87e9-7dff6e8a5ae2_1214x1260.png 848w, https://substackcdn.com/image/fetch/$s_!JG6B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0424f865-990b-4254-87e9-7dff6e8a5ae2_1214x1260.png 1272w, https://substackcdn.com/image/fetch/$s_!JG6B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0424f865-990b-4254-87e9-7dff6e8a5ae2_1214x1260.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SLvD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab275bc-11df-4be5-805e-5b5842acb255_1804x1368.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SLvD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab275bc-11df-4be5-805e-5b5842acb255_1804x1368.png 424w, https://substackcdn.com/image/fetch/$s_!SLvD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab275bc-11df-4be5-805e-5b5842acb255_1804x1368.png 848w, https://substackcdn.com/image/fetch/$s_!SLvD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab275bc-11df-4be5-805e-5b5842acb255_1804x1368.png 1272w, https://substackcdn.com/image/fetch/$s_!SLvD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab275bc-11df-4be5-805e-5b5842acb255_1804x1368.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!SLvD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab275bc-11df-4be5-805e-5b5842acb255_1804x1368.png" width="1456" height="1104" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ab275bc-11df-4be5-805e-5b5842acb255_1804x1368.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1104,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!SLvD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab275bc-11df-4be5-805e-5b5842acb255_1804x1368.png 424w, https://substackcdn.com/image/fetch/$s_!SLvD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab275bc-11df-4be5-805e-5b5842acb255_1804x1368.png 848w, https://substackcdn.com/image/fetch/$s_!SLvD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab275bc-11df-4be5-805e-5b5842acb255_1804x1368.png 1272w, https://substackcdn.com/image/fetch/$s_!SLvD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab275bc-11df-4be5-805e-5b5842acb255_1804x1368.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>2. Common Nodes</strong></h2><p>node-red-dashboard</p><p>Dashboard UI Collection</p><p>You can install both the old and new versions. The one marked as &#8220;deprecated&#8221; is the old version.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zJFE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F264a8ddf-9608-4bc0-b739-f79bce2d09fb_1060x188.png 424w, https://substackcdn.com/image/fetch/$s_!zJFE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F264a8ddf-9608-4bc0-b739-f79bce2d09fb_1060x188.png 848w, https://substackcdn.com/image/fetch/$s_!zJFE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F264a8ddf-9608-4bc0-b739-f79bce2d09fb_1060x188.png 1272w, https://substackcdn.com/image/fetch/$s_!zJFE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F264a8ddf-9608-4bc0-b739-f79bce2d09fb_1060x188.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!zJFE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F264a8ddf-9608-4bc0-b739-f79bce2d09fb_1060x188.png" width="1060" height="188" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/264a8ddf-9608-4bc0-b739-f79bce2d09fb_1060x188.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:188,&quot;width&quot;:1060,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!zJFE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F264a8ddf-9608-4bc0-b739-f79bce2d09fb_1060x188.png 424w, https://substackcdn.com/image/fetch/$s_!zJFE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F264a8ddf-9608-4bc0-b739-f79bce2d09fb_1060x188.png 848w, https://substackcdn.com/image/fetch/$s_!zJFE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F264a8ddf-9608-4bc0-b739-f79bce2d09fb_1060x188.png 1272w, https://substackcdn.com/image/fetch/$s_!zJFE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F264a8ddf-9608-4bc0-b739-f79bce2d09fb_1060x188.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r-4l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b179ec-0e2a-49ad-b4b7-c5aa8db808df_1054x162.png 424w, https://substackcdn.com/image/fetch/$s_!r-4l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b179ec-0e2a-49ad-b4b7-c5aa8db808df_1054x162.png 848w, https://substackcdn.com/image/fetch/$s_!r-4l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b179ec-0e2a-49ad-b4b7-c5aa8db808df_1054x162.png 1272w, https://substackcdn.com/image/fetch/$s_!r-4l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b179ec-0e2a-49ad-b4b7-c5aa8db808df_1054x162.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!r-4l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b179ec-0e2a-49ad-b4b7-c5aa8db808df_1054x162.png" width="1054" height="162" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46b179ec-0e2a-49ad-b4b7-c5aa8db808df_1054x162.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:162,&quot;width&quot;:1054,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!r-4l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b179ec-0e2a-49ad-b4b7-c5aa8db808df_1054x162.png 424w, https://substackcdn.com/image/fetch/$s_!r-4l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b179ec-0e2a-49ad-b4b7-c5aa8db808df_1054x162.png 848w, https://substackcdn.com/image/fetch/$s_!r-4l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b179ec-0e2a-49ad-b4b7-c5aa8db808df_1054x162.png 1272w, https://substackcdn.com/image/fetch/$s_!r-4l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46b179ec-0e2a-49ad-b4b7-c5aa8db808df_1054x162.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>node-red-node-serialport</p><p>Serial port node (USB mapping has not yet been implemented in the virtual machine, so it cannot be used at this time)</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kv6E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78d8219-12aa-4dc9-a740-9e44ef97a080_1070x158.png 424w, https://substackcdn.com/image/fetch/$s_!kv6E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78d8219-12aa-4dc9-a740-9e44ef97a080_1070x158.png 848w, https://substackcdn.com/image/fetch/$s_!kv6E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78d8219-12aa-4dc9-a740-9e44ef97a080_1070x158.png 1272w, https://substackcdn.com/image/fetch/$s_!kv6E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78d8219-12aa-4dc9-a740-9e44ef97a080_1070x158.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!kv6E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78d8219-12aa-4dc9-a740-9e44ef97a080_1070x158.png" width="1070" height="158" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d78d8219-12aa-4dc9-a740-9e44ef97a080_1070x158.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:158,&quot;width&quot;:1070,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!kv6E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78d8219-12aa-4dc9-a740-9e44ef97a080_1070x158.png 424w, https://substackcdn.com/image/fetch/$s_!kv6E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78d8219-12aa-4dc9-a740-9e44ef97a080_1070x158.png 848w, https://substackcdn.com/image/fetch/$s_!kv6E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78d8219-12aa-4dc9-a740-9e44ef97a080_1070x158.png 1272w, https://substackcdn.com/image/fetch/$s_!kv6E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd78d8219-12aa-4dc9-a740-9e44ef97a080_1070x158.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>node-red-node-ui-table</p><p>Table node</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LWav!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4719d2c6-93cf-4c54-bbbe-9d5f8f2f32c7_1070x144.png 424w, https://substackcdn.com/image/fetch/$s_!LWav!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4719d2c6-93cf-4c54-bbbe-9d5f8f2f32c7_1070x144.png 848w, https://substackcdn.com/image/fetch/$s_!LWav!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4719d2c6-93cf-4c54-bbbe-9d5f8f2f32c7_1070x144.png 1272w, https://substackcdn.com/image/fetch/$s_!LWav!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4719d2c6-93cf-4c54-bbbe-9d5f8f2f32c7_1070x144.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!LWav!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4719d2c6-93cf-4c54-bbbe-9d5f8f2f32c7_1070x144.png" width="1070" height="144" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4719d2c6-93cf-4c54-bbbe-9d5f8f2f32c7_1070x144.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:144,&quot;width&quot;:1070,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!LWav!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4719d2c6-93cf-4c54-bbbe-9d5f8f2f32c7_1070x144.png 424w, https://substackcdn.com/image/fetch/$s_!LWav!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4719d2c6-93cf-4c54-bbbe-9d5f8f2f32c7_1070x144.png 848w, https://substackcdn.com/image/fetch/$s_!LWav!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4719d2c6-93cf-4c54-bbbe-9d5f8f2f32c7_1070x144.png 1272w, https://substackcdn.com/image/fetch/$s_!LWav!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4719d2c6-93cf-4c54-bbbe-9d5f8f2f32c7_1070x144.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>node-red-node-base64</p><p>Encoding and decoding data in Base64 format</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LfWx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9144736-00ae-4a0e-8cba-4b9acd87e8e3_1068x140.png 424w, https://substackcdn.com/image/fetch/$s_!LfWx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9144736-00ae-4a0e-8cba-4b9acd87e8e3_1068x140.png 848w, https://substackcdn.com/image/fetch/$s_!LfWx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9144736-00ae-4a0e-8cba-4b9acd87e8e3_1068x140.png 1272w, https://substackcdn.com/image/fetch/$s_!LfWx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9144736-00ae-4a0e-8cba-4b9acd87e8e3_1068x140.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!LfWx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9144736-00ae-4a0e-8cba-4b9acd87e8e3_1068x140.png" width="1068" height="140" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c9144736-00ae-4a0e-8cba-4b9acd87e8e3_1068x140.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:140,&quot;width&quot;:1068,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!LfWx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9144736-00ae-4a0e-8cba-4b9acd87e8e3_1068x140.png 424w, https://substackcdn.com/image/fetch/$s_!LfWx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9144736-00ae-4a0e-8cba-4b9acd87e8e3_1068x140.png 848w, https://substackcdn.com/image/fetch/$s_!LfWx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9144736-00ae-4a0e-8cba-4b9acd87e8e3_1068x140.png 1272w, https://substackcdn.com/image/fetch/$s_!LfWx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9144736-00ae-4a0e-8cba-4b9acd87e8e3_1068x140.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>node-red-node-random</p><p>Generate random numbers within a specified range</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2CKn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba10306e-2d7a-489b-9bc1-fd29dcda8f26_1064x142.png 424w, https://substackcdn.com/image/fetch/$s_!2CKn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba10306e-2d7a-489b-9bc1-fd29dcda8f26_1064x142.png 848w, https://substackcdn.com/image/fetch/$s_!2CKn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba10306e-2d7a-489b-9bc1-fd29dcda8f26_1064x142.png 1272w, https://substackcdn.com/image/fetch/$s_!2CKn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba10306e-2d7a-489b-9bc1-fd29dcda8f26_1064x142.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!2CKn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba10306e-2d7a-489b-9bc1-fd29dcda8f26_1064x142.png" width="1064" height="142" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba10306e-2d7a-489b-9bc1-fd29dcda8f26_1064x142.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:142,&quot;width&quot;:1064,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!2CKn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba10306e-2d7a-489b-9bc1-fd29dcda8f26_1064x142.png 424w, https://substackcdn.com/image/fetch/$s_!2CKn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba10306e-2d7a-489b-9bc1-fd29dcda8f26_1064x142.png 848w, https://substackcdn.com/image/fetch/$s_!2CKn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba10306e-2d7a-489b-9bc1-fd29dcda8f26_1064x142.png 1272w, https://substackcdn.com/image/fetch/$s_!2CKn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba10306e-2d7a-489b-9bc1-fd29dcda8f26_1064x142.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>node-red-node-ui-webcam</p><p>Access the camera and capture an image from the dashboard</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xF7T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bc939f8-6f87-4eaa-9b72-36b67ebf8c95_1060x134.png 424w, https://substackcdn.com/image/fetch/$s_!xF7T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bc939f8-6f87-4eaa-9b72-36b67ebf8c95_1060x134.png 848w, https://substackcdn.com/image/fetch/$s_!xF7T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bc939f8-6f87-4eaa-9b72-36b67ebf8c95_1060x134.png 1272w, https://substackcdn.com/image/fetch/$s_!xF7T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bc939f8-6f87-4eaa-9b72-36b67ebf8c95_1060x134.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!xF7T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bc939f8-6f87-4eaa-9b72-36b67ebf8c95_1060x134.png" width="1060" height="134" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6bc939f8-6f87-4eaa-9b72-36b67ebf8c95_1060x134.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:134,&quot;width&quot;:1060,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!xF7T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bc939f8-6f87-4eaa-9b72-36b67ebf8c95_1060x134.png 424w, https://substackcdn.com/image/fetch/$s_!xF7T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bc939f8-6f87-4eaa-9b72-36b67ebf8c95_1060x134.png 848w, https://substackcdn.com/image/fetch/$s_!xF7T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bc939f8-6f87-4eaa-9b72-36b67ebf8c95_1060x134.png 1272w, https://substackcdn.com/image/fetch/$s_!xF7T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bc939f8-6f87-4eaa-9b72-36b67ebf8c95_1060x134.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>node-red-node-ui-lineargauge</p><p>Create a linear gauge to visualize a range of values</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v7S7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb412a71c-c9e0-4252-88a8-93e14d98388f_1066x140.png 424w, https://substackcdn.com/image/fetch/$s_!v7S7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb412a71c-c9e0-4252-88a8-93e14d98388f_1066x140.png 848w, https://substackcdn.com/image/fetch/$s_!v7S7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb412a71c-c9e0-4252-88a8-93e14d98388f_1066x140.png 1272w, https://substackcdn.com/image/fetch/$s_!v7S7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb412a71c-c9e0-4252-88a8-93e14d98388f_1066x140.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!v7S7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb412a71c-c9e0-4252-88a8-93e14d98388f_1066x140.png" width="1066" height="140" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b412a71c-c9e0-4252-88a8-93e14d98388f_1066x140.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:140,&quot;width&quot;:1066,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!v7S7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb412a71c-c9e0-4252-88a8-93e14d98388f_1066x140.png 424w, https://substackcdn.com/image/fetch/$s_!v7S7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb412a71c-c9e0-4252-88a8-93e14d98388f_1066x140.png 848w, https://substackcdn.com/image/fetch/$s_!v7S7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb412a71c-c9e0-4252-88a8-93e14d98388f_1066x140.png 1272w, https://substackcdn.com/image/fetch/$s_!v7S7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb412a71c-c9e0-4252-88a8-93e14d98388f_1066x140.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>node-red-contrib-ui-led</p><p>Display LED status indicators on the dashboard</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PlcI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b309041-8f9f-4df7-be95-0fdc7312a75f_1068x140.png 424w, https://substackcdn.com/image/fetch/$s_!PlcI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b309041-8f9f-4df7-be95-0fdc7312a75f_1068x140.png 848w, https://substackcdn.com/image/fetch/$s_!PlcI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b309041-8f9f-4df7-be95-0fdc7312a75f_1068x140.png 1272w, https://substackcdn.com/image/fetch/$s_!PlcI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b309041-8f9f-4df7-be95-0fdc7312a75f_1068x140.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!PlcI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b309041-8f9f-4df7-be95-0fdc7312a75f_1068x140.png" width="1068" height="140" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b309041-8f9f-4df7-be95-0fdc7312a75f_1068x140.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:140,&quot;width&quot;:1068,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!PlcI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b309041-8f9f-4df7-be95-0fdc7312a75f_1068x140.png 424w, https://substackcdn.com/image/fetch/$s_!PlcI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b309041-8f9f-4df7-be95-0fdc7312a75f_1068x140.png 848w, https://substackcdn.com/image/fetch/$s_!PlcI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b309041-8f9f-4df7-be95-0fdc7312a75f_1068x140.png 1272w, https://substackcdn.com/image/fetch/$s_!PlcI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b309041-8f9f-4df7-be95-0fdc7312a75f_1068x140.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>node-red-node-ui-list</p><p>Display simple list data on the dashboard</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!teeZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f880bde-c287-4ae3-852f-278c22fc7fa1_1066x138.png 424w, https://substackcdn.com/image/fetch/$s_!teeZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f880bde-c287-4ae3-852f-278c22fc7fa1_1066x138.png 848w, https://substackcdn.com/image/fetch/$s_!teeZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f880bde-c287-4ae3-852f-278c22fc7fa1_1066x138.png 1272w, https://substackcdn.com/image/fetch/$s_!teeZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f880bde-c287-4ae3-852f-278c22fc7fa1_1066x138.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!teeZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f880bde-c287-4ae3-852f-278c22fc7fa1_1066x138.png" width="1066" height="138" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f880bde-c287-4ae3-852f-278c22fc7fa1_1066x138.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:138,&quot;width&quot;:1066,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!teeZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f880bde-c287-4ae3-852f-278c22fc7fa1_1066x138.png 424w, https://substackcdn.com/image/fetch/$s_!teeZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f880bde-c287-4ae3-852f-278c22fc7fa1_1066x138.png 848w, https://substackcdn.com/image/fetch/$s_!teeZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f880bde-c287-4ae3-852f-278c22fc7fa1_1066x138.png 1272w, https://substackcdn.com/image/fetch/$s_!teeZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f880bde-c287-4ae3-852f-278c22fc7fa1_1066x138.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>node-red-contrib-ip</p><p>Output IP address</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Sf3a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfacbc29-8fb4-4e25-879a-27da9b1af6d3_1062x148.png 424w, https://substackcdn.com/image/fetch/$s_!Sf3a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfacbc29-8fb4-4e25-879a-27da9b1af6d3_1062x148.png 848w, https://substackcdn.com/image/fetch/$s_!Sf3a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfacbc29-8fb4-4e25-879a-27da9b1af6d3_1062x148.png 1272w, https://substackcdn.com/image/fetch/$s_!Sf3a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfacbc29-8fb4-4e25-879a-27da9b1af6d3_1062x148.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Sf3a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfacbc29-8fb4-4e25-879a-27da9b1af6d3_1062x148.png" width="1062" height="148" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bfacbc29-8fb4-4e25-879a-27da9b1af6d3_1062x148.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:148,&quot;width&quot;:1062,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Sf3a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfacbc29-8fb4-4e25-879a-27da9b1af6d3_1062x148.png 424w, https://substackcdn.com/image/fetch/$s_!Sf3a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfacbc29-8fb4-4e25-879a-27da9b1af6d3_1062x148.png 848w, https://substackcdn.com/image/fetch/$s_!Sf3a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfacbc29-8fb4-4e25-879a-27da9b1af6d3_1062x148.png 1272w, https://substackcdn.com/image/fetch/$s_!Sf3a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfacbc29-8fb4-4e25-879a-27da9b1af6d3_1062x148.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>node-red-node-ui-microphone</p><p>Microphone node</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Kot_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd05bdc-fdbb-4e7e-b2ab-0a1141db2254_1074x146.png 424w, https://substackcdn.com/image/fetch/$s_!Kot_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd05bdc-fdbb-4e7e-b2ab-0a1141db2254_1074x146.png 848w, https://substackcdn.com/image/fetch/$s_!Kot_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd05bdc-fdbb-4e7e-b2ab-0a1141db2254_1074x146.png 1272w, https://substackcdn.com/image/fetch/$s_!Kot_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd05bdc-fdbb-4e7e-b2ab-0a1141db2254_1074x146.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Kot_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd05bdc-fdbb-4e7e-b2ab-0a1141db2254_1074x146.png" width="1074" height="146" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cbd05bdc-fdbb-4e7e-b2ab-0a1141db2254_1074x146.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:146,&quot;width&quot;:1074,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Kot_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd05bdc-fdbb-4e7e-b2ab-0a1141db2254_1074x146.png 424w, https://substackcdn.com/image/fetch/$s_!Kot_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd05bdc-fdbb-4e7e-b2ab-0a1141db2254_1074x146.png 848w, https://substackcdn.com/image/fetch/$s_!Kot_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd05bdc-fdbb-4e7e-b2ab-0a1141db2254_1074x146.png 1272w, https://substackcdn.com/image/fetch/$s_!Kot_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbd05bdc-fdbb-4e7e-b2ab-0a1141db2254_1074x146.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>node-red-node-ui-webcam</p><p>Webpage access to the camera</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A7cF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4557de-31dc-4379-8b42-e6fc3fbb54ad_1066x136.png 424w, https://substackcdn.com/image/fetch/$s_!A7cF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4557de-31dc-4379-8b42-e6fc3fbb54ad_1066x136.png 848w, https://substackcdn.com/image/fetch/$s_!A7cF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4557de-31dc-4379-8b42-e6fc3fbb54ad_1066x136.png 1272w, https://substackcdn.com/image/fetch/$s_!A7cF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4557de-31dc-4379-8b42-e6fc3fbb54ad_1066x136.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!A7cF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4557de-31dc-4379-8b42-e6fc3fbb54ad_1066x136.png" width="1066" height="136" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae4557de-31dc-4379-8b42-e6fc3fbb54ad_1066x136.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:136,&quot;width&quot;:1066,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!A7cF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4557de-31dc-4379-8b42-e6fc3fbb54ad_1066x136.png 424w, https://substackcdn.com/image/fetch/$s_!A7cF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4557de-31dc-4379-8b42-e6fc3fbb54ad_1066x136.png 848w, https://substackcdn.com/image/fetch/$s_!A7cF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4557de-31dc-4379-8b42-e6fc3fbb54ad_1066x136.png 1272w, https://substackcdn.com/image/fetch/$s_!A7cF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae4557de-31dc-4379-8b42-e6fc3fbb54ad_1066x136.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>node-red-contrib-modbus</p><p>Modbus industrial communication protocol</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VOsg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f4e243-9c9c-4cb1-bef9-0bb9df121478_1050x170.png 424w, https://substackcdn.com/image/fetch/$s_!VOsg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f4e243-9c9c-4cb1-bef9-0bb9df121478_1050x170.png 848w, https://substackcdn.com/image/fetch/$s_!VOsg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f4e243-9c9c-4cb1-bef9-0bb9df121478_1050x170.png 1272w, https://substackcdn.com/image/fetch/$s_!VOsg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f4e243-9c9c-4cb1-bef9-0bb9df121478_1050x170.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!VOsg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f4e243-9c9c-4cb1-bef9-0bb9df121478_1050x170.png" width="1050" height="170" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/30f4e243-9c9c-4cb1-bef9-0bb9df121478_1050x170.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:170,&quot;width&quot;:1050,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!VOsg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f4e243-9c9c-4cb1-bef9-0bb9df121478_1050x170.png 424w, https://substackcdn.com/image/fetch/$s_!VOsg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f4e243-9c9c-4cb1-bef9-0bb9df121478_1050x170.png 848w, https://substackcdn.com/image/fetch/$s_!VOsg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f4e243-9c9c-4cb1-bef9-0bb9df121478_1050x170.png 1272w, https://substackcdn.com/image/fetch/$s_!VOsg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f4e243-9c9c-4cb1-bef9-0bb9df121478_1050x170.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>node-red-node-mysql</p><p>MySQL database client</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kt5Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4141aef7-b6b1-4b46-ba76-fd000e4f46fe_1078x150.png 424w, https://substackcdn.com/image/fetch/$s_!kt5Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4141aef7-b6b1-4b46-ba76-fd000e4f46fe_1078x150.png 848w, https://substackcdn.com/image/fetch/$s_!kt5Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4141aef7-b6b1-4b46-ba76-fd000e4f46fe_1078x150.png 1272w, https://substackcdn.com/image/fetch/$s_!kt5Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4141aef7-b6b1-4b46-ba76-fd000e4f46fe_1078x150.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!kt5Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4141aef7-b6b1-4b46-ba76-fd000e4f46fe_1078x150.png" width="1078" height="150" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4141aef7-b6b1-4b46-ba76-fd000e4f46fe_1078x150.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:150,&quot;width&quot;:1078,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!kt5Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4141aef7-b6b1-4b46-ba76-fd000e4f46fe_1078x150.png 424w, https://substackcdn.com/image/fetch/$s_!kt5Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4141aef7-b6b1-4b46-ba76-fd000e4f46fe_1078x150.png 848w, https://substackcdn.com/image/fetch/$s_!kt5Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4141aef7-b6b1-4b46-ba76-fd000e4f46fe_1078x150.png 1272w, https://substackcdn.com/image/fetch/$s_!kt5Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4141aef7-b6b1-4b46-ba76-fd000e4f46fe_1078x150.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>node-red-contrib-tfjs-coco-ssd</p><p>TensorFlow image recognition node</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yaQb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c30f9-f8f5-4f25-8a9b-81d59de980b1_1106x148.png 424w, https://substackcdn.com/image/fetch/$s_!yaQb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c30f9-f8f5-4f25-8a9b-81d59de980b1_1106x148.png 848w, https://substackcdn.com/image/fetch/$s_!yaQb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c30f9-f8f5-4f25-8a9b-81d59de980b1_1106x148.png 1272w, https://substackcdn.com/image/fetch/$s_!yaQb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c30f9-f8f5-4f25-8a9b-81d59de980b1_1106x148.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!yaQb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c30f9-f8f5-4f25-8a9b-81d59de980b1_1106x148.png" width="1106" height="148" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/931c30f9-f8f5-4f25-8a9b-81d59de980b1_1106x148.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:148,&quot;width&quot;:1106,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!yaQb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c30f9-f8f5-4f25-8a9b-81d59de980b1_1106x148.png 424w, https://substackcdn.com/image/fetch/$s_!yaQb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c30f9-f8f5-4f25-8a9b-81d59de980b1_1106x148.png 848w, https://substackcdn.com/image/fetch/$s_!yaQb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c30f9-f8f5-4f25-8a9b-81d59de980b1_1106x148.png 1272w, https://substackcdn.com/image/fetch/$s_!yaQb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931c30f9-f8f5-4f25-8a9b-81d59de980b1_1106x148.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>node-red-contrib-ui-svg</p><p>Display SVG image nodes</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5EBc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a731aa-d104-45be-a2cd-867add9461a5_1128x150.png 424w, https://substackcdn.com/image/fetch/$s_!5EBc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a731aa-d104-45be-a2cd-867add9461a5_1128x150.png 848w, https://substackcdn.com/image/fetch/$s_!5EBc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a731aa-d104-45be-a2cd-867add9461a5_1128x150.png 1272w, https://substackcdn.com/image/fetch/$s_!5EBc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a731aa-d104-45be-a2cd-867add9461a5_1128x150.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!5EBc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a731aa-d104-45be-a2cd-867add9461a5_1128x150.png" width="1128" height="150" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c9a731aa-d104-45be-a2cd-867add9461a5_1128x150.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:150,&quot;width&quot;:1128,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!5EBc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a731aa-d104-45be-a2cd-867add9461a5_1128x150.png 424w, https://substackcdn.com/image/fetch/$s_!5EBc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a731aa-d104-45be-a2cd-867add9461a5_1128x150.png 848w, https://substackcdn.com/image/fetch/$s_!5EBc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a731aa-d104-45be-a2cd-867add9461a5_1128x150.png 1272w, https://substackcdn.com/image/fetch/$s_!5EBc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9a731aa-d104-45be-a2cd-867add9461a5_1128x150.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>node-red-contrib-ui-contextmenu</p><p>Dropdown menu node</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2RH3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465d1003-fd60-4c6b-b65f-1dab93c70060_1136x142.png 424w, https://substackcdn.com/image/fetch/$s_!2RH3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465d1003-fd60-4c6b-b65f-1dab93c70060_1136x142.png 848w, https://substackcdn.com/image/fetch/$s_!2RH3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465d1003-fd60-4c6b-b65f-1dab93c70060_1136x142.png 1272w, https://substackcdn.com/image/fetch/$s_!2RH3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465d1003-fd60-4c6b-b65f-1dab93c70060_1136x142.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!2RH3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465d1003-fd60-4c6b-b65f-1dab93c70060_1136x142.png" width="1136" height="142" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/465d1003-fd60-4c6b-b65f-1dab93c70060_1136x142.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:142,&quot;width&quot;:1136,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!2RH3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465d1003-fd60-4c6b-b65f-1dab93c70060_1136x142.png 424w, https://substackcdn.com/image/fetch/$s_!2RH3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465d1003-fd60-4c6b-b65f-1dab93c70060_1136x142.png 848w, https://substackcdn.com/image/fetch/$s_!2RH3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465d1003-fd60-4c6b-b65f-1dab93c70060_1136x142.png 1272w, https://substackcdn.com/image/fetch/$s_!2RH3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F465d1003-fd60-4c6b-b65f-1dab93c70060_1136x142.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>node-red-contrib-ui-artless-gauge</p><p>A minimalist dashboard UI component for displaying values</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DGaW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F836fd301-9379-4711-ab98-115dbd1fd8b3_1130x150.png 424w, https://substackcdn.com/image/fetch/$s_!DGaW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F836fd301-9379-4711-ab98-115dbd1fd8b3_1130x150.png 848w, https://substackcdn.com/image/fetch/$s_!DGaW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F836fd301-9379-4711-ab98-115dbd1fd8b3_1130x150.png 1272w, https://substackcdn.com/image/fetch/$s_!DGaW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F836fd301-9379-4711-ab98-115dbd1fd8b3_1130x150.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!DGaW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F836fd301-9379-4711-ab98-115dbd1fd8b3_1130x150.png" width="1130" height="150" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/836fd301-9379-4711-ab98-115dbd1fd8b3_1130x150.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:150,&quot;width&quot;:1130,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!DGaW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F836fd301-9379-4711-ab98-115dbd1fd8b3_1130x150.png 424w, https://substackcdn.com/image/fetch/$s_!DGaW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F836fd301-9379-4711-ab98-115dbd1fd8b3_1130x150.png 848w, https://substackcdn.com/image/fetch/$s_!DGaW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F836fd301-9379-4711-ab98-115dbd1fd8b3_1130x150.png 1272w, https://substackcdn.com/image/fetch/$s_!DGaW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F836fd301-9379-4711-ab98-115dbd1fd8b3_1130x150.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>node-red-contrib-image-output</p><p>Preview images in the programming interface</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!t5oe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd7ee8d-b2bd-4bc7-8979-164670926fad_1060x138.png 424w, https://substackcdn.com/image/fetch/$s_!t5oe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd7ee8d-b2bd-4bc7-8979-164670926fad_1060x138.png 848w, https://substackcdn.com/image/fetch/$s_!t5oe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd7ee8d-b2bd-4bc7-8979-164670926fad_1060x138.png 1272w, https://substackcdn.com/image/fetch/$s_!t5oe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd7ee8d-b2bd-4bc7-8979-164670926fad_1060x138.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!t5oe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd7ee8d-b2bd-4bc7-8979-164670926fad_1060x138.png" width="1060" height="138" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bbd7ee8d-b2bd-4bc7-8979-164670926fad_1060x138.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:138,&quot;width&quot;:1060,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!t5oe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd7ee8d-b2bd-4bc7-8979-164670926fad_1060x138.png 424w, https://substackcdn.com/image/fetch/$s_!t5oe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd7ee8d-b2bd-4bc7-8979-164670926fad_1060x138.png 848w, https://substackcdn.com/image/fetch/$s_!t5oe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd7ee8d-b2bd-4bc7-8979-164670926fad_1060x138.png 1272w, https://substackcdn.com/image/fetch/$s_!t5oe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd7ee8d-b2bd-4bc7-8979-164670926fad_1060x138.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>Other nodes I&#8217;ve used before but don&#8217;t use very often:</p><p>node-red-contrib-ui-countdown-timer-switch&#12289;node-red-contrib-ui-actions&#12289;node-red-node-ui-vega&#12289;node-red-contrib-ui-etable&#12289;node-red-contrib-ui-simple-level&#12289;node-red-contrib-ui-statechart&#12289;node-red-contrib-ui-digital-clock&#12289;node-red-contrib-ui-clock&#12289;node-red-contrib-readdir&#12289;node-red-contrib-ui-joystick</p><p>Source: <a href="https://my.feishu.cn/wiki/NzckwVOTQiYuXrkqfKWcLimAn6e">&#40511;&#33945;PC openEuler&#23433;&#35013;node-red - Feishu Docs</a></p>]]></content:encoded></item><item><title><![CDATA[Setting up native Flutter HarmonyOS app development on HarmonyOS computers ]]></title><description><![CDATA[Step-by-Step Guide to Setting Up the Flutter Toolchain on HarmonyOS computers]]></description><link>https://www.harmony-developers.com/p/setting-up-native-flutter-harmonyos</link><guid isPermaLink="false">https://www.harmony-developers.com/p/setting-up-native-flutter-harmonyos</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Sat, 03 Oct 2026 17:59:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yPv7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F952a631f-74da-44f2-8a02-e5d7cf424223_1600x900.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yPv7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F952a631f-74da-44f2-8a02-e5d7cf424223_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yPv7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F952a631f-74da-44f2-8a02-e5d7cf424223_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!yPv7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F952a631f-74da-44f2-8a02-e5d7cf424223_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!yPv7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F952a631f-74da-44f2-8a02-e5d7cf424223_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!yPv7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F952a631f-74da-44f2-8a02-e5d7cf424223_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yPv7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F952a631f-74da-44f2-8a02-e5d7cf424223_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/952a631f-74da-44f2-8a02-e5d7cf424223_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:711307,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/195720558?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F952a631f-74da-44f2-8a02-e5d7cf424223_1600x900.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!yPv7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F952a631f-74da-44f2-8a02-e5d7cf424223_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!yPv7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F952a631f-74da-44f2-8a02-e5d7cf424223_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!yPv7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F952a631f-74da-44f2-8a02-e5d7cf424223_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!yPv7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F952a631f-74da-44f2-8a02-e5d7cf424223_1600x900.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Setting Up the Flutter Toolchain on HarmonyOS Using HiSH</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4vQ4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3592438b-ddb9-4948-a0a9-eb27de5b6ae9_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4vQ4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3592438b-ddb9-4948-a0a9-eb27de5b6ae9_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!4vQ4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3592438b-ddb9-4948-a0a9-eb27de5b6ae9_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!4vQ4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3592438b-ddb9-4948-a0a9-eb27de5b6ae9_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!4vQ4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3592438b-ddb9-4948-a0a9-eb27de5b6ae9_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4vQ4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3592438b-ddb9-4948-a0a9-eb27de5b6ae9_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3592438b-ddb9-4948-a0a9-eb27de5b6ae9_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;devices.png&quot;,&quot;title&quot;:&quot;devices.png&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="devices.png" title="devices.png" srcset="https://substackcdn.com/image/fetch/$s_!4vQ4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3592438b-ddb9-4948-a0a9-eb27de5b6ae9_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!4vQ4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3592438b-ddb9-4948-a0a9-eb27de5b6ae9_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!4vQ4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3592438b-ddb9-4948-a0a9-eb27de5b6ae9_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!4vQ4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3592438b-ddb9-4948-a0a9-eb27de5b6ae9_1920x1080.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This guide provides a complete, step-by-step walkthrough for setting up a native Flutter development environment for OpenHarmony on a HarmonyOS PC, tablet, or even a phone. By following these instructions, you will be able to build and run Flutter applications directly on your HarmonyOS device without needing a separate macOS, Windows, or Linux machine. The key enabler is <strong>HiSH</strong>, a Linux emulator and shell tool specifically designed for HarmonyOS that allows you to run a complete Linux environment, transforming your device into a portable Linux development terminal.</p><h3><strong>The Unix-like Philosophy on HarmonyOS with HiSH</strong></h3><p>The approach described here adheres to the classic &#8220;Unix-ish principles&#8221; you referenced, similar to how toolchains operate on macOS and Linux. HiSH provides a full <strong>arm64 Linux kernel</strong> and a choice of userland environments (Alpine Linux, Ubuntu 24.04, or Debian 12) on top of HarmonyOS. This creates a stable, Linux-based command-line interface where you can execute standard tools like <code>git</code>, <code>bash</code>, <code>curl</code>, and most importantly, the Flutter SDK. While HarmonyOS has its own native terminal (HiShell), it lacks the complete Linux userspace required by the Flutter toolchain. HiSH fills this gap entirely, making your HarmonyOS device a first-class development host.</p><div><hr></div><h2><strong>Step-by-Step Guide to Setting Up the Flutter Toolchain on HarmonyOS</strong></h2><p>This process breaks down into four logical phases: installing HiSH and the necessary IDEs, configuring the Linux environment inside HiSH, creating or migrating your Flutter project, and finally signing and deploying your app.</p><h3><strong>Phase 1: Environment Preparation (The Foundation)</strong></h3><p>Before any code is written, you must install the three core components that form the foundation of your development environment.</p><p><strong>Step 1.1: Install HiSH (The Linux Environment)</strong><br>HiSH is the non-negotiable core of this setup. It is a Linux emulator and shell tool specifically designed for HarmonyOS. Based on <code>qemu-ohos</code>, it supports both 2-in-1 PCs, tablets, and phones.</p><ul><li><p><strong>Action:</strong> You have three options to obtain HiSH:</p><ol><li><p><strong>Easiest:</strong> Install it directly from the AppGallery (note that this version does not support JIT, so it runs slower).</p></li><li><p><strong>Recommended for Developers:</strong> Download the HAP file from the <a href="https://github.com/harmoninux/HiSH/releases">HiSH Releases page</a>, sign it yourself (using DevEco Studio&#8217;s signing tool), and then install it with hap_installer or deployment through DevEco Studio IDE itself. This version supports JIT and runs much faster.</p></li><li><p><strong>From Source:</strong> Clone the <a href="https://github.com/harmoninux/HiSH">HiSH repository</a> and build it in DevEco Studio for the maximum level of customization.</p></li></ol></li><li><p><strong>Why HiSH:</strong> The OpenHarmony-SIG Flutter SDK relies on a toolchain designed for Unix-like systems. HiSH fulfills this dependency by providing a complete, virtualized Linux kernel and root filesystem with networking, port forwarding, and a shared folder for easy file exchange between HarmonyOS and the Linux environment.</p></li></ul><p><strong>Step 1.2: Install DevEco Studio (The Native IDE &amp; SDK Manager)</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Cj-a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb57ee603-7c42-41a3-9509-544a511806c1_1440x960.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Cj-a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb57ee603-7c42-41a3-9509-544a511806c1_1440x960.png 424w, https://substackcdn.com/image/fetch/$s_!Cj-a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb57ee603-7c42-41a3-9509-544a511806c1_1440x960.png 848w, https://substackcdn.com/image/fetch/$s_!Cj-a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb57ee603-7c42-41a3-9509-544a511806c1_1440x960.png 1272w, https://substackcdn.com/image/fetch/$s_!Cj-a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb57ee603-7c42-41a3-9509-544a511806c1_1440x960.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Cj-a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb57ee603-7c42-41a3-9509-544a511806c1_1440x960.png" width="1440" height="960" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b57ee603-7c42-41a3-9509-544a511806c1_1440x960.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:960,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:597647,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/195720558?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb57ee603-7c42-41a3-9509-544a511806c1_1440x960.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Cj-a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb57ee603-7c42-41a3-9509-544a511806c1_1440x960.png 424w, https://substackcdn.com/image/fetch/$s_!Cj-a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb57ee603-7c42-41a3-9509-544a511806c1_1440x960.png 848w, https://substackcdn.com/image/fetch/$s_!Cj-a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb57ee603-7c42-41a3-9509-544a511806c1_1440x960.png 1272w, https://substackcdn.com/image/fetch/$s_!Cj-a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb57ee603-7c42-41a3-9509-544a511806c1_1440x960.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>DevEco Studio is the Rust-based, native IDE for HarmonyOS. It is not a JetBrains product but a custom, high-performance environment written in Rust and using Huawei&#8217;s in-house Bifeng framework.</p><ul><li><p><strong>Action:</strong> Download and install DevEco Studio from the official Huawei developer website.</p></li><li><p><strong>Why:</strong> DevEco Studio serves two critical functions in this workflow:</p><ol><li><p>It manages the <strong>OpenHarmony/HarmonyOS SDK</strong>, which contains the native tools (<code>hdc</code>, <code>ohpm</code>, <code>hvigor</code>) needed to build and deploy apps.</p></li><li><p>It handles the final signing and deployment of the <code>.hap</code> (HarmonyOS Ability Package) file to your device. It also provides the &#8220;Auto-Signing&#8221; feature to generate security certificates.</p></li></ol></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4TFV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70fcf7b-a762-4e4f-a171-444b3e0406fa_1280x853.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4TFV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70fcf7b-a762-4e4f-a171-444b3e0406fa_1280x853.png 424w, https://substackcdn.com/image/fetch/$s_!4TFV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70fcf7b-a762-4e4f-a171-444b3e0406fa_1280x853.png 848w, https://substackcdn.com/image/fetch/$s_!4TFV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70fcf7b-a762-4e4f-a171-444b3e0406fa_1280x853.png 1272w, https://substackcdn.com/image/fetch/$s_!4TFV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70fcf7b-a762-4e4f-a171-444b3e0406fa_1280x853.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!4TFV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70fcf7b-a762-4e4f-a171-444b3e0406fa_1280x853.png" width="1280" height="853" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d70fcf7b-a762-4e4f-a171-444b3e0406fa_1280x853.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:853,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:555849,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/195720558?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70fcf7b-a762-4e4f-a171-444b3e0406fa_1280x853.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!4TFV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70fcf7b-a762-4e4f-a171-444b3e0406fa_1280x853.png 424w, https://substackcdn.com/image/fetch/$s_!4TFV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70fcf7b-a762-4e4f-a171-444b3e0406fa_1280x853.png 848w, https://substackcdn.com/image/fetch/$s_!4TFV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70fcf7b-a762-4e4f-a171-444b3e0406fa_1280x853.png 1272w, https://substackcdn.com/image/fetch/$s_!4TFV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd70fcf7b-a762-4e4f-a171-444b3e0406fa_1280x853.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Step 1.3: Install BiSheng JDK 17 (The Missing Link)</strong><br>Flutter&#8217;s internal tools require a Java runtime to function. On HarmonyOS, this is provided by the BiSheng JDK.</p><ul><li><p><strong>Action:</strong> Install <strong>BiSheng JDK 17-OH</strong> from the AppGallery. This process will automatically register the Java environment with the system&#8217;s toolchain configurations, linking it to both CodeArts IDE and DevEco Studio.</p></li><li><p><strong>Critical Note:</strong> Without this specific JDK, the <code>flutter</code> command will fail inside HiSH because it cannot find a valid Java runtime.</p></li></ul><h3><strong>Phase 2: SDK and Environment Configuration (Inside HiSH)</strong></h3><p>With the core apps installed, you now launch HiSH and configure the Linux environment to recognize the Flutter SDK and the BiSheng JDK.</p><p><strong>Step 2.1: Launch HiSH and Set Up the Shared Folder</strong><br>Open the HiSH app on your HarmonyOS device. Once the Linux kernel boots and you are presented with a shell prompt (likely from the included Alpine Linux rootfs), you need to identify the shared folder. This folder is a bidirectional bridge: files placed here are visible both in HarmonyOS and inside the HiSH Linux environment.</p><ul><li><p><strong>Action:</strong> HiSH typically creates a shared directory. You can find its location by looking for a mounted directory (often <code>/mnt/shared</code> or similar) or by checking the HiSH documentation. Place all your development projects in this shared folder so you can access them from both HiSH (for command-line builds) and DevEco Studio (for signing and deployment).</p></li></ul><p><strong>Step 2.2: Install Necessary Linux Packages</strong><br>Inside the HiSH terminal, update the package manager and install <code>git</code> and <code>curl</code>, as the Alpine Linux rootfs is very minimal.</p><ul><li><p><strong>Action:</strong> Run the following commands in the HiSH terminal:</p><p>bash</p></li></ul><pre><code><code>apk update
apk add git curl bash</code></code></pre><p><strong>Step 2.3: Clone the OpenHarmony Flutter SDK</strong><br>Now, clone the specific branch of the Flutter SDK for OpenHarmony directly into your shared folder.</p><ul><li><p><strong>Action:</strong> Navigate to your shared folder (e.g., <code>cd /mnt/shared</code>) and run the following command to get the current stable version (3.27.x branch):</p><p>bash</p></li></ul><pre><code><code>git clone -b br_3.27.4-ohos-1.0.4 https://gitcode.com/openharmony-tpc/flutter_flutter.git</code></code></pre><p><strong>Step 2.4: Configure Environment Variables for the Linux Shell</strong><br>You must tell the system inside HiSH where to find the Flutter and BiSheng JDK binaries. Since the BiSheng JDK is installed on the HarmonyOS host, you will need to locate its installation path from within HiSH. It is often accessible through the shared folder or a specific mount point. For this guide, we assume you have copied or linked the JDK into a path inside HiSH, for example, <code>/home/openharmony/libs/bisheng-jdk17-oh</code>.</p><ul><li><p><strong>Action:</strong> Edit the <code>.bashrc</code> file in your HiSH Linux environment (or run these commands directly in the session) to set the necessary paths. Use <code>nano ~/.bashrc</code> if <code>nano</code> is installed, or <code>vi ~/.bashrc</code>.<br>Add the following lines, adjusting the paths to match your actual directories inside HiSH:</p><p>bash</p></li></ul><pre><code><code># Flutter OH SDK Path
export FLUTTER_HOME=/mnt/shared/flutter_flutter
export PATH=&#8221;$FLUTTER_HOME/bin:$PATH&#8221;

# BiSheng JDK 17 Path (inside the HiSH Linux environment)
export JAVA_HOME=/home/openharmony/libs/bisheng-jdk17-oh
export PATH=&#8221;$JAVA_HOME/bin:$PATH&#8221;

# Optional but recommended: Use Chinese mirrors for faster package downloads
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
export PUB_HOSTED_URL=https://pub.flutter-io.cn</code></code></pre><ul><li><p><strong>Load the configuration:</strong> Run <code>source ~/.bashrc</code> to apply the changes.</p></li></ul><p><strong>Step 2.5: Link BiSheng JDK to the Flutter Toolchain</strong><br>This is the most important command. You must explicitly tell the Flutter toolchain where to find the BiSheng JDK.</p><ul><li><p><strong>Action:</strong> In the HiSH terminal, run the following command:</p><p>bash</p></li></ul><pre><code><code>flutter config --jdk-dir=$JAVA_HOME</code></code></pre><p><strong>Step 2.6: Verify Your Setup Inside HiSH</strong><br>Run the verification command to ensure everything is correctly configured within the Linux emulator.</p><ul><li><p><strong>Action:</strong> Execute <code>flutter doctor -v</code> in the HiSH terminal.</p></li><li><p><strong>Expected Outcome:</strong> You should see a green checkmark next to the Java binary path, confirming it is using the BiSheng version. The output should also indicate that the OpenHarmony toolchain is available. You might see warnings about other platforms (Android, iOS), but the key is to see no errors for the OpenHarmony environment.</p></li></ul><h3><strong>Phase 3: Project Creation and Migration (The Code)</strong></h3><p>Your Linux environment (HiSH) is now ready. You can create a new Flutter project or bring in an existing codebase.</p><p><strong>Step 3.1: Generate the Project &#8220;Bridge&#8221; Inside HiSH</strong><br>The Flutter toolchain needs to create the native HarmonyOS project files (the <code>ohos</code> folder) that DevEco Studio understands.</p><ul><li><p><strong>Action:</strong> Navigate to your desired project directory inside the shared folder (e.g., <code>cd /mnt/shared/my_flutter_app</code>) in the HiSH terminal. Then run:</p><p>bash</p></li></ul><pre><code><code>flutter create --platforms ohos .</code></code></pre><ul><li><p>This command generates the <code>ohos</code> folder, which acts as a native wrapper for your Flutter code. Critically, this folder is generated inside the shared folder, making it immediately visible to the HarmonyOS file system and DevEco Studio.</p></li></ul><p><strong>Step 3.2: Import Your Existing Flutter Code (Optional)</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!J9op!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff7e6484-9ca3-440c-981b-51ec23df55ef_598x300.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!J9op!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff7e6484-9ca3-440c-981b-51ec23df55ef_598x300.png 424w, https://substackcdn.com/image/fetch/$s_!J9op!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff7e6484-9ca3-440c-981b-51ec23df55ef_598x300.png 848w, https://substackcdn.com/image/fetch/$s_!J9op!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff7e6484-9ca3-440c-981b-51ec23df55ef_598x300.png 1272w, https://substackcdn.com/image/fetch/$s_!J9op!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff7e6484-9ca3-440c-981b-51ec23df55ef_598x300.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!J9op!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff7e6484-9ca3-440c-981b-51ec23df55ef_598x300.png" width="598" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff7e6484-9ca3-440c-981b-51ec23df55ef_598x300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:300,&quot;width&quot;:598,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Reading a text file from assets in Flutter | by Suragch | Medium&quot;,&quot;title&quot;:&quot;Reading a text file from assets in Flutter | by Suragch | Medium&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Reading a text file from assets in Flutter | by Suragch | Medium" title="Reading a text file from assets in Flutter | by Suragch | Medium" srcset="https://substackcdn.com/image/fetch/$s_!J9op!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff7e6484-9ca3-440c-981b-51ec23df55ef_598x300.png 424w, https://substackcdn.com/image/fetch/$s_!J9op!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff7e6484-9ca3-440c-981b-51ec23df55ef_598x300.png 848w, https://substackcdn.com/image/fetch/$s_!J9op!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff7e6484-9ca3-440c-981b-51ec23df55ef_598x300.png 1272w, https://substackcdn.com/image/fetch/$s_!J9op!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff7e6484-9ca3-440c-981b-51ec23df55ef_598x300.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you have an existing Flutter project, you can easily migrate it to your HarmonyOS environment.</p><ol><li><p><strong>Copy your code:</strong> Using the HarmonyOS file manager or the command line inside HiSH, copy your existing <code>lib/</code> folder, <code>assets/</code> folder, and <code>pubspec.yaml</code> file into the root of the project you just initialized (the one containing the <code>ohos</code> folder).</p></li><li><p><strong>Merge dependencies:</strong> Open your <code>pubspec.yaml</code> file and ensure any OpenHarmony-specific plugins (e.g., <code>flutter_ohos</code>) are added. You may need to add specific <code>git</code> dependencies for plugins that support OpenHarmony.</p></li><li><p><strong>Resolve dependencies:</strong> Run <code>flutter pub get</code> in the HiSH terminal, inside your project directory. This downloads your packages and updates the bridge files inside the <code>ohos</code> folder to point to your existing Dart logic.</p></li></ol><h3><strong>Phase 4: Signing, Building, and Deployment (Using DevEco Studio)</strong></h3><p>This phase uses the native DevEco Studio IDE on HarmonyOS to handle the final signing and deployment. Because your project exists in the shared folder, both HiSH and DevEco Studio can access it seamlessly.</p><p><strong>Step 4.1: Import the Project into DevEco Studio</strong></p><ul><li><p><strong>Action:</strong> Open DevEco Studio on your HarmonyOS PC. Choose <strong>&#8220;Open Project&#8221;</strong> and navigate to the <code>ohos</code> sub-folder inside your Flutter project&#8217;s root directory (the one you just created in the shared folder). Click &#8220;Open&#8221;.</p></li></ul><p><strong>Step 4.2: Perform the &#8220;Auto-Signing&#8221; Handshake</strong><br>For the app to run on a real device (your HarmonyOS PC itself counts as a device), it must be signed with a digital certificate.</p><ul><li><p><strong>Action:</strong> In DevEco Studio:</p><ol><li><p>Go to <code>File &gt; Project Structure &gt; Project &gt; Signing Configs</code>.</p></li><li><p>Check the box for <strong>&#8220;Automatically Generate Signature&#8221;</strong>.</p></li><li><p>Log in with your Huawei Developer account when prompted.</p></li><li><p>Click <strong>&#8220;Apply&#8221;</strong> and then <strong>&#8220;OK&#8221;</strong>.</p></li></ol></li><li><p><strong>How it works:</strong> The Rust-based IDE will securely communicate with the HarmonyOS kernel to generate the necessary security certificates and profile for your app.</p></li></ul><p><strong>Step 4.3: Build and Run Your Flutter App</strong><br>You are now ready to see your app in action on your HarmonyOS device.</p><ul><li><p><strong>Action:</strong> In DevEco Studio, click the green &#8220;Run&#8221; button. Alternatively, you can run the <code>flutter run</code> command inside your project directory in the HiSH terminal.</p></li><li><p><strong>The Complete Process Explained:</strong></p><ol><li><p><strong>Compilation:</strong> If you click &#8220;Run&#8221; in DevEco Studio, it will invoke the Flutter toolchain. That toolchain, running inside the HiSH Linux environment, uses the BiSheng JDK to compile your Dart code and build a <code>.hap</code> (HarmonyOS Ability Package) file.</p></li><li><p><strong>Detection &amp; Signing:</strong> DevEco Studio detects the newly built <code>.hap</code> file in the shared project folder. It then applies the auto-generated signature profile to the package.</p></li><li><p><strong>Deployment &amp; Execution:</strong> Finally, DevEco Studio uses the HarmonyOS <code>hdc</code> tool to push the signed <code>.hap</code> file to your connected HarmonyOS PC (or a phone/tablet) and launches the app.</p></li></ol></li></ul><h3><strong>How the Components Work Together in Your Daily Workflow</strong></h3><p>For a smooth development experience, you will use different tools for different tasks, just as you would on a traditional OS:</p><ul><li><p><strong>CodeArts IDE (Your Daily Driver for Coding):</strong> This is a lightweight, cloud-native inspired IDE (similar to VS Code). You can use it for the &#8220;heavy lifting&#8221; of writing all your Dart code, managing your project&#8217;s folder structure, and editing your UI logic. Since your project lives in the shared folder, CodeArts can open and edit it directly.</p></li><li><p><strong>DevEco Studio (The Deployment &amp; Signing Specialist):</strong> You will primarily use this IDE for two specific tasks: generating the app&#8217;s security signature (once per project) and clicking the &#8220;Run&#8221; button to deploy the app to your devices. You don&#8217;t need to write code inside it.</p></li><li><p><strong>HiSH (The Linux Build Environment):</strong> This is where you run all Flutter command-line operations: <code>flutter pub get</code> to fetch dependencies, <code>flutter build hap</code> to create a release package, and even <code>flutter run</code> if you prefer the terminal. HiSH provides the essential Unix-like CLI and the complete Linux kernel that the Flutter toolchain requires.</p></li><li><p><strong>BiSheng JDK (The Build Engine):</strong> This is the essential Java runtime that powers Flutter&#8217;s internal build tools, and it must be correctly linked via <code>flutter config --jdk-dir</code>.</p></li></ul><p>By following this corrected guide, you establish a self-contained, native development environment for Flutter on OpenHarmony using <strong>HiSH</strong>. You can now develop, build, and deploy Flutter applications entirely from your HarmonyOS PC, tablet, or phone, without needing a secondary machine or a virtual machine. This is true native development, following the classic Unix philosophy, on a modern, non-Linux operating system.</p>]]></content:encoded></item><item><title><![CDATA[Are software manufacturers highly motivated to adapt to the HarmonyOS system? - Did you know? ]]></title><description><![CDATA[The turning point in the Chinese and global mainstream software industry of three poles as duopoly is fading in 2026!]]></description><link>https://www.harmony-developers.com/p/are-software-manufacturers-highly</link><guid isPermaLink="false">https://www.harmony-developers.com/p/are-software-manufacturers-highly</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Sat, 03 Oct 2026 17:58:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ucrS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1769d-3240-4dd8-afbc-df1d8f72bd9d_900x480.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ucrS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1769d-3240-4dd8-afbc-df1d8f72bd9d_900x480.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ucrS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1769d-3240-4dd8-afbc-df1d8f72bd9d_900x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ucrS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1769d-3240-4dd8-afbc-df1d8f72bd9d_900x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ucrS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1769d-3240-4dd8-afbc-df1d8f72bd9d_900x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ucrS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1769d-3240-4dd8-afbc-df1d8f72bd9d_900x480.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ucrS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1769d-3240-4dd8-afbc-df1d8f72bd9d_900x480.jpeg" width="900" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/07c1769d-3240-4dd8-afbc-df1d8f72bd9d_900x480.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:46452,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/196454193?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1769d-3240-4dd8-afbc-df1d8f72bd9d_900x480.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!ucrS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1769d-3240-4dd8-afbc-df1d8f72bd9d_900x480.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ucrS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1769d-3240-4dd8-afbc-df1d8f72bd9d_900x480.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ucrS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1769d-3240-4dd8-afbc-df1d8f72bd9d_900x480.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ucrS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07c1769d-3240-4dd8-afbc-df1d8f72bd9d_900x480.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let&#8217;s talk about the conclusion first: By this point in 2026, software manufacturers will be interested in the HarmonyOS system (especially HarmonyOS NEXT+/HarmonyOS 6 +The enthusiasm for adaptation has completely shifted from the early wait-and-see to the full speed sprint.</p><p>To put it simply, the current HarmonyOS adaptation is no longer a &#8220;plus&#8221; for manufacturers, but has become a &#8220;must-have option&#8221;. No one can ignore the hundreds of millions of devices, and the ecosystem of HarmonyOS native applications has crossed the key &#8220;life and death line&#8221;.</p><p>--Now 5kw, estimated to exceed 100 million at the end of the year, not bragging, but the actual situation, Huawei&#8217;s mobile phone equipment in 2026 is estimated to return to the king, and several friends in the mobile phone industry are under some pressure. In other words: as an ordinary cattle and horses, one more ecology will not lead to more social employment opportunities, which is definitely good for our cattle and horses, especially the Internet industry.</p><p>Comprehensive coverage of core applications: The main apps of leading Internet</p><p>manufacturers (such as Tencent, Alibaba, ByteDance, Meituan, etc.) have already completed native adaptation. Applications with 100 million daily active users such as WeChat, Alipay, Douyin, and Xiaohongshu have the same experience as Android/iOS versions, and even have advantages in distributed collaboration (such as cross-device circulation).</p><p>Explosion in the number of native applications: As of early 2026, the number of HarmonyOS native applications and cloud services has exceeded 75,000.</p><p>Overseas manufacturers take the initiative to enter the game: It is particularly noteworthy that international brands such as Tesla have also taken the initiative to launch native HarmonyOS versions, which marks the recognition of the value of the HarmonyOS ecosystem in the eyes of global developers.</p><p>The change in manufacturers&#8217; attitudes is mainly due to the following three driving forces:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y3z7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf3d14c-2883-44ad-9660-2dca3cd52a23_871x827.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y3z7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf3d14c-2883-44ad-9660-2dca3cd52a23_871x827.png 424w, https://substackcdn.com/image/fetch/$s_!y3z7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf3d14c-2883-44ad-9660-2dca3cd52a23_871x827.png 848w, https://substackcdn.com/image/fetch/$s_!y3z7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf3d14c-2883-44ad-9660-2dca3cd52a23_871x827.png 1272w, https://substackcdn.com/image/fetch/$s_!y3z7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf3d14c-2883-44ad-9660-2dca3cd52a23_871x827.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!y3z7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf3d14c-2883-44ad-9660-2dca3cd52a23_871x827.png" width="871" height="827" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3cf3d14c-2883-44ad-9660-2dca3cd52a23_871x827.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:827,&quot;width&quot;:871,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:69341,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/196454193?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf3d14c-2883-44ad-9660-2dca3cd52a23_871x827.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!y3z7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf3d14c-2883-44ad-9660-2dca3cd52a23_871x827.png 424w, https://substackcdn.com/image/fetch/$s_!y3z7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf3d14c-2883-44ad-9660-2dca3cd52a23_871x827.png 848w, https://substackcdn.com/image/fetch/$s_!y3z7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf3d14c-2883-44ad-9660-2dca3cd52a23_871x827.png 1272w, https://substackcdn.com/image/fetch/$s_!y3z7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf3d14c-2883-44ad-9660-2dca3cd52a23_871x827.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Of course, it is not without risk costs, and the maintenance cost of the application side is at least one-third higher than that of an additional set of ecosystems:</p><p>The cost of overturning and starting over: HarmonyOS NEXT has been completely</p><p>stripped away AOSP+(Android open source project), which means that manufacturers can no longer use Android code to &#8220;shell&#8221;, they must use it ArkTS+ language and ArkUI + Frameworks rewrite application logic. For large apps with heavy technical debt, this is tantamount to &#8220;tearing down and rebuilding&#8221;.</p><p>Talent premium: In 2024-2025, HarmonyOS development talents were in short supply, resulting in a surge in R&amp;D investment costs in the early stage of adaptation.</p><p>Performance tuning: Unlike Android, manufacturers need to spend a lot of energy to deeply optimize the HarmonyOS base to achieve Huawei&#8217;s claimed &#8220;fluency improvement&#8221;.</p><p>4. Conclusion and insight</p><p>The current situation is: large factories are rolling performance, and small factories are catching up with the progress.</p><p>If two years ago, adapting to HarmonyOS still needed Huawei to &#8220;seek&#8221; manufacturers, then the current situation in 2026 is that manufacturers are queuing up to squeeze into Huawei&#8217;s developer support plan. For Internet veterans like you, HarmonyOS is no longer an &#8220;alternative system&#8221;, but a new growth pole with independent distribution logic and independent technology stack.</p><p>Source: <a href="https://www.zhihu.com/question/662471655/answer/2025502874831009298">Are software manufacturers highly motivated to adapt to the HarmonyOS system? - Did you know?</a></p>]]></content:encoded></item><item><title><![CDATA[Why React Developers Can't Ignore OpenHarmony Anymore with emergence of React Foundation for React Native framework ]]></title><description><![CDATA[React Native revolution just got a massive new target platform &#8212; and it&#8217;s not iOS or Android. It is now expanding to HarmonyOS as a emerging global 3rd platform]]></description><link>https://www.harmony-developers.com/p/why-react-developers-cant-ignore</link><guid isPermaLink="false">https://www.harmony-developers.com/p/why-react-developers-cant-ignore</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Sat, 03 Oct 2026 17:56:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8GVF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce688896-d446-4bc1-bdf0-66fdf7b58df7_961x683.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The React Native revolution just got a massive new target platform &#8212; and it&#8217;s not iOS or Android. <a href="https://harmonyoshub.com/huawei-joins-the-react-foundation-as-a-platinum-founding-member-which-will-promote-the-deep-integration-and-native-interoperability-of-openharmony-and-the-react-framework/">Global developers, especially those building with React or React Native, have a compelling reason to pay close attention to OpenHarmony right now in early 2026</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8GVF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce688896-d446-4bc1-bdf0-66fdf7b58df7_961x683.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8GVF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce688896-d446-4bc1-bdf0-66fdf7b58df7_961x683.png 424w, https://substackcdn.com/image/fetch/$s_!8GVF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce688896-d446-4bc1-bdf0-66fdf7b58df7_961x683.png 848w, https://substackcdn.com/image/fetch/$s_!8GVF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce688896-d446-4bc1-bdf0-66fdf7b58df7_961x683.png 1272w, https://substackcdn.com/image/fetch/$s_!8GVF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce688896-d446-4bc1-bdf0-66fdf7b58df7_961x683.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8GVF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce688896-d446-4bc1-bdf0-66fdf7b58df7_961x683.png" width="961" height="683" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ce688896-d446-4bc1-bdf0-66fdf7b58df7_961x683.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:683,&quot;width&quot;:961,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:331276,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/189539473?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce688896-d446-4bc1-bdf0-66fdf7b58df7_961x683.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!8GVF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce688896-d446-4bc1-bdf0-66fdf7b58df7_961x683.png 424w, https://substackcdn.com/image/fetch/$s_!8GVF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce688896-d446-4bc1-bdf0-66fdf7b58df7_961x683.png 848w, https://substackcdn.com/image/fetch/$s_!8GVF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce688896-d446-4bc1-bdf0-66fdf7b58df7_961x683.png 1272w, https://substackcdn.com/image/fetch/$s_!8GVF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce688896-d446-4bc1-bdf0-66fdf7b58df7_961x683.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>OpenHarmony &#8212; the open-source distributed operating system donated by Huawei to the OpenAtom Foundation &#8212; powers HarmonyOS NEXT versions of HarmonyOS 5 and current HarmonyOS 6, Huawei&#8217;s fully independent (no Android compatibility) OS. It&#8217;s already running on tens of millions of devices in China, with over 10 million registered developers and more than 350,000 apps/meta-services in its ecosystem as of early 2026 with <a href="https://x.com/LivingInHarmony/status/2028021880536371319?s=20">47.2 million users as 1st of March 2026</a>. The open-source base has surpassed <a href="https://harmonyoshub.com/the-number-of-open-source-openharmony-devices-exceeded-1-2-billion/">1.2 billion smart devices across scenarios (phones, tablets, IoT, wearables, automotive, PCs and more)</a>. But the real game-changer for international developers isn&#8217;t just the scale &#8212; it&#8217;s the strategic integration with the world&#8217;s dominant front-end framework.</p><h2><strong>The Power Move: Huawei + React Native + React Foundation</strong></h2><p>Huawei didn&#8217;t just build yet another OS. They <a href="https://blog.swmansion.com/huawei-x-software-mansion-bringing-react-native-support-to-harmonyos-next-82e02bd75549">partnered deeply with leading React Native experts at Software Mansion (a top-tier Polish firm behind libraries like Reanimated, Gesture Handler, and Screens) to create React Native OpenHarmony (RNOH)</a>. This library lets React Native apps run natively on OpenHarmony devices with minimal changes. Key libraries have been ported for smooth performance, and real-world apps (including major Chinese platforms like YY, Xiaohongshu, and Ctrip) are already adopting it.</p><p>The collaboration started via projects like Oniro (Eclipse Foundation&#8217;s vendor-neutral OpenHarmony implementation) and escalated dramatically. On February 24, 2026, the Linux Foundation announced the formation of the React Foundation, with Meta donating React, React Native, and supporting components (like JSX) to neutral governance. The eight platinum founding members? Amazon, Callstack, Expo, Huawei, Meta, Microsoft, Software Mansion, and Vercel. Huawei explicitly stated their intent: to &#8220;deepen synergy&#8221; and &#8220;foster seamless and native interoperability between OpenHarmony and React technologies. &#8221;This isn&#8217;t passive sponsorship, with Software Mansion already embedded from the RNOH work and now at the React Foundation table, Huawei secures influence over React&#8217;s future direction &#8212; ensuring OpenHarmony becomes a first-class citizen for React/React Native developers.</p><h2><strong>Why This Matters More Than Fragmented Linux Mobile Efforts</strong></h2><p>Traditional open-source mobile Linux projects (Jolla&#8217;s Sailfish OS, UBports&#8217; Ubuntu Touch) struggled for years with tiny ecosystems, limited hardware support, and negligible app adoption. They lacked corporate scale, massive funding, and developer mindshare. OpenHarmony/HarmonyOS NEXT is different:</p><ul><li><p>Industrial backing &#8212; Huawei invests heavily, ships billions of devices globally, and partners aggressively.</p></li><li><p>Massive momentum in China &#8212; Already the #2 mobile OS there (surpassing iOS in share at times), with plans for international expansion in 2026 (smartphones, tablets, PCs, wearables, cars, TVs, smart things etc.).</p></li><li><p>Distributed, multi-device architecture &#8212; Designed for seamless experiences across phones, IoT, cars, TVs &#8212; a true &#8220;all-scenario&#8221; OS where React Native&#8217;s cross-platform strengths shine.</p></li><li><p>Low-friction entry for devs &#8212; If you&#8217;re already using React Native, targeting OpenHarmony could mean code reuse with little extra effort. No need to learn entirely new stacks like ArkTS/Cangjie/ArkUI (though those remain options for native performance).</p></li></ul><p>Huawei aims for global push in 2026, including potential stock HarmonyOS smartphones in markets like Europe among other parts of the world. The app gap is closing fast via tools like RNOH. Why Global Developers Should Pay Attention Now</p><ol><li><p>Early-mover advantage &#8212; The ecosystem is young outside China. Being among the first to build/productionize React Native apps for OpenHarmony positions you as an expert in a rising platform with less competition.</p></li><li><p>Huge addressable market &#8212; Hundreds of millions (potentially billions) of devices long-term, especially in emerging markets and non-Google/Apple ecosystems.</p></li><li><p>Diversification beyond the duopoly &#8212; Android/iOS dominance is real, but geopolitical shifts, privacy concerns, and multi-device needs create openings for third paths. OpenHarmony offers one backed by real volume.</p></li><li><p>React ecosystem boost &#8212; With Huawei&#8217;s platinum role in the React Foundation, expect more official tools, docs, and community focus on OpenHarmony support &#8212; making it easier over time.</p></li><li><p>Innovation in distributed apps &#8212; Build once, deploy across form factors with native feel &#8212; a sweet spot for React Native devs eyeing IoT, wearables, or automotive.</p></li></ol><p>The fragmented GNU/Linux mobile crowd couldn&#8217;t break through at scale. Huawei is taking a pragmatic, industry-backed approach &#8212; partnering with React giants to bootstrap adoption. If you&#8217;re a React/React Native developer, 2026 is the year to at least experiment: check out RNOH, explore DevEco Studio (Huawei&#8217;s IDE), and target OpenHarmony devices. The third major mobile/IoT platform might be arriving faster than expected &#8212; and React could be its on-ramp. What do you think &#8212; will OpenHarmony crack the global app developer barrier? Drop your thoughts below.</p>]]></content:encoded></item><item><title><![CDATA[Use Fastforge to automatically build and publish OHOS Flutter Apps to App Gallery ]]></title><description><![CDATA[Please note that this article was written 173 days ago and last modified 171 days ago, and some of the information may be outdated.]]></description><link>https://www.harmony-developers.com/p/use-fastforge-to-automatically-build</link><guid isPermaLink="false">https://www.harmony-developers.com/p/use-fastforge-to-automatically-build</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Sat, 03 Oct 2026 17:54:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Wtbq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe84d1420-73a5-4427-95f9-c2f8ebbbe663_862x349.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Wtbq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe84d1420-73a5-4427-95f9-c2f8ebbbe663_862x349.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Wtbq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe84d1420-73a5-4427-95f9-c2f8ebbbe663_862x349.png 424w, https://substackcdn.com/image/fetch/$s_!Wtbq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe84d1420-73a5-4427-95f9-c2f8ebbbe663_862x349.png 848w, https://substackcdn.com/image/fetch/$s_!Wtbq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe84d1420-73a5-4427-95f9-c2f8ebbbe663_862x349.png 1272w, https://substackcdn.com/image/fetch/$s_!Wtbq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe84d1420-73a5-4427-95f9-c2f8ebbbe663_862x349.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Wtbq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe84d1420-73a5-4427-95f9-c2f8ebbbe663_862x349.png" width="862" height="349" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e84d1420-73a5-4427-95f9-c2f8ebbbe663_862x349.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:349,&quot;width&quot;:862,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:56932,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/187914473?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe84d1420-73a5-4427-95f9-c2f8ebbbe663_862x349.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Wtbq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe84d1420-73a5-4427-95f9-c2f8ebbbe663_862x349.png 424w, https://substackcdn.com/image/fetch/$s_!Wtbq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe84d1420-73a5-4427-95f9-c2f8ebbbe663_862x349.png 848w, https://substackcdn.com/image/fetch/$s_!Wtbq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe84d1420-73a5-4427-95f9-c2f8ebbbe663_862x349.png 1272w, https://substackcdn.com/image/fetch/$s_!Wtbq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe84d1420-73a5-4427-95f9-c2f8ebbbe663_862x349.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Please note that this article was written 173 days ago and last modified 171 days ago, and some of the information may be outdated.</p><h2><strong>Preface</strong></h2><p>I wrote an article on <a href="https://0x0.ink/archives/273.html">&#8220;Building a Flutter App for HarmonyOS NEXT / OpenHarmony with Fastforge&#8221;</a></p><p>But as a lazy dog, I suddenly thought that I had to upload it to the App Store - App Gallery after I finished building, which was still a bit troublesome.</p><p>Then I found out that App Gallery supports uploading built apps through the Publishing API, so I added support for uploading to App Gallery to Fastforge.</p><blockquote><blockquote><p>The PR has been merged and published in Releases<code>0.6.5</code></p></blockquote></blockquote><p><a href="https://fastforge.dev/">Fastforge | Make your app distribution with ease.</a></p><h2><strong>How to use:</strong></h2><h3><strong>1. Create a Connect API client</strong></h3><p>Create an API client and get client_id and client_secret according to the documentation <a href="https://developer.huawei.com/consumer/cn/doc/app/agc-help-connect-api-obtain-server-auth-0000002271134661#section103mcpsimp">Create an AppGallery Connect API Client</a>, as shown below</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!J5N1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd50ce6-c00c-4c37-b492-be9de21f497c_1542x932.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!J5N1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd50ce6-c00c-4c37-b492-be9de21f497c_1542x932.png 424w, https://substackcdn.com/image/fetch/$s_!J5N1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd50ce6-c00c-4c37-b492-be9de21f497c_1542x932.png 848w, https://substackcdn.com/image/fetch/$s_!J5N1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd50ce6-c00c-4c37-b492-be9de21f497c_1542x932.png 1272w, https://substackcdn.com/image/fetch/$s_!J5N1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd50ce6-c00c-4c37-b492-be9de21f497c_1542x932.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!J5N1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd50ce6-c00c-4c37-b492-be9de21f497c_1542x932.png" width="1456" height="880" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6dd50ce6-c00c-4c37-b492-be9de21f497c_1542x932.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:880,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;2025-08-25T10:48:26.png&quot;,&quot;title&quot;:&quot;2025-08-25T10:48:26.png&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="2025-08-25T10:48:26.png" title="2025-08-25T10:48:26.png" srcset="https://substackcdn.com/image/fetch/$s_!J5N1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd50ce6-c00c-4c37-b492-be9de21f497c_1542x932.png 424w, https://substackcdn.com/image/fetch/$s_!J5N1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd50ce6-c00c-4c37-b492-be9de21f497c_1542x932.png 848w, https://substackcdn.com/image/fetch/$s_!J5N1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd50ce6-c00c-4c37-b492-be9de21f497c_1542x932.png 1272w, https://substackcdn.com/image/fetch/$s_!J5N1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd50ce6-c00c-4c37-b492-be9de21f497c_1542x932.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://0x0.ink/usr/uploads/2025/08/636926312.png">2025-08-25T10:48:26.png</a></p><h3><strong>2. Install Fastforge</strong></h3><p>You can refer to the installation tutorial in the previous article</p><blockquote><blockquote><p><a href="https://0x0.ink/archives/273.html">Build Flutter apps for HarmonyOS NEXT / OpenHarmony with Fastforge</a></p></blockquote></blockquote><h3><strong>3. Instructions for use</strong></h3><p>Expose the client id and client secret of the Connect API in your environment</p><pre><code><code>export APP_GALLERY_CLIENT_ID="your client id"
export APP_GALLERY_CLIENT_SECRET="your client secret"</code></code></pre><p>Then execute the following command in the project to upload it to the App Gallery; where is the app in the App Gallery <code>app-idAPP ID</code></p><pre><code><code>fastforge publish \
  --path dist/1.0.0+1/hello_world-1.0.0+1-ohos.app \
  --targets appgallery \
  --appgallery-app-id &lt;app-id&gt;</code></code></pre><blockquote><blockquote><p><code>--appgallery-app-id</code> Pass the parameters to the publisher. You can also configure the same in (see example below).<code>app-iddistribute_options.yamlapp-id</code></p></blockquote></blockquote><p>As mentioned above, you can actually build an app first and then upload it, you can refer to the following configuration to quickly build and upload it to the App Gallery.</p><pre><code><code>output: dist/
variables:
  FLUTTER_ROOT: ./.fvm/flutter_sdk # &#30001;&#20110;&#25105;&#39033;&#30446;&#20351;&#29992; FVM &#25176;&#31649; SDK
  APP_GALLERY_CLIENT_ID: 'your client id'
  APP_GALLERY_CLIENT_SECRET: 'your client secret'
releases:
  - name: ohos-release
    jobs:
      - name: release-ohos-app
        package:
          platform: ohos
          # &#24212;&#29992;&#24066;&#22330;&#20165;&#25903;&#25345; 'app' &#26684;&#24335;
          target: app
          build_args:
            # &#21487;&#36873;&#65292;&#40664;&#35748;&#20026; default, &#23545;&#24212; ohos &#20013;&#30340; product name
            flavor: release
        publish:
          target: appgallery
          args:
            # &#24212;&#29992;&#22312; AppGallery Connect &#19978;&#30340; APP ID
            app-id: 'your app id'</code></code></pre><h3><strong>4. Presentation</strong></h3><p>If you don&#8217;t have a global Dart/Flutter environment, temporarily use the DART from the FVM Flutter SDK in your project</p><pre><code><code>$env:PATH += ";$PWD\.fvm\flutter_sdk\bin" # Windows(powershell)
export PATH=$PATH:$PWD/.fvm/flutter_sdk/bin # Linux / macOS</code></code></pre><p>Suppose a configuration item named releases is configured in the Execution<code>distribute_options.yamlohos-release</code></p><pre><code><code>fastforge release --name ohos-release --skip-clean</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oYgs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc398ea30-44ac-4c1c-bca5-926d834f05cc_1235x1123.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oYgs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc398ea30-44ac-4c1c-bca5-926d834f05cc_1235x1123.png 424w, https://substackcdn.com/image/fetch/$s_!oYgs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc398ea30-44ac-4c1c-bca5-926d834f05cc_1235x1123.png 848w, https://substackcdn.com/image/fetch/$s_!oYgs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc398ea30-44ac-4c1c-bca5-926d834f05cc_1235x1123.png 1272w, https://substackcdn.com/image/fetch/$s_!oYgs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc398ea30-44ac-4c1c-bca5-926d834f05cc_1235x1123.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!oYgs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc398ea30-44ac-4c1c-bca5-926d834f05cc_1235x1123.png" width="1235" height="1123" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c398ea30-44ac-4c1c-bca5-926d834f05cc_1235x1123.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1123,&quot;width&quot;:1235,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;2025-08-25T11:46:18.png&quot;,&quot;title&quot;:&quot;2025-08-25T11:46:18.png&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="2025-08-25T11:46:18.png" title="2025-08-25T11:46:18.png" srcset="https://substackcdn.com/image/fetch/$s_!oYgs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc398ea30-44ac-4c1c-bca5-926d834f05cc_1235x1123.png 424w, https://substackcdn.com/image/fetch/$s_!oYgs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc398ea30-44ac-4c1c-bca5-926d834f05cc_1235x1123.png 848w, https://substackcdn.com/image/fetch/$s_!oYgs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc398ea30-44ac-4c1c-bca5-926d834f05cc_1235x1123.png 1272w, https://substackcdn.com/image/fetch/$s_!oYgs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc398ea30-44ac-4c1c-bca5-926d834f05cc_1235x1123.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://0x0.ink/usr/uploads/2025/08/777345267.png">2025-08-25T11:46:18.png</a></p><p>Open the App Gallery Connect platform and you will see that the app package has been uploaded</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X44D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F559376bc-78ec-4b28-b002-f0672af668c7_1397x227.png 424w, https://substackcdn.com/image/fetch/$s_!X44D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F559376bc-78ec-4b28-b002-f0672af668c7_1397x227.png 848w, https://substackcdn.com/image/fetch/$s_!X44D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F559376bc-78ec-4b28-b002-f0672af668c7_1397x227.png 1272w, https://substackcdn.com/image/fetch/$s_!X44D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F559376bc-78ec-4b28-b002-f0672af668c7_1397x227.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!X44D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F559376bc-78ec-4b28-b002-f0672af668c7_1397x227.png" width="1397" height="227" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/559376bc-78ec-4b28-b002-f0672af668c7_1397x227.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:227,&quot;width&quot;:1397,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;2025-08-25T11:47:33.png&quot;,&quot;title&quot;:&quot;2025-08-25T11:47:33.png&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="2025-08-25T11:47:33.png" title="2025-08-25T11:47:33.png" srcset="https://substackcdn.com/image/fetch/$s_!X44D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F559376bc-78ec-4b28-b002-f0672af668c7_1397x227.png 424w, https://substackcdn.com/image/fetch/$s_!X44D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F559376bc-78ec-4b28-b002-f0672af668c7_1397x227.png 848w, https://substackcdn.com/image/fetch/$s_!X44D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F559376bc-78ec-4b28-b002-f0672af668c7_1397x227.png 1272w, https://substackcdn.com/image/fetch/$s_!X44D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F559376bc-78ec-4b28-b002-f0672af668c7_1397x227.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div><figcaption class="image-caption"></figcaption></figure></div><p>Source: <a href="https://0x0.ink/archives/276.html">Use Fastforge to automatically build and publish OHOS Flutter Apps to App Gallery - Night Glass Stack</a></p>]]></content:encoded></item><item><title><![CDATA[Porting Gecko to OpenHarmony: A Mach-Based Approach ]]></title><description><![CDATA[OpenHarmony, with its unique architecture and public SDK, presents both challenges and opportunities for bringing Mozilla&#8217;s Gecko engine]]></description><link>https://www.harmony-developers.com/p/porting-gecko-to-openharmony-a-mach</link><guid isPermaLink="false">https://www.harmony-developers.com/p/porting-gecko-to-openharmony-a-mach</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Sat, 03 Oct 2026 17:53:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!GkVX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5ec801-d769-43f0-87c5-43135cd0e9cc_300x300.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GkVX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5ec801-d769-43f0-87c5-43135cd0e9cc_300x300.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GkVX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5ec801-d769-43f0-87c5-43135cd0e9cc_300x300.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GkVX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5ec801-d769-43f0-87c5-43135cd0e9cc_300x300.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GkVX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5ec801-d769-43f0-87c5-43135cd0e9cc_300x300.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GkVX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5ec801-d769-43f0-87c5-43135cd0e9cc_300x300.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GkVX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5ec801-d769-43f0-87c5-43135cd0e9cc_300x300.jpeg" width="300" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f5ec801-d769-43f0-87c5-43135cd0e9cc_300x300.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:300,&quot;width&quot;:300,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!GkVX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5ec801-d769-43f0-87c5-43135cd0e9cc_300x300.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GkVX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5ec801-d769-43f0-87c5-43135cd0e9cc_300x300.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GkVX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5ec801-d769-43f0-87c5-43135cd0e9cc_300x300.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GkVX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f5ec801-d769-43f0-87c5-43135cd0e9cc_300x300.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Porting a web engine to a new platform is a deep dive into the platform&#8217;s inner workings&#8212;application lifecycle, scheduling, event handling, sandboxing, graphics, and media stacks. OpenHarmony, with its unique architecture and public SDK, presents both challenges and opportunities for bringing Mozilla&#8217;s Gecko engine to the ecosystem. While <a href="https://medium.com/kodegood/webkit-for-openharmony-3b612c27b958">Jani Hautakangas&#8217; WebKit for OpenHarmony</a> used Cerbero and WPE, this guide focuses on leveraging Mozilla&#8217;s own build system, <code>mach</code>, for a Gecko port.</p><div><hr></div><h2><strong>Why Gecko on OpenHarmony?</strong></h2><p>OpenHarmony&#8217;s default WebView is Chromium-based and not easily buildable from the public SDK. A Gecko port would offer an alternative, open-source rendering engine for developers, enabling greater flexibility and alignment with Mozilla&#8217;s web standards. The goal: <strong>compile and run Gecko (e.g., </strong><code>libxul</code><strong>) on OpenHarmony using only the public SDK</strong>, targeting available development boards and the emulator.</p><div><hr></div><h2><strong>What Does It Take to Port Gecko?</strong></h2><p>Gecko is not a monolith. It relies on a chain of libraries (NSPR, NSS, ICU, etc.) and platform abstractions. Before integrating with OpenHarmony, you must:</p><ol><li><p><strong>Cross-compile Gecko&#8217;s dependencies</strong> for OpenHarmony&#8217;s toolchain.</p></li><li><p><strong>Patch the build system</strong> to recognize OpenHarmony as a target platform.</p></li><li><p><strong>Implement platform-specific abstractions</strong> (e.g., graphics, IPC, event loops).</p></li><li><p><strong>Integrate with OpenHarmony&#8217;s ArkTS runtime</strong> for application lifecycle and UI.</p></li></ol><p>Unlike WebKit&#8217;s WPE port, Gecko uses <code>mach</code> for build orchestration. This means adapting <code>mozconfig</code> and the build backend to use OpenHarmony&#8217;s LLVM/Clang toolchain, sysroot, and SDK.</p><div><hr></div><h2><strong>Building Gecko Dependencies</strong></h2><h3><strong>1. Toolchain Setup</strong></h3><p>OpenHarmony&#8217;s toolchain is LLVM/Clang-based, typically found at:</p><pre><code><code>Copy</code></code></pre><p><code>//prebuilts/clang/ohos/linux-x86_64/llvm/bin/clang</code></p><p>Ensure this is in your <code>PATH</code> or referenced in your build configuration. The OpenHarmony SDK provides the necessary headers, libraries, and sysroot for cross-compilation.</p><h3><strong>2. Patching Build Systems</strong></h3><p>Gecko&#8217;s dependencies (e.g., NSPR, NSS) use <strong>Autotools</strong> or <strong>CMake</strong>. You&#8217;ll need to:</p><ul><li><p>Patch <code>configure</code> scripts to recognize OpenHarmony as a platform.</p></li><li><p>Adjust compiler/linker flags for OpenHarmony&#8217;s sysroot and toolchain.</p></li><li><p>Ensure shared libraries are unversioned (OpenHarmony does not support versioned <code>.so</code> files).</p></li></ul><p>For example, a patch for NSPR&#8217;s <code>configure</code> might look like:</p><pre><code><code>diff</code></code></pre><p>Copy</p><p><code>--- a/configure<br>+++ b/configure<br>@@ -1234,6 +1234,9 @@ case "$target_os" in<br>;;<br>esac<br><br>+openharmony*)<br>+ OS_TARGET=OpenHarmony<br>+ ;;<br>*)<br>AC_MSG_ERROR([Unsupported target OS: $target_os])<br>;;</code></p><h3><strong>3. Cross-Compiling with </strong><code>mach</code></h3><p>Use a custom <code>mozconfig</code> to specify the target platform and toolchain. Example for ARM64:</p><pre><code><code>ini</code></code></pre><p>Copy</p><p><code># mozconfig for OpenHarmony (ARM64)<br>ac_add_options --target=aarch64-unknown-linux-ohos<br>ac_add_options --host=aarch64-unknown-linux-ohos<br>ac_add_options --with-ccache<br>ac_add_options --enable-application=libxul<br>ac_add_options --disable-tests<br>ac_add_options --disable-debug<br>ac_add_options --with-clang-path=/path/to/openharmony/prebuilts/clang/ohos/linux-x86_64/llvm/bin/clang<br>ac_add_options --with-sysroot=/path/to/openharmony/prebuilts/ndk/sysroot</code></p><p>Replace <code>/path/to/openharmony</code> with your SDK path.</p><p>Run the build:</p><pre><code><code>bash</code></code></pre><p>Copy</p><p><code>./mach build</code></p><div><hr></div><h2><strong>Platform Integration</strong></h2><h3><strong>1. Graphics and Buffer Sharing</strong></h3><p>Gecko&#8217;s WebRender or basic software rasterizer must integrate with OpenHarmony&#8217;s graphics stack. For GPU acceleration, you&#8217;ll need to share GPU buffers between processes. OpenHarmony uses <code>OH_NativeBuffer</code>, similar to Android&#8217;s <code>AHardwareBuffer</code>.</p><p><strong>Key Challenge</strong>: The public OpenHarmony SDK lacks APIs for sending <code>OH_NativeBuffer</code> handles over sockets. You may need to implement a custom solution (e.g., <code>native_buffer_socket</code>) to enable this, as done in the WebKit port.</p><h3><strong>2. Event Loop and ArkTS Integration</strong></h3><p>OpenHarmony applications run in the <strong>ArkTS runtime</strong>, which supports ArkTS, TypeScript, and JavaScript. To embed Gecko:</p><ul><li><p>Implement a <strong>platform-specific widget backend</strong> for Gecko, similar to Android&#8217;s <code>ANativeWindow</code> or GTK&#8217;s <code>GtkWidget</code>.</p></li><li><p>Create a <strong>glue layer</strong> to connect Gecko&#8217;s native side with ArkTS, handling events and lifecycle callbacks.</p></li></ul><p>For now, you might run Gecko on its own thread, but deeper integration with ArkTS&#8217;s event loop is ideal.</p><div><hr></div><h2><strong>Current Status and Next Steps</strong></h2><h3><strong>What Works</strong></h3><ul><li><p>Gecko dependencies cross-compile for OpenHarmony.</p></li><li><p>Minimal <code>libxul</code> builds and links.</p></li><li><p>Basic platform abstractions (e.g., logging, threading).</p></li></ul><h3><strong>What&#8217;s Missing</strong></h3><ul><li><p>GPU-accelerated rendering (<code>OH_NativeBuffer</code> sharing).</p></li><li><p>WebGL and media playback.</p></li><li><p>Full ArkTS integration (event loop, lifecycle).</p></li><li><p>Platform features (Bluetooth, Location, etc.).</p></li></ul><div><hr></div><h2><strong>Try It Yourself</strong></h2><p>The process is early-stage, but you can start experimenting:</p><ol><li><p>Set up the <a href="https://gitee.com/openharmony/docs">OpenHarmony SDK</a>.</p></li><li><p>Clone Gecko and apply the patches for OpenHarmony support.</p></li><li><p>Use the sample <code>mozconfig</code> above and run <code>./mach build</code>.</p></li></ol><p>For inspiration, see:</p><ul><li><p><a href="https://medium.com/kodegood/webkit-for-openharmony-3b612c27b958">WebKit for OpenHarmony</a></p></li><li><p><a href="https://book.servo.org/building/openharmony.html">Servo for OpenHarmony</a></p></li></ul><div><hr></div><h2><strong>Conclusion</strong></h2><p>Porting Gecko to OpenHarmony is a challenging but rewarding project. By leveraging <code>mach</code> and OpenHarmony&#8217;s public SDK, you can bring Mozilla&#8217;s engine to a new ecosystem&#8212;enabling open web standards and greater flexibility for developers. The groundwork laid by WebKit and Servo ports provides a roadmap, but Gecko&#8217;s unique architecture and build system require tailored solutions.</p><p><strong>Next Steps</strong>: Would you like a deeper dive into patching Gecko&#8217;s graphics backend for <code>OH_NativeBuffer</code>, or are you more interested in the ArkTS integration layer? Let&#8217;s build this together!</p>]]></content:encoded></item><item><title><![CDATA[OpenHarmony builds a new memory management optimization solution (24th July 2024) ]]></title><description><![CDATA[OpenHarmony has built a comprehensive memory solution&#8212;ESWAP.]]></description><link>https://www.harmony-developers.com/p/openharmony-builds-a-new-memory-management</link><guid isPermaLink="false">https://www.harmony-developers.com/p/openharmony-builds-a-new-memory-management</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Sat, 03 Oct 2026 17:51:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xpAV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f94d15-839b-468d-aef2-eecd5cff815c_1366x878.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xpAV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f94d15-839b-468d-aef2-eecd5cff815c_1366x878.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xpAV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f94d15-839b-468d-aef2-eecd5cff815c_1366x878.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xpAV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f94d15-839b-468d-aef2-eecd5cff815c_1366x878.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xpAV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f94d15-839b-468d-aef2-eecd5cff815c_1366x878.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xpAV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f94d15-839b-468d-aef2-eecd5cff815c_1366x878.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xpAV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f94d15-839b-468d-aef2-eecd5cff815c_1366x878.jpeg" width="1366" height="878" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a4f94d15-839b-468d-aef2-eecd5cff815c_1366x878.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:878,&quot;width&quot;:1366,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#1063;&#1090;&#1086; &#1090;&#1072;&#1082;&#1086;&#1077; OpenHarmony (OHOS) &#1080; &#1077;&#1075;&#1086; &#1089;&#1074;&#1103;&#1079;&#1100; &#1089; HarmonyOS&quot;,&quot;title&quot;:&quot;&#1063;&#1090;&#1086; &#1090;&#1072;&#1082;&#1086;&#1077; OpenHarmony (OHOS) &#1080; &#1077;&#1075;&#1086; &#1089;&#1074;&#1103;&#1079;&#1100; &#1089; HarmonyOS&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="&#1063;&#1090;&#1086; &#1090;&#1072;&#1082;&#1086;&#1077; OpenHarmony (OHOS) &#1080; &#1077;&#1075;&#1086; &#1089;&#1074;&#1103;&#1079;&#1100; &#1089; HarmonyOS" title="&#1063;&#1090;&#1086; &#1090;&#1072;&#1082;&#1086;&#1077; OpenHarmony (OHOS) &#1080; &#1077;&#1075;&#1086; &#1089;&#1074;&#1103;&#1079;&#1100; &#1089; HarmonyOS" srcset="https://substackcdn.com/image/fetch/$s_!xpAV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f94d15-839b-468d-aef2-eecd5cff815c_1366x878.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xpAV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f94d15-839b-468d-aef2-eecd5cff815c_1366x878.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xpAV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f94d15-839b-468d-aef2-eecd5cff815c_1366x878.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xpAV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f94d15-839b-468d-aef2-eecd5cff815c_1366x878.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>OpenHarmony is an operating system designed for all-scenario, general terminal devices, and the strength of device memory performance directly affects user experience. Memory varies greatly among terminal devices. For devices with relatively small memory, memory optimization solutions are undoubtedly key to enhancing memory performance and improving user experience. To address the shortcomings of traditional memory solutions and management mechanisms, OpenHarmony has built a comprehensive memory solution&#8212;ESWAP.</p><h2><strong>1. Traditional memory solutions and management mechanisms</strong></h2><p>In traditional Linux memory optimization solutions, terminal devices typically use SWAP and ZRAM memory solutions.</p><p><strong>1.1 SWAP</strong></p><p>SWAP stands for Memory Swap technology or virtual memory technology. As shown in Figure 1, when the system&#8217;s physical memory is insufficient, it frees up a portion of the unused memory space to increase the system&#8217;s available memory for the currently running program. This freed data is temporarily saved to the SWAP partition, and when needed, it is restored from the swap partition to memory.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WjVM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4054d7a1-93c6-438f-8364-215ff2ed55f3_730x232.webp 424w, https://substackcdn.com/image/fetch/$s_!WjVM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4054d7a1-93c6-438f-8364-215ff2ed55f3_730x232.webp 848w, https://substackcdn.com/image/fetch/$s_!WjVM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4054d7a1-93c6-438f-8364-215ff2ed55f3_730x232.webp 1272w, https://substackcdn.com/image/fetch/$s_!WjVM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4054d7a1-93c6-438f-8364-215ff2ed55f3_730x232.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WjVM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4054d7a1-93c6-438f-8364-215ff2ed55f3_730x232.webp" width="730" height="232" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4054d7a1-93c6-438f-8364-215ff2ed55f3_730x232.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:232,&quot;width&quot;:730,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!WjVM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4054d7a1-93c6-438f-8364-215ff2ed55f3_730x232.webp 424w, https://substackcdn.com/image/fetch/$s_!WjVM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4054d7a1-93c6-438f-8364-215ff2ed55f3_730x232.webp 848w, https://substackcdn.com/image/fetch/$s_!WjVM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4054d7a1-93c6-438f-8364-215ff2ed55f3_730x232.webp 1272w, https://substackcdn.com/image/fetch/$s_!WjVM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4054d7a1-93c6-438f-8364-215ff2ed55f3_730x232.webp 1456w" sizes="100vw"></picture><div></div></div></div></figure></div><p>From Figure 1, it is clear that SWAP memory swapping technology increases the device&#8217;s internal memory, but swapping in and out of SWAP memory encounters IO performance bottlenecks, which in severe cases can affect user experience, and frequent read/write of flash memory devices also shortens their lifespan.</p><p><strong>1.2 ZRAM</strong></p><p>ZRAM is a memory compression technology. As shown in Figure 2, when the system&#8217;s physical memory is insufficient, a portion of the system&#8217;s physical memory is partitioned as ZRAM, and unused anonymous pages are compressed and placed in the ZRAM partition. This essentially sacrifices some CPU efficiency to increase the system&#8217;s available memory for running programs. When needed, extract the data from the ZRAM partition.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JobY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a8a3faa-a935-4c3f-978c-d51789f0882d_673x343.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JobY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a8a3faa-a935-4c3f-978c-d51789f0882d_673x343.webp 424w, https://substackcdn.com/image/fetch/$s_!JobY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a8a3faa-a935-4c3f-978c-d51789f0882d_673x343.webp 848w, https://substackcdn.com/image/fetch/$s_!JobY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a8a3faa-a935-4c3f-978c-d51789f0882d_673x343.webp 1272w, https://substackcdn.com/image/fetch/$s_!JobY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a8a3faa-a935-4c3f-978c-d51789f0882d_673x343.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!JobY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a8a3faa-a935-4c3f-978c-d51789f0882d_673x343.webp" width="673" height="343" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a8a3faa-a935-4c3f-978c-d51789f0882d_673x343.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:343,&quot;width&quot;:673,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!JobY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a8a3faa-a935-4c3f-978c-d51789f0882d_673x343.webp 424w, https://substackcdn.com/image/fetch/$s_!JobY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a8a3faa-a935-4c3f-978c-d51789f0882d_673x343.webp 848w, https://substackcdn.com/image/fetch/$s_!JobY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a8a3faa-a935-4c3f-978c-d51789f0882d_673x343.webp 1272w, https://substackcdn.com/image/fetch/$s_!JobY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a8a3faa-a935-4c3f-978c-d51789f0882d_673x343.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Figure 2: ZRAM memory compression technology</p><p>Although ZRAM increases the device&#8217;s internal memory to some extent, without proper memory management, the negative impact can be very obvious, causing frequent compression/decompression of memory pages, which takes up CPU time during normal business and increases system power consumption. Moreover, if the compression/decompression speed is not fast enough, it will directly affect the user experience.</p><p><strong>1.3 Memory Management Mechanism</strong></p><p>In addition to insufficient memory solutions, traditional memory allocation and management methods fail to recognize business characteristics and the importance of data. If multiple processes or services on a terminal device share a single memory block, as memory load increases and memory data collection is performed, frequent data migration and memory oscillations occur. These phenomena increase the overhead of kernel memory management and cause the system CPU to remain under high load for extended periods, thereby increasing system power consumption.</p><h2><strong>2. OpenHarmony memory solution</strong></h2><p>To address the shortcomings of existing memory solutions, OpenHarmony has built a comprehensive memory solution called ESWAP, which connects the upper-layer system to the kernel call stack, allowing the kernel to manage each memory block rationally under the guidance of upper-layer configuration.</p><p>Below, we will introduce the ESWAP solution and analyze its key technologies.</p><p><strong>2.1 Introduction to the ESWAP Solution</strong></p><p><strong>ESWAP (Enhanced SWAP) is a comprehensive memory solution provided by OpenHarmony for memory optimization issues</strong>. It combines memory compression and memory swapping technologies, customizing a reasonable and efficient scheduling management strategy to make compression and swapping work efficient and balanced. ESWAP uses correlated data aggregation technology and upper-level guidance strategies to divide memory into different groups for management. By <strong>prioritizing recycling</strong>, it distinguishes memory activity levels under different groups, prioritizing compression and swapping out less active memory data to improve data exchange performance and reduce lifespan impact.</p><p>The overall framework of the ESWAP solution is shown in Figure 3:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cyt7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb92ae0e7-3d6f-4908-ad5f-bd789ae29834_663x724.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cyt7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb92ae0e7-3d6f-4908-ad5f-bd789ae29834_663x724.webp 424w, https://substackcdn.com/image/fetch/$s_!cyt7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb92ae0e7-3d6f-4908-ad5f-bd789ae29834_663x724.webp 848w, https://substackcdn.com/image/fetch/$s_!cyt7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb92ae0e7-3d6f-4908-ad5f-bd789ae29834_663x724.webp 1272w, https://substackcdn.com/image/fetch/$s_!cyt7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb92ae0e7-3d6f-4908-ad5f-bd789ae29834_663x724.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!cyt7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb92ae0e7-3d6f-4908-ad5f-bd789ae29834_663x724.webp" width="663" height="724" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b92ae0e7-3d6f-4908-ad5f-bd789ae29834_663x724.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:724,&quot;width&quot;:663,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!cyt7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb92ae0e7-3d6f-4908-ad5f-bd789ae29834_663x724.webp 424w, https://substackcdn.com/image/fetch/$s_!cyt7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb92ae0e7-3d6f-4908-ad5f-bd789ae29834_663x724.webp 848w, https://substackcdn.com/image/fetch/$s_!cyt7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb92ae0e7-3d6f-4908-ad5f-bd789ae29834_663x724.webp 1272w, https://substackcdn.com/image/fetch/$s_!cyt7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb92ae0e7-3d6f-4908-ad5f-bd789ae29834_663x724.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Figure 3: ESWAP solution</p><p>The ESWAP solution adds a system resource scheduling module to the global resource scheduling subsystem. By subscribing changes to local accounts to the account subsystem, it senses the current account status and memory status. Then, based on the account status, it sets different recycling priorities, target available memory amounts, and compression and swap-out ratios for each account, sending these parameters to ZSWAPD. ZSWAPD determines the order of recycling based on the retrieval priority; The amount to be recovered is determined based on the difference between the target available memory and the current available memory; The amount of compression and swapping out is determined based on the ratio of compression to swapping, thereby achieving a balance of performance and power consumption while achieving memory expansion.</p><p><strong>2.2 Key Technology Analysis</strong></p><p>What key technologies does ESWAP&#8217;s memory solution use? Let me explain them one by one for you.</p><p><strong>2.2.1 Customized ZRAM and Switching Partitions</strong></p><p>ESWAP combines memory compression and memory swapping technologies, providing the ability to customize new storage partitions as memory swap partitions. It also creates a resident process in the kernel called ZSWAPD, which encrypts anonymous pages compressed from ZRAM and swaps them into ESWAP storage partitions, thereby completely freeing up a usable memory block to maintain the Memavailable waterline, as shown in Figure 4.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eskR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeef3f3e-8d70-4fb2-80d3-aa566c6d5c4c_676x226.webp 424w, https://substackcdn.com/image/fetch/$s_!eskR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeef3f3e-8d70-4fb2-80d3-aa566c6d5c4c_676x226.webp 848w, https://substackcdn.com/image/fetch/$s_!eskR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeef3f3e-8d70-4fb2-80d3-aa566c6d5c4c_676x226.webp 1272w, https://substackcdn.com/image/fetch/$s_!eskR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeef3f3e-8d70-4fb2-80d3-aa566c6d5c4c_676x226.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!eskR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeef3f3e-8d70-4fb2-80d3-aa566c6d5c4c_676x226.webp" width="676" height="226" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eeef3f3e-8d70-4fb2-80d3-aa566c6d5c4c_676x226.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:226,&quot;width&quot;:676,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!eskR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeef3f3e-8d70-4fb2-80d3-aa566c6d5c4c_676x226.webp 424w, https://substackcdn.com/image/fetch/$s_!eskR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeef3f3e-8d70-4fb2-80d3-aa566c6d5c4c_676x226.webp 848w, https://substackcdn.com/image/fetch/$s_!eskR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeef3f3e-8d70-4fb2-80d3-aa566c6d5c4c_676x226.webp 1272w, https://substackcdn.com/image/fetch/$s_!eskR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeef3f3e-8d70-4fb2-80d3-aa566c6d5c4c_676x226.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>Figure 4: ESWAP technology</p><p>At the same time, the ESWAP module can record the hot and cold feature information of each anonymous page and store this data in correlation and hot and cold order, ensuring that anonymous pages stored continuously in the ESWAP exchange area have temporal and spatial locality. Therefore, when swapping anonymous pages, adjacent anonymous pages in the swap area can also be read into ZRAM to ensure data access speed and improve IO performance.</p><p><strong>2.2.2 Dynamic Memory Recycling Mechanism</strong></p><p>OpenHarmony provides an additional memory recycling mechanism called ZSWAPD and creates a &#8220;buffer&#8221; as an indicator to measure the current system&#8217;s memory capacity. A buffer refers to the maximum available memory that the current system can provide. ZSWAPD compresses anonymous pages based on the buffer amount and the various strategies described above to collect them. At the same time, ZSWAPD can dynamically balance ZRAM and ESWAP based on the rationality of memory hot and cold separation and memory recycling status, thereby achieving higher energy efficiency.</p><p><strong>2.2.3 Flexible memory recovery strategies</strong></p><p>OpenHarmony has enhanced its recycling strategy based on Memcg grouping, using recycling priorities to guide the order of ZSWAPD collections. The recycling strategy assigns the established buffer-related configuration to ZSWAPD to guide it in recovering the appropriate amount of memory. Additionally, since anonymous pages may be stored in RAM, ZRAM, and ESWAP modules, the upper layer can flexibly configure swap strategies as needed to control the storage ratio in these modules and avoid the negative impact of frequent swapping in and out.</p><p>That concludes the introduction to ESWAP&#8217;s three key technologies. Let&#8217;s summarize:</p><p>&#9679; Customized ZRAM and switching partitions: Data is stored in association and hot and cold sequential order, ensuring fast data access and improving IO performance.</p><p>&#9679; Dynamic memory recycling mechanism: Dynamically controls data collection from three dimensions: recycling priority, available memory volume, compression, and swap ratios to achieve higher energy efficiency.</p><p>&#9679; Flexible memory recycling strategy: Flexibly controls the data storage ratio of RAM, ZRAM, and ESWAP modules to ensure balance among modules.</p><p><strong>2.3 ESWAP-related interfaces</strong></p><p>The ESWAP solution allows system developers to customize their own recycling strategies and provides interfaces under /dev/memcg that are only visible to the upper-layer recycling policies. System developers can use these interfaces to customize their upper-level policies. The specific interfaces are as follows:</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2__O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa62a3a71-33ed-430c-8afd-c0fdd959691b_647x223.webp 424w, https://substackcdn.com/image/fetch/$s_!2__O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa62a3a71-33ed-430c-8afd-c0fdd959691b_647x223.webp 848w, https://substackcdn.com/image/fetch/$s_!2__O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa62a3a71-33ed-430c-8afd-c0fdd959691b_647x223.webp 1272w, https://substackcdn.com/image/fetch/$s_!2__O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa62a3a71-33ed-430c-8afd-c0fdd959691b_647x223.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!2__O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa62a3a71-33ed-430c-8afd-c0fdd959691b_647x223.webp" width="647" height="223" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a62a3a71-33ed-430c-8afd-c0fdd959691b_647x223.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:223,&quot;width&quot;:647,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!2__O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa62a3a71-33ed-430c-8afd-c0fdd959691b_647x223.webp 424w, https://substackcdn.com/image/fetch/$s_!2__O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa62a3a71-33ed-430c-8afd-c0fdd959691b_647x223.webp 848w, https://substackcdn.com/image/fetch/$s_!2__O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa62a3a71-33ed-430c-8afd-c0fdd959691b_647x223.webp 1272w, https://substackcdn.com/image/fetch/$s_!2__O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa62a3a71-33ed-430c-8afd-c0fdd959691b_647x223.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>That&#8217;s all for this article. The ESWAP solution is still under construction, and we look forward to developers joining us to witness the infinite possibilities of the all-scenario intelligent era together!</p><p>&#20316;&#32773;&#65306;&#30721;&#37327;&#19982;&#21457;&#37327;&#23545;&#31561;<br>&#38142;&#25509;&#65306;https://juejin.cn/post/7395018314564157491<br>&#26469;&#28304;&#65306;&#31232;&#22303;&#25496;&#37329;<br>&#33879;&#20316;&#26435;&#24402;&#20316;&#32773;&#25152;&#26377;&#12290;&#21830;&#19994;&#36716;&#36733;&#35831;&#32852;&#31995;&#20316;&#32773;&#33719;&#24471;&#25480;&#26435;&#65292;&#38750;&#21830;&#19994;&#36716;&#36733;&#35831;&#27880;&#26126;&#20986;&#22788;&#12290;</p><p>Original article: <a href="https://juejin.cn/post/7395018314564157491">OpenHarmony&#26500;&#24314;&#26032;&#30340;&#20869;&#23384;&#31649;&#29702;&#20248;&#21270;&#26041;&#26696;OpenHarmony&#26159;&#38754;&#21521;&#20840;&#22330;&#26223;&#27867;&#32456;&#31471;&#35774;&#22791;&#30340;&#25805;&#20316;&#31995;&#32479;&#65292;&#32456;&#31471;&#35774;&#22791;&#20869;&#23384;&#24615;&#33021;&#30340; - &#25496;&#37329;</a> (24th July 2024)</p>]]></content:encoded></item><item><title><![CDATA[OpenHarmony cross-platform framework ecology: 9 large warehouses full analysis ]]></title><description><![CDATA[FOSS OpenHarmony cross-platform ecology ushered in major breakthrough! From Kotlin to Flutter, from React Native to Electron, developers can migrate Android/iOS/Web to full-scenario devices at 0 cost]]></description><link>https://www.harmony-developers.com/p/openharmony-cross-platform-framework</link><guid isPermaLink="false">https://www.harmony-developers.com/p/openharmony-cross-platform-framework</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Sat, 03 Oct 2026 17:49:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9AuQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2df516f9-8259-4542-85b3-e33f2d228d02_900x420.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><blockquote><p>Open source Hongmeng cross-platform ecology ushered in a major breakthrough! From Kotlin to Flutter, from React Native to Electron, developers can migrate Android/iOS/Web to full-scenario devices at zero cost. This article will explain the core capabilities and application scenarios of each technology stack to help you quickly select and efficiently land.</p></blockquote></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9AuQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2df516f9-8259-4542-85b3-e33f2d228d02_900x420.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9AuQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2df516f9-8259-4542-85b3-e33f2d228d02_900x420.png 424w, https://substackcdn.com/image/fetch/$s_!9AuQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2df516f9-8259-4542-85b3-e33f2d228d02_900x420.png 848w, https://substackcdn.com/image/fetch/$s_!9AuQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2df516f9-8259-4542-85b3-e33f2d228d02_900x420.png 1272w, https://substackcdn.com/image/fetch/$s_!9AuQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2df516f9-8259-4542-85b3-e33f2d228d02_900x420.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9AuQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2df516f9-8259-4542-85b3-e33f2d228d02_900x420.png" width="900" height="420" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2df516f9-8259-4542-85b3-e33f2d228d02_900x420.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:420,&quot;width&quot;:900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!9AuQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2df516f9-8259-4542-85b3-e33f2d228d02_900x420.png 424w, https://substackcdn.com/image/fetch/$s_!9AuQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2df516f9-8259-4542-85b3-e33f2d228d02_900x420.png 848w, https://substackcdn.com/image/fetch/$s_!9AuQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2df516f9-8259-4542-85b3-e33f2d228d02_900x420.png 1272w, https://substackcdn.com/image/fetch/$s_!9AuQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2df516f9-8259-4542-85b3-e33f2d228d02_900x420.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>With the rapid maturity of the open source OpenHarmony ecosystem, cross-platform development has become a mainstream solution for multi-terminal deployment. The SIG group of open source Hongmeng cross-platform framework has completed the deep adaptation of KMP, Cordova, React Native, Flutter, Ionic, Chromium, Electron, Qt and other mainstream technology stacks, so that Android/iOS/Web/desktop applications can migrate to the full-scenario devices in Hongmeng.</p><p>Based on the official warehouse of atomgit, this article systematically combs through the 9 major cross-platform SIG core capabilities, applicable scenarios and technical highlights to help you quickly select and efficiently land Hongmeng applications.</p><h2><strong>KMP&#8208;CMP: Kotlin Multi-platform native base</strong></h2><p>Warehouse address: https://atomgit.com/CPF-KMP-CMP-CMP</p><p>Positioning: Kotlin Multiplatform Hongmeng native adaptation, the main shared business logic, native rendering</p><p>Core competencies</p><ul><li><p>Hongmeng KMP tool chain plug-in: support engineering creation, construction, operation, commissioning full link</p></li><li><p>Basic library matrix: kotlinx&#8208;crypto, SQLiter, sqldelight, Kermit, etc.</p></li><li><p>Lightweight DI:Koin Cross-Platform Dependency Injection</p></li></ul><p>Technical highlights</p><ul><li><p>Natural fusion with Hongmeng ArkUI, performance close to pure native</p></li><li><p>Once written, Android/iOS/Hung-Mongolian Tri-Terminated Shared Logic</p></li></ul><p>Suitable for scenarios: Android/Kotlin native team, financial/tools-type strong logic applications</p><h2><strong>Cordova: Web Hybrid Application Extremely Fast Migration</strong></h2><p>Warehouse address: https://atomgit.com/CPF-Cordova</p><p>Location: Apache Cordova official SIG, Web hybrid application zero-code migration scheme</p><p>Core competencies</p><ul><li><p>One-click generation of Hongmeng native APP, the original Android/iOS project to complete the migration in a few minutes</p></li><li><p>Full plug-in ecology: files, cameras, gyroscopes, batteries, navigation bar, scan code, positioning, etc.</p></li><li><p>Command-line tool hcordova: engineering management, compilation, and operation</p></li></ul><p>Technical highlights</p><ul><li><p>Fully compliant with official interfaces with no additional learning costs</p></li><li><p>Low/zero code migration for significant workforce savings</p></li></ul><p>Suitable for the scene: H5 mixed application, information display class, low threshold fast on-line project</p><h2><strong>OpenHarmony&#8208;RN: React Native High Performance Adaption</strong></h2><p>Warehouse address: https://atomgit.com/OpenHarmony-RN</p><p>Location: React Native Hongmeng system-level rendering backend, RN ecological integrity landing</p><p>Core competencies</p><ul><li><p>Full Fabric new architecture support, Hermes engine optimization</p></li><li><p>Deep integration ArkUI NDK, performance close to native</p></li><li><p>Version Matrix: 0.72 LTS / 0.77 LTS / 0.82 Stable / 0.84 Preview</p></li></ul><p>NPM package: @react&#8208;native&#8208;oh/react&#8208;native&#8208;harmony</p><p>Technical highlights</p><ul><li><p>Reuse RN Ecology and Development Habits</p></li><li><p>Dynamic capability, thermal update support</p></li></ul><p>Suitable for scenarios: React technology stack, strong demand for dynamic, e-commerce / social applications</p><h2><strong>OpenHarmony&#8208;Flutter: Eco-compatible self-drawn engine</strong></h2><p>Warehouse address: https://atomgit.com/OpenHarmony-flutter</p><p>Positioning: Flutter SDK/Engine official adaptation, Dart cross-end preferred</p><p>Core competencies</p><ul><li><p>Full Flutter engine port, self-drawn UI unfit loss</p></li><li><p>A large number of official plugins have been adapted: image_picker, camera, webview_flutter, shared_preferences, path_provider, etc. 30+</p></li><li><p>Multi-version support: 3.7 / 3.22 / 3.27 / 3.35/3.41</p></li></ul><p>Technical highlights</p><ul><li><p>Pure Dart library without modification, direct reuse</p></li><li><p>Consistent UI, high performance, cross-device fluency full</p></li></ul><p>For scenarios: Flutter team, strong interaction/animation/cross-device consistency applications</p><h2><strong>CPF&#8208;Ionic: Capacitor Cross-End Migration Exclusive</strong></h2><p>Warehouse address: https://atomgit.com/CPF-Ionic</p><p>Positioning: based on Cordova, focusing on Ionic + Capacitor</p><p>Core competencies</p><ul><li><p>Core framework: openHarmony-capacitor + capacitor-cli</p></li><li><p>Capacitor official plugins full coverage: app, camera, device, filesystem, geolocation, network, status&#8208;bar, etc.</p></li><li><p>Ionic Native plugins are suitable for: file, camera, clipboard, network, etc.</p></li></ul><p>Technical highlights</p><ul><li><p>Aligning the Capacitor interface for painless migration</p></li><li><p>For web front-end/hybrid application developers</p></li></ul><p>Suitable for scenarios: Ionic/Capacitor existing projects, PWA migration to Hongmeng</p><h2><strong>CPF&#8208;Chromium: Browser and Rendering Kernel Support</strong></h2><p>Warehouse address: https://atomgit.com/CPF-Chromium</p><p>Positioning: Hongmeng Platform Chromium Kernel and Graphics Rendering Infrastructure</p><p>Core projects</p><p>chromium, angle, dawn, skia, ffmpeg, webrtc, pdfium</p><p>Value</p><ul><li><p>Provides the underlying capabilities for WebView, browser, video, and Canvas rendering</p></li><li><p>Web/graphics/sound and video infrastructure supporting cross-platform frameworks</p></li></ul><p>Suitable for scenarios: browser, video player, graphics rendering, web engine secondary development</p><h2><strong>CPF&#8208;ApplicationTPC: A collection of general-purpose three-party libraries</strong></h2><p>Warehouse address: https://atomgit.com/CPF-ApplicationTPC</p><p>Positioning: Hongmeng general three-party library hosting, complementing tools/components/network/storage/media capabilities</p><p>Representative projects</p><ul><li><p>ohos_vlc: Media playback core library</p></li><li><p>ohos_ksoap2: SOAP Network Communication</p></li><li><p>ohos_logan: front-end log collection analysis</p></li><li><p>ohos_onnxruntime: A framework for machine learning inference</p></li><li><p>View animations, status bars, APNG renderings, calendar components, and more</p></li></ul><p>Value: quickly complement the common ecological components of Hongmeng, reduce the repeated wheel</p><p>Suitable for scenarios: all Hongmeng applications, fast integration of basic capabilities</p><h2><strong>CPF-Electron: Cross-Platform portal for desktop applications</strong></h2><p>Warehouse address: https://atomgit.com/CPF-Electron</p><p>Positioning: Electron Hongmeng desktop adaptation, Web technology stack development PC applications</p><p>Core Values</p><ul><li><p>Multiplex Web stack to build Hongmeng desktop native applications</p></li><li><p>Support for windows, menus, system trays, local files and other desktop capabilities</p></li></ul><p>Scenario: desktop tools, client software, existing Electron project migration</p><h2><strong>CPF&#8208;qt: C++ High Performance Desktop/Embedded Solutions</strong></h2><p>Warehouse address: https://atomgit.com/CPF-qt</p><p>Positioning: Qt official Hongmeng adaptation, C++ high-performance graphical interface framework</p><p>Core Values</p><ul><li><p>Mature stable, strong rendering, low latency, suitable for industrial/embedded/desktop</p></li><li><p>The longest cross-platform history and extremely perfect ecology</p></li></ul><p>Suitable for scenarios: industrial software, desktop tools, in-vehicle, embedded, high-performance graphics applications</p><h2><strong>Cross-Platform Framework Selection Quick Checker (2026 Latest)</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KS61!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f2e1f00-668d-4874-a855-812661b0f29c_1324x576.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KS61!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f2e1f00-668d-4874-a855-812661b0f29c_1324x576.png 424w, https://substackcdn.com/image/fetch/$s_!KS61!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f2e1f00-668d-4874-a855-812661b0f29c_1324x576.png 848w, https://substackcdn.com/image/fetch/$s_!KS61!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f2e1f00-668d-4874-a855-812661b0f29c_1324x576.png 1272w, https://substackcdn.com/image/fetch/$s_!KS61!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f2e1f00-668d-4874-a855-812661b0f29c_1324x576.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!KS61!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f2e1f00-668d-4874-a855-812661b0f29c_1324x576.png" width="1324" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8f2e1f00-668d-4874-a855-812661b0f29c_1324x576.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:1324,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!KS61!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f2e1f00-668d-4874-a855-812661b0f29c_1324x576.png 424w, https://substackcdn.com/image/fetch/$s_!KS61!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f2e1f00-668d-4874-a855-812661b0f29c_1324x576.png 848w, https://substackcdn.com/image/fetch/$s_!KS61!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f2e1f00-668d-4874-a855-812661b0f29c_1324x576.png 1272w, https://substackcdn.com/image/fetch/$s_!KS61!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f2e1f00-668d-4874-a855-812661b0f29c_1324x576.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Summary and recommendations</strong></h2><p>OpenHarmony Cross-Platform SIG has formed a full coverage, multi-technology stack, low-threshold migration system:</p><ul><li><p>Web Front End &#8594; Priority RN / Cordova / Ionic</p></li><li><p>Mobile Native &#8594; Priority KMP / Flutter</p></li><li><p>Desktop/Embedded &#8594; Priority Electron / Qt</p></li><li><p>Basic Capability Complements &#8594; Direct ApplicationTPC Tripartite Library</p></li></ul><p>All frameworks follow the open source specification, continue to iterate, and are the best path to the existing application.</p><p>Collaborate with global open source Eclipse Oniro project here:</p><p>https://oniroproject.org/</p><p><a href="https://www.woshipm.com/share/6399283.html">Original (CN) source</a></p>]]></content:encoded></item><item><title><![CDATA[Experiencing the Air series software on HarmonyOS devices: Krita and Audacity's Qt/KDE observations ]]></title><description><![CDATA[What deserves attention right now is not &#8220;a certain app has already started,&#8221; but the changes behind it - Liang Qi]]></description><link>https://www.harmony-developers.com/p/experiencing-the-air-series-software</link><guid isPermaLink="false">https://www.harmony-developers.com/p/experiencing-the-air-series-software</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Sat, 03 Oct 2026 17:40:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!UuZ8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0923e0f3-753a-4eec-8d86-9e8dc7fa7187_1066x600.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Recently, I saw an <strong>Air series</strong> software project on GitCode and found it quite interesting. This series mainly attempts to port some desktop open-source software to HarmonyOS.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UuZ8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0923e0f3-753a-4eec-8d86-9e8dc7fa7187_1066x600.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UuZ8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0923e0f3-753a-4eec-8d86-9e8dc7fa7187_1066x600.webp 424w, https://substackcdn.com/image/fetch/$s_!UuZ8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0923e0f3-753a-4eec-8d86-9e8dc7fa7187_1066x600.webp 848w, https://substackcdn.com/image/fetch/$s_!UuZ8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0923e0f3-753a-4eec-8d86-9e8dc7fa7187_1066x600.webp 1272w, https://substackcdn.com/image/fetch/$s_!UuZ8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0923e0f3-753a-4eec-8d86-9e8dc7fa7187_1066x600.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UuZ8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0923e0f3-753a-4eec-8d86-9e8dc7fa7187_1066x600.webp" width="1066" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0923e0f3-753a-4eec-8d86-9e8dc7fa7187_1066x600.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:1066,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;VEProf | Custom QT software development&quot;,&quot;title&quot;:&quot;VEProf | Custom QT software development&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="VEProf | Custom QT software development" title="VEProf | Custom QT software development" srcset="https://substackcdn.com/image/fetch/$s_!UuZ8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0923e0f3-753a-4eec-8d86-9e8dc7fa7187_1066x600.webp 424w, https://substackcdn.com/image/fetch/$s_!UuZ8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0923e0f3-753a-4eec-8d86-9e8dc7fa7187_1066x600.webp 848w, https://substackcdn.com/image/fetch/$s_!UuZ8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0923e0f3-753a-4eec-8d86-9e8dc7fa7187_1066x600.webp 1272w, https://substackcdn.com/image/fetch/$s_!UuZ8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0923e0f3-753a-4eec-8d86-9e8dc7fa7187_1066x600.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Project Warehouse:</p><ul><li><p><a href="https://gitcode.com/Andy88/">Air series software</a></p></li><li><p><a href="https://gitcode.com/Andy88/Harmony-krita">Harmony-krita / AirDraw</a></p></li><li><p><a href="https://gitcode.com/Andy88/Harmony-Audacity">Harmony-Audacity / AirAudio</a></p></li></ul><p>I personally pay close attention to the <strong>porting of Qt/KDE apps to HarmonyOS</strong>, so this time I mainly tried Krita and Audacity.</p><h2><strong>My testing equipment</strong></h2><p>Currently, two devices are used for testing:</p><ul><li><p><strong>Huawei MateBook Pro&#65288;2-in-1 / PC&#65289;</strong></p></li><li><p><strong>Huawei MatePad Pro Max&#65288;Tablet&#65289;</strong></p></li></ul><p>These two devices represent typical PC and tablet usage scenarios and are also suitable for observing the actual experience of desktop applications on HarmonyOS.</p><div><hr></div><h2><strong>Harmony-krita / AirDraw</strong></h2><p>Harmony-Krita was completed relatively early, around <strong>mid-August</strong>.</p><p>In actual use, I have basically encountered no obvious problems for about two consecutive weeks. What impressed me most was that <strong>both the fingers and stylus could draw normally</strong>, making the overall user experience quite complete.</p><p>Judging from the code and project structure, this version should be based on <strong>Qt 5&#8217;s Krita</strong>.</p><h3><strong>KDE ECM handling methods</strong></h3><p>Krita itself is a large application within the KDE ecosystem, so a key issue to watch when porting Krita is:</p><blockquote><blockquote><p><em><strong>How is KDE Extra CMake Modules (ECM) handled?</strong></em></p></blockquote></blockquote><p>Upstream ECM:</p><p><a href="https://github.com/KDE/extra-cmake-modules">https://github.com/KDE/extra-cmake-modules</a></p><p>So far, I haven&#8217;t found a clear ECM approach in Harmony-krita.</p><p>Currently, the Harmony-krita repository has only two commits:</p><ol><li><p>The first commit: the main code, imported content, and modifications are basically concentrated here.</p></li><li><p>Second commit: mainly modifying the README.</p></li></ol><p>In other words, the core porting work is basically all placed in the first commit.</p><p>This approach is relatively straightforward for quickly completing a single port, but from the perspective of subsequent maintenance and upstream review, it is harder to trace the history.</p><h3><strong>I refreshed the submission history</strong></h3><p>So, I compared Krita&#8217;s upstream warehouse:</p><p><a href="https://invent.kde.org/graphics/krita">https://invent.kde.org/graphics/krita</a></p><p>Then I reorganized the Harmony-Krita submission history, hoping to to:</p><ul><li><p>Upstream code</p></li><li><p>HarmonyOS related modifications</p></li><li><p>Build related modifications</p></li></ul><p>The relationship between them becomes clearer.</p><p>The new submission history is located at:</p><p><a href="https://github.com/liangqi/krita/commits/Harmony-krita/">https://github.com/liangqi/krita/commits/Harmony-krita/</a></p><p>Currently, I haven&#8217;t finished local compilation for this version, and further verification is needed.</p><p>However, from a code organization perspective, this approach should be more conducive to subsequent analysis and maintenance, and is closer to the upstream + patch development model commonly used in open source projects.</p><div><hr></div><h1><strong>Harmony-Audacity / AirAudio</strong></h1><p>Harmony-Audacity was completed around August <strong>25</strong>.</p><p>I conducted actual tests on the equipment, and the overall situation was a bit more advanced than simply &#8220;being able to start.&#8221;</p><h3><strong>The first launch question</strong></h3><p>The first time you open the app, there is no prompt prompt immediately asking &#8220;Do you want to allow the app to use the microphone?&#8221;</p><p>At the same time, the app also feels somewhat stuttering.</p><p>At that time, the application appeared to have not been fully initialized.</p><p>My approach is:</p><ol><li><p>End the application process;</p></li><li><p>Restart;</p></li><li><p>This time, a microphone permission request appeared;</p></li><li><p>After allowing microphone permissions, recording and playback functions can work properly.</p></li></ol><p>So at present, it <strong>seems there may still be some issues with permission initialization during the first startup</strong>.</p><h3><strong>Tablet mode</strong></h3><p>There is still a relatively obvious problem with tablet devices:</p><blockquote><blockquote><p><em><strong>The app cannot be fullscreen.</strong></em></p></blockquote></blockquote><p>For desktop apps like Audacity, the window size and display on tablets are still areas worth further optimization.</p><div><hr></div><h1><strong>The technology stack behind Audacity</strong></h1><p>From the code perspective, Audacity involves many professional third-party libraries in the audio field.</p><p>Among these, the following are particularly noteworthy:</p><ul><li><p><strong>PortAudio</strong></p></li><li><p>and other audio processing dependencies</p></li></ul><p>This makes me feel that HarmonyOS&#8217;s support for desktop software is no longer just a simple GUI porting issue.</p><p>For an application to truly run, it actually means the following infrastructure must gradually be established:</p><p><strong>Desktop Applications</strong></p><p><strong>&#9474;</strong></p><p><strong>&#9500;&#9472;&#9472; GUI Framework</strong></p><p><strong>&#9474; &#9492;&#9472;&#9472; wxWidgets / Qt</strong></p><p><strong>&#9474;</strong></p><p><strong>&#9500;&#9472;&#9472; Audio Framework</strong></p><p><strong>&#9474; &#9492;&#9472;&#9472; PortAudio</strong></p><p><strong>&#9474;</strong></p><p><strong>&#9500;&#9472;&#9472; Codec / DSP Libraries</strong></p><p><strong>&#9474;</strong></p><p><strong>&#9500;&#9472;&#9472; File / Thread / Network</strong></p><p><strong>&#9474;</strong></p><p><strong>&#9492;&#9472;&#9472; HarmonyOS Platform</strong></p><p>Especially for low-level libraries like PortAudio, if they can already work properly on HarmonyOS, it will be very valuable for future porting of more professional desktop software.</p><p>Additionally, <strong>Audacity 3.7.8 uses wxWidgets</strong>.</p><p>This itself is a very interesting signal:</p><blockquote><blockquote><p><em>If Audacity can basically run on HarmonyOS, it means that the wxWidgets layer is already somewhat feasible on HarmonyOS.</em></p></blockquote></blockquote><p>Therefore, in the future, it may not only be Qt/KDE applications; other traditional Linux/Windows desktop application frameworks may also have opportunities to gradually enter HarmonyOS.</p><div><hr></div><h1><strong>Looking at the code repository, Audacity goes a step further than Krita</strong></h1><p>If you look purely at &#8220;whether the app can run,&#8221; both Krita and Audacity have made good progress.</p><p>But from <strong>the perspective of the code repository itself</strong>, I think Harmony-Audacity has made clear progress over Harmony-krita.</p><p>Harmony-Audacity has recorded the following content more comprehensively:</p><ul><li><p>Upstream code sources</p></li><li><p>HarmonyOS patch</p></li><li><p>Build the script</p></li><li><p>The construction process</p></li><li><p>Third-party dependency</p></li></ul><p>In other words, it&#8217;s not just about &#8220;compiling the software,&#8221; but starting to record step by step:</p><blockquote><blockquote><p><em><strong>How this software is built from upstream source into a HarmonyOS application.</strong></em></p></blockquote></blockquote><p>This is very important for subsequent maintenance.</p><p>Especially for third-party libraries, a fairly unified approach has now emerged.</p><p>This could become a very important step in the future migration of HarmonyOS desktop software.</p><div><hr></div><h1><strong>From Krita to Audacity, a change can be observed</strong></h1><p>Looking at these two projects together, you can actually spot an interesting trend.</p><p><strong>Harmony-Krita</strong> is more like an early quick port:</p><p><strong>&#19978;&#28216;&#20195;&#30721;</strong></p><p><strong>&#8595;</strong></p><p><strong>&#24341;&#20837; HarmonyOS &#20462;&#25913;</strong></p><p><strong>&#8595;</strong></p><p><strong>&#23436;&#25104;&#26500;&#24314;&#21644;&#36816;&#34892;</strong></p><p>Meanwhile<strong>, Harmony-Audacity</strong> began to pay more attention:</p><p><strong>Upstream</strong></p><p><strong>&#9474;</strong></p><p><strong>&#9500;&#9472;&#9472; Source</strong></p><p><strong>&#9474;</strong></p><p><strong>&#9500;&#9472;&#9472; Patch</strong></p><p><strong>&#9474;</strong></p><p><strong>&#9500;&#9472;&#9472; Build Script</strong></p><p><strong>&#9474;</strong></p><p><strong>&#9492;&#9472;&#9472; Third-party Dependencies</strong></p><p><strong>&#9474;</strong></p><p><strong>&#8595;</strong></p><p><strong>HarmonyOS Build</strong></p><p>This means the project focus is shifting from:</p><blockquote><blockquote><p><em><strong>&#8220;Can I run?&#8221;</strong></em></p></blockquote></blockquote><p>Gradually shifting to:</p><blockquote><blockquote><p><em><strong>&#8220;How to Maintain and Build Properly&#8221;</strong></em></p></blockquote></blockquote><p>For large desktop open-source software, the latter is actually even more important.</p><p>Because the real difficulty is often not getting the program running for the first time, but rather the following:</p><ul><li><p>How to track upstream;</p></li><li><p>How to maintain the HarmonyOS patch;</p></li><li><p>How to resolve third-party dependencies;</p></li><li><p>How to make the build process repeatable;</p></li><li><p>How to continuously synchronize with new versions;</p></li><li><p>How to ultimately contribute changes back to the upstream.</p></li></ul><div><hr></div><h1><strong>I&#8217;m quite looking forward to the next step</strong></h1><p>From my own interests, what I should continue to focus on is the ecosystem <strong>issue of Qt/KDE applications on HarmonyOS</strong>.</p><p>For example, Krita is just one example.</p><p>If Qt, KDE Frameworks, ECM, and common third-party libraries gradually establish stable HarmonyOS support, then theoretically, more KDE/Qt desktop applications may enter HarmonyOS in the future.</p><p>Projects like Audacity offer another path:</p><blockquote><blockquote><p><em><strong>Besides Qt, traditional desktop application frameworks + third-party libraries in specialized fields are also starting to be portable.</strong></em></p></blockquote></blockquote><p>If these two paths continue to develop, the open-source desktop application ecosystem on HarmonyOS will be more meaningful than simply porting a few GUI applications.</p><div><hr></div><h1><strong>Summary</strong></h1><p>This time, I mainly experienced two activities:</p><p><strong>ProjectSoftwareApproximate completion timeMain frameworkCurrent experience</strong>Harmony-kritaKrita / AirDrawMid-AugustQt 5 / KDEFinger and stylus drawing is basically normalHarmony-AudacityAudacity / AirAudioAround August 25wxWidgetsRecording and playback are basically usable</p><p>Personally, I think what deserves attention right now is not &#8220;a certain app has already started,&#8221; but the changes behind it:</p><p><strong>Porting open-source desktop software on HarmonyOS is gradually evolving from one-time code modifications to a systematic approach of upstreams, patches, build scripts, and third-party dependency management.</strong></p><p>Especially as third-party libraries begin to adopt unified processing approaches, this may become an important foundation for large-scale migration of Qt, KDE, and other desktop applications in the future.</p><p>For me, this was also the most interesting part of this test.</p><div><hr></div><h2><strong>Related links</strong></h2><ul><li><p><a href="https://gitcode.com/Andy88/">Air series software</a></p></li><li><p><a href="https://gitcode.com/Andy88/Harmony-krita">Harmony-krita / AirDraw</a></p></li><li><p><a href="https://gitcode.com/Andy88/Harmony-Audacity">Harmony-Audacity / AirAudio</a></p></li><li><p><a href="https://invent.kde.org/graphics/krita">Krita upstream</a></p></li><li><p><a href="https://github.com/KDE/extra-cmake-modules">KDE Extra CMake Modules</a></p></li><li><p><a href="https://github.com/liangqi/krita/commits/Harmony-krita/">Refreshed Krita Harmony-Krita branch</a></p></li></ul><p>Credit: <a href="https://qihome.org/qiliang/2026/09/05/experiencing-air-series-software-on-harmonyos-devices-qt-kde-observations-on-krita-and-audacity/">Experience the Air series software on HarmonyOS devices: Krita and Audacity&#8217;s Qt/KDE observations | Enjoy Life! &#8211; Liang Qi</a></p>]]></content:encoded></item><item><title><![CDATA[Heavy open source! Harmonybrew Officially Launched: Bringing Mature Homebrew Ecology to OpenHarmony ]]></title><description><![CDATA[HarmonyOS developers can take advantage of Harmonybrew to unlock the power of OpenHarmony flexibility and freedoms!]]></description><link>https://www.harmony-developers.com/p/heavy-open-source-harmonybrew-officially</link><guid isPermaLink="false">https://www.harmony-developers.com/p/heavy-open-source-harmonybrew-officially</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Sat, 03 Oct 2026 17:37:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jRGs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffe524d-899a-4366-93da-e34765ceb850_900x400.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><blockquote><p>OpenHarmony ecology ushered in a heavy weapon! Harmonybrew, as an open source package manager, is the perfect port for Homebrew mature system, providing out-of-the-box command line solutions for all-scenario devices in HarmonyOS. It not only retains the native operation logic to reduce learning costs, but also achieves 60% Homebrew formula is directly compatible, and completely solves the pain point of ecological incompleteness of domestic tools. This article explains in detail its installation and configuration process and technical advantages, and reveals how to make up for the development of the short board through the power of open source.</p></blockquote></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jRGs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffe524d-899a-4366-93da-e34765ceb850_900x400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jRGs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffe524d-899a-4366-93da-e34765ceb850_900x400.png 424w, https://substackcdn.com/image/fetch/$s_!jRGs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffe524d-899a-4366-93da-e34765ceb850_900x400.png 848w, https://substackcdn.com/image/fetch/$s_!jRGs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffe524d-899a-4366-93da-e34765ceb850_900x400.png 1272w, https://substackcdn.com/image/fetch/$s_!jRGs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffe524d-899a-4366-93da-e34765ceb850_900x400.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jRGs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffe524d-899a-4366-93da-e34765ceb850_900x400.png" width="900" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ffe524d-899a-4366-93da-e34765ceb850_900x400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!jRGs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffe524d-899a-4366-93da-e34765ceb850_900x400.png 424w, https://substackcdn.com/image/fetch/$s_!jRGs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffe524d-899a-4366-93da-e34765ceb850_900x400.png 848w, https://substackcdn.com/image/fetch/$s_!jRGs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffe524d-899a-4366-93da-e34765ceb850_900x400.png 1272w, https://substackcdn.com/image/fetch/$s_!jRGs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffe524d-899a-4366-93da-e34765ceb850_900x400.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>I. Preface</strong></h2><p>After a year of polishing, the Harmonybrew open source project is officially launched!</p><p>Harmonybrew is a Homebrew port for the OpenHarmony platform, designed to provide out-of-the-box, simple and efficient package manager and supporting software repositories for all-scenario devices in Hongmeng. The project is fully adapted to the HarmonyOS PC, OpenHarmony development board, HarmonyOS/OpenHarmony container and other HarmonyOS/OpenHarmony device forms, complementing the core shortcomings of the OpenHarmony command-line ecology.</p><p>Open source community address: https://atomgit.com/Harmonybrew</p><h2><strong>Second, the quick start tutorial (Hongmeng PC HiShell environment)</strong></h2><p>This article takes the HarmonyOS PC HiShell environment as an example, organizes the complete installation and configuration process, and the steps are simple and the whole process is deployed one-click.</p><h3><strong>2.1 Uninstalling conflict software</strong></h3><p>If the two software GitNext and DevBox are installed on the device, they need to be uninstalled in advance to avoid environmental conflicts and cause installation failure.</p><h3><strong>2.2 Open system security and developer privileges</strong></h3><p>To ensure the normal installation and operation of Harmonybrew, two system permissions need to be opened:</p><ol><li><p>Open the developer option: Settings &#8594; System &#8594; Developer Options, turn on the developer switch;</p></li><li><p>Allow non-app market expansion: Set up &#8594; Privacy and Security &#8594; Advanced, open &#8220;Run extensions from non-app markets.&#8221;</p></li></ol><h3><strong>2.3 One-click installation of Harmonybrew</strong></h3><p>Open the terminal and execute the following official installation commands to automatically complete the full set of deployments:</p><blockquote><blockquote><p>zsh -c &#8220;$(curl -fsSL https://harmonybrew.atomgit.com/install.sh)&#8221;</p></blockquote></blockquote><h3><strong>2.4 Configuring environment variables</strong></h3><p>After the installation is complete, follow the script prompt to execute the following command to write the brew tool to the system environment variable, which takes effect globally:</p><p>echo &gt;&gt; ~/.zshrc</p><p>After the configuration is complete, you can use the full set of brew commands directly at any terminal to manage the package normally.</p><h2><strong>III. Core characteristics of the project</strong></h2><h3><strong>3.1 Refuse ineffective self-research and reuse the mature ecology of the industry</strong></h3><p>In the early days of the project, we abandoned the ineffective development idea of &#8220;self-research for self-research&#8221;, not repeated the wheel, but directly ported the industry&#8217;s most mature and widely used Homebrew package manager system.</p><p>For a long time, many domestic tools have problems such as poor logic, ecological disability, and poor adaptability, which has greatly improved the threshold for developers to use. Harmonybrew perfectly retains the operation logic of the native Homebrew, and developers do not need to learn new instructions and follow the original usage habits to effectively manage packages on the HarmonyOS device.</p><p>The ecological advantages are even more prominent: the project is directly compatible with most Homebrew software recipes, and more than 60% of the Homebrew formula can be compiled, tested and run directly on the Harmonybrew pipeline, without the need to adapt to the HarmonyOS platform separately, and the OpenHarmony command-line software ecosystem is expanded at a speed.</p><h3><strong>3.2 Deeply plowing open source OpenHarmony, full equipment form adaptation</strong></h3><p>Unlike most of the HarmonyOS commercial-focused HarmonyOS tool projects, Harmonybrew has made it the highest priority adaptation platform for Tier 1 with OpenHarmony as the core.</p><p>The design of the architecture allows the project to completely break away from the hardware manufacturer binding, not only to adapt to the HarmonyOS PC, but also to fully compatible with the OpenHarmony development board (dayu200 rk3568), Hongmeng container (DockerHarmony) and other device forms. Among them, the development board and container environment are the highest level of support, the system restrictions are small, the compatibility is optimal.</p><p>Developers can use the open environment such as development boards and containers to complete the development, debugging, and problem investigation work, greatly reducing the threshold of hardware adaptation, and improving the development and troubleshooting efficiency.</p><p>Additional Notes: HarmonyOS, as an OpenHarmony commercial distribution, is compatible with this project, but due to system security policy restrictions, the functions of the HarmonyOS PC HiShell environment are slightly limited, which is a system-native restriction and non-project adaptation problems.</p><h3><strong>3.3 Massive software packages, continuous high-speed iterative updates</strong></h3><p>At present, the Harmonybrew software warehouse has included 2000+ commonly used software packages, and continues to add and update at hundreds of daily speeds, covering the development, compilation, operation and maintenance, debugging and other full-scenario requirements.</p><p>Developers can view the list of all packages through the brew formulae command, the core categories are as follows:</p><p>&#9989; Compiler/interpreter</p><p>ohos-sdk, Node.js (22/24/26), OpenJDK (17/21/25), Python (3.12/3.13/3.14), Go, Rust, Perl, Ruby</p><p>&#9989; Build tools</p><p>Make, CMake, Ninja, Meson, m4, autotools (autoconf, automake, libtool)</p><p>&#9989; Database services</p><p>PostgreSQL, MariaDB, Redis</p><p>GNU Basic Toolset</p><p>Coreutils, Diffutils, Grep, Gawk, Gnu-tar, Gzip</p><p>&#9989; Commonly used development tools</p><p>Git, Strace, Patchelf, Vim, JQ3.4 are not only tools, but also the learning ground for Hongmeng developers</p><p>Harmonybrew is worth much more than a set of package managers.</p><p>All scripts, documents, and adaptation cases in the open source community of the project are written in accordance with the OpenHarmony live-action teaching standards, which not only serves the package management function, but also serves as a free learning material for new developers to get started with Hongmeng Ecology and enhance practical ability.</p><p>All technology precipitation, adaptation experience, and pneumatic solutions are all open source, helping more developers to quickly integrate into the OpenHarmony open source ecosystem and reduce the learning and practice threshold of HarmonyOS development.</p><h2><strong>Commonly used core commands</strong></h2><p>Follow the native Homebrew simple instructions, hands zero cost:</p><p># Install the Homebrew Edition</p><h2><strong>5, written at the end.</strong></h2><p>Harmonybrew has always adhered to the concept of pragmatic open source, reuse mature ecology, service developer, refused to formalize self-research, and focused on filling the command line ecological shortcomings for OpenHarmony.</p><p>In the future, the project will continue to expand the number of software packages, optimize the compatibility of the whole device, and improve the open source documents and cases to provide HarmonyOS developers with a more efficient and worry-free development experience. Welcome to the developer experience, Star, Fork, participate in the co-construction, and improve the OpenHarmony open source ecosystem together!</p><p>Open source: <a href="https://github.com/HarmonybrewGlobal">https://github.com/HarmonybrewGlobal</a></p><p>Reference: <a href="https://blog.csdn.net/hqzing/article/details/161371004">https://blog.csdn.net/hqzing/article/details/161371004</a></p><p>This article by everyone is the product manager author [nutpi], WeChat public number: [nutpi], original / authorized published to everyone is a product manager, without permission, prohibited from reprinting.</p><p>The diagram is from Unsplash, based on the CC0 protocol.</p><p>Source: <a href="https://www.woshipm.com/share/6402426.html">https://www.woshipm.com/share/6402426.html</a></p>]]></content:encoded></item><item><title><![CDATA[Unlocking Headless Software on HarmonyOS computers: The Harmonybrew Breakthrough ]]></title><description><![CDATA[Headless software refers to utilities, daemons, and application binaries that run entirely in the background without a Graphical User Interface (GUI)]]></description><link>https://www.harmony-developers.com/p/unlocking-headless-software-on-harmonyos</link><guid isPermaLink="false">https://www.harmony-developers.com/p/unlocking-headless-software-on-harmonyos</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Sat, 03 Oct 2026 17:35:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4X9J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba4c391-6dfd-4d83-a0ea-b51d723179f5_1200x632.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4X9J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba4c391-6dfd-4d83-a0ea-b51d723179f5_1200x632.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4X9J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba4c391-6dfd-4d83-a0ea-b51d723179f5_1200x632.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4X9J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba4c391-6dfd-4d83-a0ea-b51d723179f5_1200x632.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4X9J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba4c391-6dfd-4d83-a0ea-b51d723179f5_1200x632.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4X9J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba4c391-6dfd-4d83-a0ea-b51d723179f5_1200x632.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4X9J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba4c391-6dfd-4d83-a0ea-b51d723179f5_1200x632.jpeg" width="1200" height="632" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dba4c391-6dfd-4d83-a0ea-b51d723179f5_1200x632.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:632,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60877,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/200761789?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba4c391-6dfd-4d83-a0ea-b51d723179f5_1200x632.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!4X9J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba4c391-6dfd-4d83-a0ea-b51d723179f5_1200x632.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4X9J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba4c391-6dfd-4d83-a0ea-b51d723179f5_1200x632.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4X9J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba4c391-6dfd-4d83-a0ea-b51d723179f5_1200x632.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4X9J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdba4c391-6dfd-4d83-a0ea-b51d723179f5_1200x632.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Developing on <strong><a href="https://en.wikipedia.org/wiki/HarmonyOS">HarmonyOS</a></strong> or <strong><a href="https://openharmonyos.org/">OpenHarmony</a></strong> has historically forced a massive compromise. While the system&#8217;s native <strong>HongMeng Kernel</strong> provides slick execution for front-end apps, the command-line ecosystem lacked a unified way to handle backend software. Installing developer essentials, text editors, or database engines often required messy, manual toolchain setups.</p><p>That bottleneck is officially gone. <strong>Harmonybrew</strong> has launched as an open-source, 3rd-party port of macOS&#8217;s iconic <strong>Homebrew</strong> package manager. It is built specifically to download, manage, and execute <strong>headless software</strong> on HarmonyOS hardware.</p><div><hr></div><p><strong>What is Headless Software, and Why Do We Need It?</strong></p><p><strong>Headless software</strong> refers to utilities, daemons, and application binaries that run entirely in the background without a Graphical User Interface (GUI). In a standard developer ecosystem, you use these tools constantly:</p><ul><li><p><strong>Background Security Engines</strong>: Tools like <code>openssl</code> for handling encrypted handshakes.</p></li><li><p><strong>Command Line Text Editors</strong>: Lightweight text environments like <code>nano</code> or <code>vim</code> for editing configurations.</p></li><li><p><strong>Database Cores</strong>: Micro-instances of SQL storage engines like <code>sqlite</code>.</p></li></ul><p>Because HarmonyOS lacks a traditional terminal-based software store, installing these packages meant manually compiling raw source code against Huawei&#8217;s toolchains. Harmonybrew strips that friction away entirely.</p><div><hr></div><p><strong>Enter Harmonybrew: Homebrew, Reimagined</strong></p><p><strong><a href="https://livinginharmony.substack.com/p/heavy-open-source-harmonybrew-officially">Harmonybrew</a></strong> clones the workflow of Homebrew. It handles dependency resolution, downloads source packages, and compiles them so they run natively on the HarmonyOS architecture.</p><ul><li><p><strong>60% Native Formula Compatibility</strong>: Harmonybrew is built to naturally adapt existing Homebrew scripts, making it immediately compatible with a massive library of developer dependencies.</p></li><li><p><strong>2,000+ Available Packages</strong>: The centralized repository already includes thousands of headless developer utilities, operational scripts, and compilation tools.</p></li><li><p><strong>Cross-Device Agnostic</strong>: It works uniformly whether you are targeting a HarmonyOS PC environment, an open-source development board, or a sandbox container system.</p></li></ul><div><hr></div><p><strong>Step-by-Step: Setting Up Your Headless Environment</strong></p><p>Ready to start deploying headless tools via your terminal? Follow this quick-start pipeline:</p><p><strong>1. Clear Conflicting Systems</strong></p><p>If your device is running early emulation packages like <code>GitNext</code> or <code>DevBox</code>, uninstall them to avoid environmental path overlap and installation errors.</p><p><strong>2. Elevate System Permissions</strong></p><p>To allow Harmonybrew to provision system binaries, unlock the local kernel permissions:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gowe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc121de27-7050-4fdd-a2ba-83c94281e908_1024x768.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gowe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc121de27-7050-4fdd-a2ba-83c94281e908_1024x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gowe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc121de27-7050-4fdd-a2ba-83c94281e908_1024x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gowe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc121de27-7050-4fdd-a2ba-83c94281e908_1024x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gowe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc121de27-7050-4fdd-a2ba-83c94281e908_1024x768.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!gowe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc121de27-7050-4fdd-a2ba-83c94281e908_1024x768.jpeg" width="1024" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c121de27-7050-4fdd-a2ba-83c94281e908_1024x768.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:534511,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/200761789?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc121de27-7050-4fdd-a2ba-83c94281e908_1024x768.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!gowe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc121de27-7050-4fdd-a2ba-83c94281e908_1024x768.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gowe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc121de27-7050-4fdd-a2ba-83c94281e908_1024x768.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gowe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc121de27-7050-4fdd-a2ba-83c94281e908_1024x768.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gowe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc121de27-7050-4fdd-a2ba-83c94281e908_1024x768.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZGve!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3125e15-5be6-4a39-a6f7-40427d094b12_1260x802.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZGve!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3125e15-5be6-4a39-a6f7-40427d094b12_1260x802.png 424w, https://substackcdn.com/image/fetch/$s_!ZGve!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3125e15-5be6-4a39-a6f7-40427d094b12_1260x802.png 848w, https://substackcdn.com/image/fetch/$s_!ZGve!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3125e15-5be6-4a39-a6f7-40427d094b12_1260x802.png 1272w, https://substackcdn.com/image/fetch/$s_!ZGve!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3125e15-5be6-4a39-a6f7-40427d094b12_1260x802.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZGve!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3125e15-5be6-4a39-a6f7-40427d094b12_1260x802.png" width="1260" height="802" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3125e15-5be6-4a39-a6f7-40427d094b12_1260x802.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:802,&quot;width&quot;:1260,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:774277,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/200761789?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3125e15-5be6-4a39-a6f7-40427d094b12_1260x802.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!ZGve!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3125e15-5be6-4a39-a6f7-40427d094b12_1260x802.png 424w, https://substackcdn.com/image/fetch/$s_!ZGve!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3125e15-5be6-4a39-a6f7-40427d094b12_1260x802.png 848w, https://substackcdn.com/image/fetch/$s_!ZGve!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3125e15-5be6-4a39-a6f7-40427d094b12_1260x802.png 1272w, https://substackcdn.com/image/fetch/$s_!ZGve!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3125e15-5be6-4a39-a6f7-40427d094b12_1260x802.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><ul><li><p>Open <strong>Settings &#8594; Your Device e.g. &#8216;LIH&#8217;s MateBook Pro&#8217; for About page &#8594; tap on software version to activated Turn on &#8221;Developer Options&#8221;</strong> dialog prompt.</p></li><li><p>Open <strong>Settings &#8594; Privacy and Security &#8594; Advanced</strong> and toggle on <strong>&#8220;Run extensions from non-app markets&#8221;</strong>.</p></li></ul><p><strong>3. One-Click Automated Deployment</strong></p><p>Open your terminal (or the integrated terminal window inside <strong><a href="https://developer.huawei.com/consumer/en/doc/harmonyos-releases-V13/overview-V13">Huawei DevEco Studio</a></strong>) and run the native installation script:</p><p><strong>bash</strong></p><pre><code><code>zsh -c "$(curl -fsSL https://harmonybrew.atomgit.com/install.sh)"
</code></code></pre><p>Use code with caution.</p><p><strong>4. Configure Environment Variables</strong></p><p>Once the installer finishes, write the binary path to your configuration profile to execute commands globally:</p><p><strong>bash</strong></p><pre><code><code>echo 'eval "$(/storage/Users/currentUser/.harmonybrew/bin/brew shellenv)"' &gt;&gt; ~/.zshrc
source ~/.zshrc
</code></code></pre><p>Use code with caution.</p><div><hr></div><p><strong>Running Your First Headless Tool</strong></p><p>With your terminal configured, you bypass all app stores. Downloading and managing headless tools becomes as simple as typing a singular string:</p><p><strong>bash</strong></p><pre><code><code># Pull down the latest package formulas from the community repository
brew update

# Fetch and auto-compile a headless background utility
brew install &lt;package-name&gt;</code></code></pre>]]></content:encoded></item><item><title><![CDATA[English Tutorial on how to install OpenHarmony-based KaihongOS on your x86 PC
]]></title><description><![CDATA[KaiihongOS Desktop Edition is a domestically produced, highly secure all-scenario AI operating system innovatively built on open-source OpenHarmony in China to start programming OpenHarmony apps]]></description><link>https://www.harmony-developers.com/p/english-tutorial-on-how-to-install</link><guid isPermaLink="false">https://www.harmony-developers.com/p/english-tutorial-on-how-to-install</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Fri, 02 Oct 2026 06:53:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7K87!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F275f0add-5bc2-49f1-ac31-41b249e8b170_766x450.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7K87!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F275f0add-5bc2-49f1-ac31-41b249e8b170_766x450.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7K87!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F275f0add-5bc2-49f1-ac31-41b249e8b170_766x450.png 424w, https://substackcdn.com/image/fetch/$s_!7K87!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F275f0add-5bc2-49f1-ac31-41b249e8b170_766x450.png 848w, https://substackcdn.com/image/fetch/$s_!7K87!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F275f0add-5bc2-49f1-ac31-41b249e8b170_766x450.png 1272w, https://substackcdn.com/image/fetch/$s_!7K87!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F275f0add-5bc2-49f1-ac31-41b249e8b170_766x450.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7K87!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F275f0add-5bc2-49f1-ac31-41b249e8b170_766x450.png" width="766" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/275f0add-5bc2-49f1-ac31-41b249e8b170_766x450.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:766,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:454750,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/208211900?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F275f0add-5bc2-49f1-ac31-41b249e8b170_766x450.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!7K87!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F275f0add-5bc2-49f1-ac31-41b249e8b170_766x450.png 424w, https://substackcdn.com/image/fetch/$s_!7K87!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F275f0add-5bc2-49f1-ac31-41b249e8b170_766x450.png 848w, https://substackcdn.com/image/fetch/$s_!7K87!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F275f0add-5bc2-49f1-ac31-41b249e8b170_766x450.png 1272w, https://substackcdn.com/image/fetch/$s_!7K87!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F275f0add-5bc2-49f1-ac31-41b249e8b170_766x450.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>KaihongOS Desktop Edition</strong> is a domestically produced, highly secure all-scenario AI operating system innovatively built on open-source OpenHarmony. It is commonly referred to as KaihongOS. Based on open-source OpenHarmony, it innovates and develops in core areas such as the system kernel, system framework, and performance optimization. Through capability enhancement and technological innovation, it strengthens the system&#8217;s foundation, while also providing flexible industry-customized construction capabilities tailored to the differentiated characteristics of different industries. It comprehensively ensures the safety, completeness, real-time, and reliability of system operation, realizing multi-device intelligent connectivity and scenario-based intelligent services, injecting core momentum into the industry&#8217;s digital transformation.</p><p>Currently, Kaihong OS is developed by ShenKaihong based on OpenHarmony&#8217;s underlying architecture, sharing the same origin as Huawei&#8217;s HarmonyOS PC system, and inheriting core features such as microkernel design and distributed collaboration. This release breaks the limitation that HarmonyOS is only compatible with ARM architecture devices, offering deep optimization for X86_64 architecture. At the same time, the system is completely free for ordinary individual users, requiring no invitation codes, real-name authentication, or payment, and supports coexisting with <a href="https://m.ddooo.com/zt/yxxls.htm">Windows</a> without forcing formatting the original hard drive. The new version introduces the OpenClaw crayfish feature, supporting natural language instructions for file automation and code assistance, while optimizing hardware compatibility and system security, making development more efficient and experience smoother.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cOOS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9541dd12-3356-4120-b9de-bfe9ab553daf_1000x625.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cOOS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9541dd12-3356-4120-b9de-bfe9ab553daf_1000x625.png 424w, https://substackcdn.com/image/fetch/$s_!cOOS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9541dd12-3356-4120-b9de-bfe9ab553daf_1000x625.png 848w, https://substackcdn.com/image/fetch/$s_!cOOS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9541dd12-3356-4120-b9de-bfe9ab553daf_1000x625.png 1272w, https://substackcdn.com/image/fetch/$s_!cOOS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9541dd12-3356-4120-b9de-bfe9ab553daf_1000x625.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cOOS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9541dd12-3356-4120-b9de-bfe9ab553daf_1000x625.png" width="1000" height="625" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9541dd12-3356-4120-b9de-bfe9ab553daf_1000x625.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:625,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:157010,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/208211900?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9541dd12-3356-4120-b9de-bfe9ab553daf_1000x625.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!cOOS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9541dd12-3356-4120-b9de-bfe9ab553daf_1000x625.png 424w, https://substackcdn.com/image/fetch/$s_!cOOS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9541dd12-3356-4120-b9de-bfe9ab553daf_1000x625.png 848w, https://substackcdn.com/image/fetch/$s_!cOOS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9541dd12-3356-4120-b9de-bfe9ab553daf_1000x625.png 1272w, https://substackcdn.com/image/fetch/$s_!cOOS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9541dd12-3356-4120-b9de-bfe9ab553daf_1000x625.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>Kaihong OS system features</strong></h3><p><strong>1. Security: Multiple authentication ensures full data lifecycle protection</strong></p><p>KaihongOS&#8217;s LiteOS-M operating system kernel received the EAL5+ security certification from the China Cybersecurity Review Technology and Certification Center (CCRC), and is also the first open-source OpenHarmony secure OS distribution to pass the Ministry of Public Security&#8217;s security testing certification nationwide. Ensuring security from the source, KaihongOS achieves system-level security through formal kernels, distributed security defense, distributed encrypted data storage, secure transmission within domains, and tiered security for end-to-end, edge-edge cloud, and application hierarchical security, comprehensively resisting various security threats.</p><p><strong>2. Comprehensive: Flexible deployment, covering all devices of all sizes</strong></p><p>Based on a microkernel plug-in architecture, KaihongOS integrates system capabilities into individual &#8220;block-like&#8221; components, which can be flexibly deployed to a vast number of devices of different sizes and types. This meets the needs of a single system for devices ranging from 20KB to GB, enabling data generation and collection across all physical devices, and supports multiple upgrade methods such as edge distribution and OTA upgrades, adapting to the needs of different industries and scenarios.</p><p><strong>3. Real-time: Hybrid deployment with microsecond-level real-time response</strong></p><p>KaihongOS adopts a single-chip, multi-core hybrid deployment, featuring both real-time and intelligent cores, meeting diverse human-computer interaction scenarios while supporting microsecond-level response in industrial control, aerospace, emergencies, and other scenarios. The KaihongOS industrial real-time operating system kernel has passed testing and certification by China&#8217;s Thier Laboratory. It is the first operating system in the open-source OpenHarmony field to achieve hardware real-time capabilities, achieving interrupt response delay of &#8804; 1 microsecond and task switching delay of &#8804; 1 microsecond, ensuring the system can respond promptly and accurately to task requests in scenarios with high real-time requirements.</p><p><strong>4. Reliable: Stable operation, zero downtime and zero interruption during long-term pressure testing</strong></p><p>KaihongOS boasts outstanding reliability, with no system downtime, memory leak detection and recovery capabilities, ensuring zero system downtime; Business uninterrupted: Through dual-machine hot standby technology, real-time business takeover is achieved, with zero service interruption during switchover, providing strong support for business continuity in key industries and avoiding losses caused by system failures or interruptions.</p><p><strong>5. Smart connectivity: integrated communication, compatible with multiple ecosystem applications</strong></p><p>KaihongOS soft bus supports multi-link converged communication, including Sparklink, Wi-Fi, Ethernet, BLE, and other communication methods; Supports interoperability with HarmonyOS devices; Supports compatibility with Linux and Android multi-system application ecosystems.</p><p><strong>6. Al Native, Al Agent proactive service</strong></p><p>The KaihongOS operating system fully embraces AI, evolving toward &#8220;distributed AIOS.&#8221; Supports native AI, built-in on-cloud large model framework, and provides users with an Agentic agent framework and development tools, enabling industry users and developers to create personalized intelligent assistants. Based on AIOS, KaihongOS can provide high-quality data, allowing data to flow freely and deeply within a unified intelligent framework. Agents on AIOS can intelligently call various resources based on users&#8217; overall needs and behavior patterns, providing personalized services that collaborate across terminals, applications, and multiple agents, driving industries to upgrade toward intelligence.</p><h3><strong>Kaihongos Desktop Version Installation Tutorial:</strong></h3><p><strong>1. Hardware requirements</strong></p><p>1. CPU: Intel 64-bit processor (dual-core or multi-core), clock speed above 1GHz.</p><p>2. RAM: 4GB or more of memory.</p><p>3. Storage: Storage devices of 30GB or more, supporting SATA and NVMe.</p><p>4. System firmware: Supports UEFI system firmware booted from external USB boots.</p><p>5. Graphics Card: Intel HD Graphics series 5th generation and above integrated graphics, some Intel UHD Graphics series integrated graphics, some Intel Iris architecture integrated graphics, some Intel Xe architecture discrete graphics, NVIDIA GeForce 8 and above dedicated graphics.</p><p>6&#12289;USB&#65306;USB 3.0 / 2.0&#12290;</p><p><strong>2. Preparation of installation environment</strong></p><p>1. The USB drive used for burning images must have a capacity of at least 10GB, and all data on the USB drive must be cleared.</p><p>2. The KaihongOS image file used for installation.</p><p>3. Rufus USB flash burning software.</p><p>4. A Windows x86 physical machine, with KaihongOS image files and Rufus USB burning software stored on this device.</p><p><strong>3. Start installing the Honghong OS</strong></p><p>1. Enter the X86 physical machine in the Windows environment, insert a USB drive, and then open the Rufus burning software.</p><p>2. Click &#8220;Select&#8221; to select the KaihongOS image file locally.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_Rmd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb39f3bb3-0975-463c-9565-0d97f7fe316e_371x540.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_Rmd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb39f3bb3-0975-463c-9565-0d97f7fe316e_371x540.png 424w, https://substackcdn.com/image/fetch/$s_!_Rmd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb39f3bb3-0975-463c-9565-0d97f7fe316e_371x540.png 848w, https://substackcdn.com/image/fetch/$s_!_Rmd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb39f3bb3-0975-463c-9565-0d97f7fe316e_371x540.png 1272w, https://substackcdn.com/image/fetch/$s_!_Rmd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb39f3bb3-0975-463c-9565-0d97f7fe316e_371x540.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!_Rmd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb39f3bb3-0975-463c-9565-0d97f7fe316e_371x540.png" width="371" height="540" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b39f3bb3-0975-463c-9565-0d97f7fe316e_371x540.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:540,&quot;width&quot;:371,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:95103,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/208211900?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb39f3bb3-0975-463c-9565-0d97f7fe316e_371x540.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!_Rmd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb39f3bb3-0975-463c-9565-0d97f7fe316e_371x540.png 424w, https://substackcdn.com/image/fetch/$s_!_Rmd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb39f3bb3-0975-463c-9565-0d97f7fe316e_371x540.png 848w, https://substackcdn.com/image/fetch/$s_!_Rmd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb39f3bb3-0975-463c-9565-0d97f7fe316e_371x540.png 1272w, https://substackcdn.com/image/fetch/$s_!_Rmd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb39f3bb3-0975-463c-9565-0d97f7fe316e_371x540.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>3. For &#8220;Partition Type,&#8221; select &#8220;GPT&#8221; and click &#8220;Start.&#8221;</p><p>KaihongOS images only support installation via UEFI/GPT</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MkZ3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c8f218-9b7e-4370-8639-6686f1101c13_440x687.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MkZ3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c8f218-9b7e-4370-8639-6686f1101c13_440x687.png 424w, https://substackcdn.com/image/fetch/$s_!MkZ3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c8f218-9b7e-4370-8639-6686f1101c13_440x687.png 848w, https://substackcdn.com/image/fetch/$s_!MkZ3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c8f218-9b7e-4370-8639-6686f1101c13_440x687.png 1272w, https://substackcdn.com/image/fetch/$s_!MkZ3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c8f218-9b7e-4370-8639-6686f1101c13_440x687.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!MkZ3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c8f218-9b7e-4370-8639-6686f1101c13_440x687.png" width="440" height="687" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/79c8f218-9b7e-4370-8639-6686f1101c13_440x687.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:687,&quot;width&quot;:440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:154891,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/208211900?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c8f218-9b7e-4370-8639-6686f1101c13_440x687.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!MkZ3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c8f218-9b7e-4370-8639-6686f1101c13_440x687.png 424w, https://substackcdn.com/image/fetch/$s_!MkZ3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c8f218-9b7e-4370-8639-6686f1101c13_440x687.png 848w, https://substackcdn.com/image/fetch/$s_!MkZ3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c8f218-9b7e-4370-8639-6686f1101c13_440x687.png 1272w, https://substackcdn.com/image/fetch/$s_!MkZ3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79c8f218-9b7e-4370-8639-6686f1101c13_440x687.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>4. Choose to write in ISO image mode and click &#8220;OK&#8221;.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TzK6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd551ab6c-35fe-4272-9715-aa0e57aabc48_564x320.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TzK6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd551ab6c-35fe-4272-9715-aa0e57aabc48_564x320.png 424w, https://substackcdn.com/image/fetch/$s_!TzK6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd551ab6c-35fe-4272-9715-aa0e57aabc48_564x320.png 848w, https://substackcdn.com/image/fetch/$s_!TzK6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd551ab6c-35fe-4272-9715-aa0e57aabc48_564x320.png 1272w, https://substackcdn.com/image/fetch/$s_!TzK6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd551ab6c-35fe-4272-9715-aa0e57aabc48_564x320.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!TzK6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd551ab6c-35fe-4272-9715-aa0e57aabc48_564x320.png" width="564" height="320" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d551ab6c-35fe-4272-9715-aa0e57aabc48_564x320.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:320,&quot;width&quot;:564,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:99828,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/208211900?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd551ab6c-35fe-4272-9715-aa0e57aabc48_564x320.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!TzK6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd551ab6c-35fe-4272-9715-aa0e57aabc48_564x320.png 424w, https://substackcdn.com/image/fetch/$s_!TzK6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd551ab6c-35fe-4272-9715-aa0e57aabc48_564x320.png 848w, https://substackcdn.com/image/fetch/$s_!TzK6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd551ab6c-35fe-4272-9715-aa0e57aabc48_564x320.png 1272w, https://substackcdn.com/image/fetch/$s_!TzK6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd551ab6c-35fe-4272-9715-aa0e57aabc48_564x320.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>5. Click &#8220;OK&#8221; to clear the data and start burning the USB drive.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qk8O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d5d44e-d3db-4864-81f0-4f31efe69401_536x202.png 424w, https://substackcdn.com/image/fetch/$s_!qk8O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d5d44e-d3db-4864-81f0-4f31efe69401_536x202.png 848w, https://substackcdn.com/image/fetch/$s_!qk8O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d5d44e-d3db-4864-81f0-4f31efe69401_536x202.png 1272w, https://substackcdn.com/image/fetch/$s_!qk8O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d5d44e-d3db-4864-81f0-4f31efe69401_536x202.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!qk8O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d5d44e-d3db-4864-81f0-4f31efe69401_536x202.png" width="536" height="202" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/79d5d44e-d3db-4864-81f0-4f31efe69401_536x202.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:202,&quot;width&quot;:536,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:38424,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/208211900?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d5d44e-d3db-4864-81f0-4f31efe69401_536x202.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!qk8O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d5d44e-d3db-4864-81f0-4f31efe69401_536x202.png 424w, https://substackcdn.com/image/fetch/$s_!qk8O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d5d44e-d3db-4864-81f0-4f31efe69401_536x202.png 848w, https://substackcdn.com/image/fetch/$s_!qk8O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d5d44e-d3db-4864-81f0-4f31efe69401_536x202.png 1272w, https://substackcdn.com/image/fetch/$s_!qk8O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d5d44e-d3db-4864-81f0-4f31efe69401_536x202.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>6. After burning is complete, insert the USB drive into the computer where KaihongOS will be installed. Turn on the computer (if the computer has already been turned on, restart it). When the logo lights up on the screen, press F12 to enter the boot menu (the key position for boot menu varies by brand of computer; you can check this key online according to your computer type), then select USB drive to boot</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gG6n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55205978-6961-4bc3-a0fa-fd644a3f2740_488x248.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gG6n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55205978-6961-4bc3-a0fa-fd644a3f2740_488x248.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gG6n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55205978-6961-4bc3-a0fa-fd644a3f2740_488x248.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gG6n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55205978-6961-4bc3-a0fa-fd644a3f2740_488x248.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gG6n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55205978-6961-4bc3-a0fa-fd644a3f2740_488x248.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!gG6n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55205978-6961-4bc3-a0fa-fd644a3f2740_488x248.jpeg" width="488" height="248" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55205978-6961-4bc3-a0fa-fd644a3f2740_488x248.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:248,&quot;width&quot;:488,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!gG6n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55205978-6961-4bc3-a0fa-fd644a3f2740_488x248.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gG6n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55205978-6961-4bc3-a0fa-fd644a3f2740_488x248.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gG6n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55205978-6961-4bc3-a0fa-fd644a3f2740_488x248.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gG6n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55205978-6961-4bc3-a0fa-fd644a3f2740_488x248.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>7. Boot using a USB drive, select &#8220;Install KaihongOS (amd64)&#8221; from the boot menu to boot.</p><p>If not selected, it will automatically start after 5 seconds according to the Install KaihongOS (amd64) boot item.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XHsu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7f87ffa-df92-4819-b861-4f0be94dc69a_608x253.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XHsu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7f87ffa-df92-4819-b861-4f0be94dc69a_608x253.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XHsu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7f87ffa-df92-4819-b861-4f0be94dc69a_608x253.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XHsu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7f87ffa-df92-4819-b861-4f0be94dc69a_608x253.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XHsu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7f87ffa-df92-4819-b861-4f0be94dc69a_608x253.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!XHsu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7f87ffa-df92-4819-b861-4f0be94dc69a_608x253.jpeg" width="608" height="253" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a7f87ffa-df92-4819-b861-4f0be94dc69a_608x253.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:253,&quot;width&quot;:608,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!XHsu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7f87ffa-df92-4819-b861-4f0be94dc69a_608x253.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XHsu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7f87ffa-df92-4819-b861-4f0be94dc69a_608x253.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XHsu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7f87ffa-df92-4819-b861-4f0be94dc69a_608x253.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XHsu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7f87ffa-df92-4819-b861-4f0be94dc69a_608x253.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>8. After entering the LiveCD desktop, the KaihongOS installer will automatically launch. Click &#8220;Next.&#8221; Change the language on the list box from Chinese/Mandarin to English before proceeding.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5Zdk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e840297-6b78-4bdf-8749-76a7880ad504_712x402.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5Zdk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e840297-6b78-4bdf-8749-76a7880ad504_712x402.png 424w, https://substackcdn.com/image/fetch/$s_!5Zdk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e840297-6b78-4bdf-8749-76a7880ad504_712x402.png 848w, https://substackcdn.com/image/fetch/$s_!5Zdk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e840297-6b78-4bdf-8749-76a7880ad504_712x402.png 1272w, https://substackcdn.com/image/fetch/$s_!5Zdk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e840297-6b78-4bdf-8749-76a7880ad504_712x402.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!5Zdk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e840297-6b78-4bdf-8749-76a7880ad504_712x402.png" width="712" height="402" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4e840297-6b78-4bdf-8749-76a7880ad504_712x402.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:402,&quot;width&quot;:712,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:105565,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/208211900?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e840297-6b78-4bdf-8749-76a7880ad504_712x402.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!5Zdk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e840297-6b78-4bdf-8749-76a7880ad504_712x402.png 424w, https://substackcdn.com/image/fetch/$s_!5Zdk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e840297-6b78-4bdf-8749-76a7880ad504_712x402.png 848w, https://substackcdn.com/image/fetch/$s_!5Zdk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e840297-6b78-4bdf-8749-76a7880ad504_712x402.png 1272w, https://substackcdn.com/image/fetch/$s_!5Zdk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e840297-6b78-4bdf-8749-76a7880ad504_712x402.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If the KaihongOS installer fails to open automatically, you need to right-click the terminal on the desktop and enter the following command to manually start the installer.</p><p>cd /kh_calamares</p><p>sudo calamares-d-c</p><p>9. Disk configuration.</p><p>Use the built-in installation disk layout and do not encrypt it. Figure 2-9 shows the configuration for erasing a single disk as a whole.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bc6x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5510ed1b-73fa-40b3-beb6-543715424da6_568x325.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bc6x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5510ed1b-73fa-40b3-beb6-543715424da6_568x325.jpeg 424w, https://substackcdn.com/image/fetch/$s_!bc6x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5510ed1b-73fa-40b3-beb6-543715424da6_568x325.jpeg 848w, https://substackcdn.com/image/fetch/$s_!bc6x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5510ed1b-73fa-40b3-beb6-543715424da6_568x325.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!bc6x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5510ed1b-73fa-40b3-beb6-543715424da6_568x325.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!bc6x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5510ed1b-73fa-40b3-beb6-543715424da6_568x325.jpeg" width="568" height="325" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5510ed1b-73fa-40b3-beb6-543715424da6_568x325.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:325,&quot;width&quot;:568,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!bc6x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5510ed1b-73fa-40b3-beb6-543715424da6_568x325.jpeg 424w, https://substackcdn.com/image/fetch/$s_!bc6x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5510ed1b-73fa-40b3-beb6-543715424da6_568x325.jpeg 848w, https://substackcdn.com/image/fetch/$s_!bc6x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5510ed1b-73fa-40b3-beb6-543715424da6_568x325.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!bc6x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5510ed1b-73fa-40b3-beb6-543715424da6_568x325.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0Fy8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44afaf50-e305-4e9a-888b-6aadcbb7d44d_568x325.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0Fy8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44afaf50-e305-4e9a-888b-6aadcbb7d44d_568x325.png 424w, https://substackcdn.com/image/fetch/$s_!0Fy8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44afaf50-e305-4e9a-888b-6aadcbb7d44d_568x325.png 848w, https://substackcdn.com/image/fetch/$s_!0Fy8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44afaf50-e305-4e9a-888b-6aadcbb7d44d_568x325.png 1272w, https://substackcdn.com/image/fetch/$s_!0Fy8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44afaf50-e305-4e9a-888b-6aadcbb7d44d_568x325.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!0Fy8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44afaf50-e305-4e9a-888b-6aadcbb7d44d_568x325.png" width="568" height="325" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/44afaf50-e305-4e9a-888b-6aadcbb7d44d_568x325.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:325,&quot;width&quot;:568,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:89730,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/208211900?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44afaf50-e305-4e9a-888b-6aadcbb7d44d_568x325.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!0Fy8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44afaf50-e305-4e9a-888b-6aadcbb7d44d_568x325.png 424w, https://substackcdn.com/image/fetch/$s_!0Fy8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44afaf50-e305-4e9a-888b-6aadcbb7d44d_568x325.png 848w, https://substackcdn.com/image/fetch/$s_!0Fy8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44afaf50-e305-4e9a-888b-6aadcbb7d44d_568x325.png 1272w, https://substackcdn.com/image/fetch/$s_!0Fy8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44afaf50-e305-4e9a-888b-6aadcbb7d44d_568x325.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Note that when the x86 physical machine has only a single hard drive and does not erase the disk, you can choose the &#8220;replace a partition&#8221; option to install (see Figure 2-10) to avoid installation errors. On the currently displayed <a href="https://m.ddooo.com/zt/ypfqgj.htm">disk partition</a> diagram, click the partition you want to replace as the installation path; unpartitioned space (gray) can also be selected.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YUlg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf4a2ffa-d76b-4a23-b029-173a19c70e46_568x325.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YUlg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf4a2ffa-d76b-4a23-b029-173a19c70e46_568x325.png 424w, https://substackcdn.com/image/fetch/$s_!YUlg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf4a2ffa-d76b-4a23-b029-173a19c70e46_568x325.png 848w, https://substackcdn.com/image/fetch/$s_!YUlg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf4a2ffa-d76b-4a23-b029-173a19c70e46_568x325.png 1272w, https://substackcdn.com/image/fetch/$s_!YUlg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf4a2ffa-d76b-4a23-b029-173a19c70e46_568x325.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!YUlg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf4a2ffa-d76b-4a23-b029-173a19c70e46_568x325.png" width="568" height="325" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/af4a2ffa-d76b-4a23-b029-173a19c70e46_568x325.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:325,&quot;width&quot;:568,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:95686,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/208211900?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf4a2ffa-d76b-4a23-b029-173a19c70e46_568x325.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!YUlg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf4a2ffa-d76b-4a23-b029-173a19c70e46_568x325.png 424w, https://substackcdn.com/image/fetch/$s_!YUlg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf4a2ffa-d76b-4a23-b029-173a19c70e46_568x325.png 848w, https://substackcdn.com/image/fetch/$s_!YUlg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf4a2ffa-d76b-4a23-b029-173a19c70e46_568x325.png 1272w, https://substackcdn.com/image/fetch/$s_!YUlg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf4a2ffa-d76b-4a23-b029-173a19c70e46_568x325.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2qLl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1204a795-0524-40a4-9f75-2639351ef620_568x325.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2qLl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1204a795-0524-40a4-9f75-2639351ef620_568x325.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2qLl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1204a795-0524-40a4-9f75-2639351ef620_568x325.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2qLl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1204a795-0524-40a4-9f75-2639351ef620_568x325.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2qLl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1204a795-0524-40a4-9f75-2639351ef620_568x325.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!2qLl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1204a795-0524-40a4-9f75-2639351ef620_568x325.jpeg" width="568" height="325" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1204a795-0524-40a4-9f75-2639351ef620_568x325.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:325,&quot;width&quot;:568,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!2qLl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1204a795-0524-40a4-9f75-2639351ef620_568x325.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2qLl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1204a795-0524-40a4-9f75-2639351ef620_568x325.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2qLl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1204a795-0524-40a4-9f75-2639351ef620_568x325.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2qLl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1204a795-0524-40a4-9f75-2639351ef620_568x325.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Note:</p><p>Only one KaihongOS can be installed on the same x86 physical machine at the same time. If the target x86 physical machine already has KaihongOS systems, you need to delete the KaihongOS partition and manually partition it before installing.</p><p>10. After disk configuration is complete, click &#8220;Next&#8221; to confirm the installation information, then click &#8220;Install&#8221; to start installing KaihongOS.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-_QF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32722e0e-68dd-43ca-87fe-209fe5cd2632_568x325.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-_QF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32722e0e-68dd-43ca-87fe-209fe5cd2632_568x325.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-_QF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32722e0e-68dd-43ca-87fe-209fe5cd2632_568x325.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-_QF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32722e0e-68dd-43ca-87fe-209fe5cd2632_568x325.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-_QF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32722e0e-68dd-43ca-87fe-209fe5cd2632_568x325.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!-_QF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32722e0e-68dd-43ca-87fe-209fe5cd2632_568x325.jpeg" width="568" height="325" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32722e0e-68dd-43ca-87fe-209fe5cd2632_568x325.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:325,&quot;width&quot;:568,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!-_QF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32722e0e-68dd-43ca-87fe-209fe5cd2632_568x325.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-_QF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32722e0e-68dd-43ca-87fe-209fe5cd2632_568x325.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-_QF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32722e0e-68dd-43ca-87fe-209fe5cd2632_568x325.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-_QF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32722e0e-68dd-43ca-87fe-209fe5cd2632_568x325.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When the &#8220;Continue Installation&#8221; prompt pops up, click &#8220;Start Installation Now.&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zFsQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c02f24-dd37-4d13-a243-9c9b7830bd17_1091x726.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zFsQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c02f24-dd37-4d13-a243-9c9b7830bd17_1091x726.png 424w, https://substackcdn.com/image/fetch/$s_!zFsQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c02f24-dd37-4d13-a243-9c9b7830bd17_1091x726.png 848w, https://substackcdn.com/image/fetch/$s_!zFsQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c02f24-dd37-4d13-a243-9c9b7830bd17_1091x726.png 1272w, https://substackcdn.com/image/fetch/$s_!zFsQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c02f24-dd37-4d13-a243-9c9b7830bd17_1091x726.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!zFsQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c02f24-dd37-4d13-a243-9c9b7830bd17_1091x726.png" width="1091" height="726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c4c02f24-dd37-4d13-a243-9c9b7830bd17_1091x726.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:726,&quot;width&quot;:1091,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:366227,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/208211900?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c02f24-dd37-4d13-a243-9c9b7830bd17_1091x726.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!zFsQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c02f24-dd37-4d13-a243-9c9b7830bd17_1091x726.png 424w, https://substackcdn.com/image/fetch/$s_!zFsQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c02f24-dd37-4d13-a243-9c9b7830bd17_1091x726.png 848w, https://substackcdn.com/image/fetch/$s_!zFsQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c02f24-dd37-4d13-a243-9c9b7830bd17_1091x726.png 1272w, https://substackcdn.com/image/fetch/$s_!zFsQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4c02f24-dd37-4d13-a243-9c9b7830bd17_1091x726.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0Y3g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28cf7ec-a527-407f-b782-50ca8e275c92_568x325.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0Y3g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28cf7ec-a527-407f-b782-50ca8e275c92_568x325.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0Y3g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28cf7ec-a527-407f-b782-50ca8e275c92_568x325.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0Y3g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28cf7ec-a527-407f-b782-50ca8e275c92_568x325.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0Y3g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28cf7ec-a527-407f-b782-50ca8e275c92_568x325.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!0Y3g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28cf7ec-a527-407f-b782-50ca8e275c92_568x325.jpeg" width="568" height="325" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b28cf7ec-a527-407f-b782-50ca8e275c92_568x325.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:325,&quot;width&quot;:568,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!0Y3g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28cf7ec-a527-407f-b782-50ca8e275c92_568x325.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0Y3g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28cf7ec-a527-407f-b782-50ca8e275c92_568x325.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0Y3g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28cf7ec-a527-407f-b782-50ca8e275c92_568x325.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0Y3g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb28cf7ec-a527-407f-b782-50ca8e275c92_568x325.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>11. After installation is complete, click &#8220;Finish&#8221;.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pXic!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac88f3cb-8a03-4024-80c4-6504d0dc4b40_568x325.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pXic!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac88f3cb-8a03-4024-80c4-6504d0dc4b40_568x325.png 424w, https://substackcdn.com/image/fetch/$s_!pXic!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac88f3cb-8a03-4024-80c4-6504d0dc4b40_568x325.png 848w, https://substackcdn.com/image/fetch/$s_!pXic!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac88f3cb-8a03-4024-80c4-6504d0dc4b40_568x325.png 1272w, https://substackcdn.com/image/fetch/$s_!pXic!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac88f3cb-8a03-4024-80c4-6504d0dc4b40_568x325.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!pXic!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac88f3cb-8a03-4024-80c4-6504d0dc4b40_568x325.png" width="568" height="325" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac88f3cb-8a03-4024-80c4-6504d0dc4b40_568x325.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:325,&quot;width&quot;:568,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:41389,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/208211900?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac88f3cb-8a03-4024-80c4-6504d0dc4b40_568x325.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!pXic!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac88f3cb-8a03-4024-80c4-6504d0dc4b40_568x325.png 424w, https://substackcdn.com/image/fetch/$s_!pXic!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac88f3cb-8a03-4024-80c4-6504d0dc4b40_568x325.png 848w, https://substackcdn.com/image/fetch/$s_!pXic!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac88f3cb-8a03-4024-80c4-6504d0dc4b40_568x325.png 1272w, https://substackcdn.com/image/fetch/$s_!pXic!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac88f3cb-8a03-4024-80c4-6504d0dc4b40_568x325.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!waD3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987a8a12-adf1-4d65-9de7-bc1e301c60eb_568x325.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!waD3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987a8a12-adf1-4d65-9de7-bc1e301c60eb_568x325.jpeg 424w, https://substackcdn.com/image/fetch/$s_!waD3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987a8a12-adf1-4d65-9de7-bc1e301c60eb_568x325.jpeg 848w, https://substackcdn.com/image/fetch/$s_!waD3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987a8a12-adf1-4d65-9de7-bc1e301c60eb_568x325.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!waD3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987a8a12-adf1-4d65-9de7-bc1e301c60eb_568x325.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!waD3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987a8a12-adf1-4d65-9de7-bc1e301c60eb_568x325.jpeg" width="568" height="325" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/987a8a12-adf1-4d65-9de7-bc1e301c60eb_568x325.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:325,&quot;width&quot;:568,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!waD3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987a8a12-adf1-4d65-9de7-bc1e301c60eb_568x325.jpeg 424w, https://substackcdn.com/image/fetch/$s_!waD3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987a8a12-adf1-4d65-9de7-bc1e301c60eb_568x325.jpeg 848w, https://substackcdn.com/image/fetch/$s_!waD3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987a8a12-adf1-4d65-9de7-bc1e301c60eb_568x325.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!waD3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987a8a12-adf1-4d65-9de7-bc1e301c60eb_568x325.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>12. When prompted &#8220;Please remove the live-medium,&#8221; unplug the USB drive and press Enter. If the prompt &#8220;Please remove the live-medium&#8221; does not appear, you can remove the USB drive and manually restart.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!41KG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2ca4475-fff2-46b6-b147-08ebde7c1803_654x296.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!41KG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2ca4475-fff2-46b6-b147-08ebde7c1803_654x296.jpeg 424w, https://substackcdn.com/image/fetch/$s_!41KG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2ca4475-fff2-46b6-b147-08ebde7c1803_654x296.jpeg 848w, https://substackcdn.com/image/fetch/$s_!41KG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2ca4475-fff2-46b6-b147-08ebde7c1803_654x296.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!41KG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2ca4475-fff2-46b6-b147-08ebde7c1803_654x296.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!41KG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2ca4475-fff2-46b6-b147-08ebde7c1803_654x296.jpeg" width="654" height="296" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b2ca4475-fff2-46b6-b147-08ebde7c1803_654x296.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:296,&quot;width&quot;:654,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!41KG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2ca4475-fff2-46b6-b147-08ebde7c1803_654x296.jpeg 424w, https://substackcdn.com/image/fetch/$s_!41KG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2ca4475-fff2-46b6-b147-08ebde7c1803_654x296.jpeg 848w, https://substackcdn.com/image/fetch/$s_!41KG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2ca4475-fff2-46b6-b147-08ebde7c1803_654x296.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!41KG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2ca4475-fff2-46b6-b147-08ebde7c1803_654x296.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>13. When entering the boot menu, select the &#8220;KaihongOS&#8221; boot option to enter the KaihongOS system.</p><p>If the x86 physical machine is installed with Windows and KaihongOS running in parallel, the boot menu will display the &#8220;Windows Boot Manager&#8221; boot item for entering the Windows system.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zABt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb230cbde-4dca-4c23-b9c3-f159bacd5df6_644x352.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zABt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb230cbde-4dca-4c23-b9c3-f159bacd5df6_644x352.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zABt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb230cbde-4dca-4c23-b9c3-f159bacd5df6_644x352.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zABt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb230cbde-4dca-4c23-b9c3-f159bacd5df6_644x352.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zABt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb230cbde-4dca-4c23-b9c3-f159bacd5df6_644x352.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!zABt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb230cbde-4dca-4c23-b9c3-f159bacd5df6_644x352.jpeg" width="644" height="352" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b230cbde-4dca-4c23-b9c3-f159bacd5df6_644x352.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:352,&quot;width&quot;:644,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!zABt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb230cbde-4dca-4c23-b9c3-f159bacd5df6_644x352.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zABt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb230cbde-4dca-4c23-b9c3-f159bacd5df6_644x352.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zABt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb230cbde-4dca-4c23-b9c3-f159bacd5df6_644x352.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zABt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb230cbde-4dca-4c23-b9c3-f159bacd5df6_644x352.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Press E to enter edit mode. You can follow the method below to open the required <a href="https://m.ddooo.com/zt/zhentanyx.htm">graphics card driver</a> (set to 1) and disable the unused driver (set to 0) to avoid conflicts.</p><p>The method is as follows:</p><p>i915.modeset=1 (set to 1 to enable Intel integrated graphics, set to 0 to turn off Intel integrated graphics)</p><p>amdgpu.modeset=1 (set to 1 to open the new AMD graphics card, set to 0 to turn off the new AMD graphics card)</p><p>radeon.modeset=1 (set to 1 to open old AMD graphics cards, set to 0 to turn off old AMD graphics cards)</p><p>nouveau.modeset=1 (Set to 1 to turn on NVIDIA graphics card, set to 0 to turn off NVIDIA graphics card</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zHlp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6aafc66-60f8-4d71-9f06-3e3df8f64b4e_651x271.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zHlp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6aafc66-60f8-4d71-9f06-3e3df8f64b4e_651x271.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zHlp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6aafc66-60f8-4d71-9f06-3e3df8f64b4e_651x271.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zHlp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6aafc66-60f8-4d71-9f06-3e3df8f64b4e_651x271.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zHlp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6aafc66-60f8-4d71-9f06-3e3df8f64b4e_651x271.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!zHlp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6aafc66-60f8-4d71-9f06-3e3df8f64b4e_651x271.jpeg" width="651" height="271" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f6aafc66-60f8-4d71-9f06-3e3df8f64b4e_651x271.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:271,&quot;width&quot;:651,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!zHlp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6aafc66-60f8-4d71-9f06-3e3df8f64b4e_651x271.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zHlp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6aafc66-60f8-4d71-9f06-3e3df8f64b4e_651x271.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zHlp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6aafc66-60f8-4d71-9f06-3e3df8f64b4e_651x271.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zHlp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6aafc66-60f8-4d71-9f06-3e3df8f64b4e_651x271.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>After setting up, press F10. If the boot is normal, you can enter the kernel boot interface shown in Figure 2-18.</p><p>Note: The monitor must be connected to the correct graphics card</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sKhQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f82c241-f7d4-4b79-bf71-458ffbf27bc0_648x450.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sKhQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f82c241-f7d4-4b79-bf71-458ffbf27bc0_648x450.jpeg 424w, https://substackcdn.com/image/fetch/$s_!sKhQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f82c241-f7d4-4b79-bf71-458ffbf27bc0_648x450.jpeg 848w, https://substackcdn.com/image/fetch/$s_!sKhQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f82c241-f7d4-4b79-bf71-458ffbf27bc0_648x450.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!sKhQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f82c241-f7d4-4b79-bf71-458ffbf27bc0_648x450.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!sKhQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f82c241-f7d4-4b79-bf71-458ffbf27bc0_648x450.jpeg" width="648" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f82c241-f7d4-4b79-bf71-458ffbf27bc0_648x450.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:648,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!sKhQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f82c241-f7d4-4b79-bf71-458ffbf27bc0_648x450.jpeg 424w, https://substackcdn.com/image/fetch/$s_!sKhQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f82c241-f7d4-4b79-bf71-458ffbf27bc0_648x450.jpeg 848w, https://substackcdn.com/image/fetch/$s_!sKhQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f82c241-f7d4-4b79-bf71-458ffbf27bc0_648x450.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!sKhQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f82c241-f7d4-4b79-bf71-458ffbf27bc0_648x450.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>After booting, enter the KaihongOS system interface.</p><p>Note: OpenClaw requires more than 4GB of memory</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6E9O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe41359e1-28dd-431a-a5d3-31a34d2c6a62_653x368.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6E9O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe41359e1-28dd-431a-a5d3-31a34d2c6a62_653x368.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6E9O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe41359e1-28dd-431a-a5d3-31a34d2c6a62_653x368.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6E9O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe41359e1-28dd-431a-a5d3-31a34d2c6a62_653x368.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6E9O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe41359e1-28dd-431a-a5d3-31a34d2c6a62_653x368.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!6E9O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe41359e1-28dd-431a-a5d3-31a34d2c6a62_653x368.jpeg" width="653" height="368" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e41359e1-28dd-431a-a5d3-31a34d2c6a62_653x368.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:368,&quot;width&quot;:653,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!6E9O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe41359e1-28dd-431a-a5d3-31a34d2c6a62_653x368.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6E9O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe41359e1-28dd-431a-a5d3-31a34d2c6a62_653x368.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6E9O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe41359e1-28dd-431a-a5d3-31a34d2c6a62_653x368.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6E9O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe41359e1-28dd-431a-a5d3-31a34d2c6a62_653x368.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>14. Alright, Kaihong OS has been successfully installed.</p><h3><strong>Product architecture</strong></h3><p>The KaihongOS standard system software technical architecture follows a layered design, from bottom to top: kernel layer, system service layer, framework layer, and application layer. System functions are deployed stepwise according to &#8220;system &gt; subsystem &gt; components.&#8221; In multi-device deployment scenarios, it supports trimming certain unnecessary components according to actual needs. As shown below:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!d04P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9de3214-0e50-4190-ab1a-bfd785b77aac_634x371.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d04P!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9de3214-0e50-4190-ab1a-bfd785b77aac_634x371.png 424w, https://substackcdn.com/image/fetch/$s_!d04P!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9de3214-0e50-4190-ab1a-bfd785b77aac_634x371.png 848w, https://substackcdn.com/image/fetch/$s_!d04P!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9de3214-0e50-4190-ab1a-bfd785b77aac_634x371.png 1272w, https://substackcdn.com/image/fetch/$s_!d04P!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9de3214-0e50-4190-ab1a-bfd785b77aac_634x371.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!d04P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9de3214-0e50-4190-ab1a-bfd785b77aac_634x371.png" width="634" height="371" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e9de3214-0e50-4190-ab1a-bfd785b77aac_634x371.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:371,&quot;width&quot;:634,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:183800,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/208211900?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9de3214-0e50-4190-ab1a-bfd785b77aac_634x371.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!d04P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9de3214-0e50-4190-ab1a-bfd785b77aac_634x371.png 424w, https://substackcdn.com/image/fetch/$s_!d04P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9de3214-0e50-4190-ab1a-bfd785b77aac_634x371.png 848w, https://substackcdn.com/image/fetch/$s_!d04P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9de3214-0e50-4190-ab1a-bfd785b77aac_634x371.png 1272w, https://substackcdn.com/image/fetch/$s_!d04P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9de3214-0e50-4190-ab1a-bfd785b77aac_634x371.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Here, the subsystem is a logical concept composed of corresponding components.</p><p>A component is a further breakdown of a subsystem, a reusable software unit containing source code, configuration files, resource files, and compilation scripts. It can be independently constructed and integrated in binary form, making it a binary unit with independent verification capabilities.</p><p><strong>1. Kernel layer</strong></p><p>- Kernel Subsystem: The KaihongOS standard system software uses a Linux kernel design. The Kernel Abstract Layer (KAL) provides the underlying kernel capabilities for the upper layer by masking multikernel differences, including process/thread management, memory management, file systems, network management, and peripheral management.</p><p>- Driver Subsystem: The Driver Framework (HDF, Hardware Driver Foundation) is the foundation for the open hardware ecosystem of the system, providing unified peripheral access capabilities and a framework for driver development and management.</p><p><strong>2. System service layer</strong></p><p>The system service layer is the core capability set of KaihongOS standard system software, providing services to applications through the framework layer. This layer consists of the following parts:</p><p>- System Basic Capability Subsystem Set: Provides foundational capabilities for running, scheduling, migration, and other operations in distributed applications across multiple devices. It consists of subsystems such as distributed soft bus, distributed data management, distributed task scheduling, public base library, multi-mode input, graphics, security, AI, and more.</p><p>- Basic Software Service Subsystem Set: Provides public, general-purpose software services, consisting of event notifications, telephone, multimedia, DFX (Design For X), and other subsystems.</p><p>- Enhanced Software Service Subsystem Set: Provides differentiated capability enhancement software services for different devices, consisting of proprietary smart screen services, wearable proprietary services, IoT proprietary services, and other subsystems.</p><p>The KaihongOS standard system software software service subsystem set provides customized enhanced software services for KaihongOS standard system software, consisting of end-cloud connectivity, near-field sensing services, wearable services, financial security, IoT services, and other subsystems.</p><p>- Hardware Service Subsystem Set: Provides hardware services, consisting of location services, user IAM, wearable proprietary hardware services, IoT proprietary hardware services, and other subsystems.</p><p>Depending on the deployment environment of different device forms, the basic software service subsystem set, enhanced software service subsystem set, and hardware service subsystem set can be internally segmented by subsystem granularity, and each subsystem can be segmented by function granularity.</p><p><strong>3. Frame layer</strong></p><p>The framework layer provides multilingual user programming frameworks and Ability frameworks for application development, ArkUI frameworks for JS, and multilingual framework APIs for various software and hardware services that are open to the public. Depending on the degree of component-based trimming of the system, the APIs supported by the device will also differ.</p><p><strong>4. Application layer</strong></p><p>The application layer includes system applications and third-party non-system applications. System applications include those essential to the system such as desktop and settings, and are composed of one or more FA (Feature Capabilities) or PAs (Particle Capabilities). Among them, FA has a UI interface that provides the ability to interact with users; PA, on the other hand, has no UI interface, providing the ability to run tasks in the background and providing unified data access abstraction. Applications developed based on FA/PA can implement specific business functions, support cross-device scheduling and distribution, and provide users with a consistent and efficient application experience.</p><h3><strong>Kaihongos Desktop Edition Scope and Positioning</strong></h3><p><strong>1. Positioning</strong></p><p>For developers, it offers an open-source desktop operating system version developed through OpenHarmony learning.</p><p><strong>2. Characteristics</strong></p><p>Provides open-source OpenHarmony system learning and development, southbound device and northbound application development and validation, and offers new interaction, new security, new intelligence, and new ecosystem experiences.</p><p><strong>3. Application</strong></p><p>Laptops, MiniPCs, desktops, etc.</p><h3><strong>Update log</strong></h3><p><strong>v5.0.2.30</strong></p><p>1. Added camera services and document editor;</p><p>2. Optimized video decoder, resolution adjustment, and screen zoom functions.</p><p><strong>Caution: This desktop OS is not polished as Huawei HarmonyOS computer system for MateBooks, Apple Macs, Microsoft Windows and Linux. Still new infertile ecosystem that is yet to be fully polished and more experimental and developer centric target, you will experience missing apps, unpolished apps, missing audio/graphical drivers etc. I recommend you dual-booting KaihongOS with your current desktop set up of Windows or Linux x86 computer/laptop or QEMU virtual machine at best.</strong></p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oLnw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5760faf-7afd-4090-9b34-bc01e7999524_1911x306.png 424w, https://substackcdn.com/image/fetch/$s_!oLnw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5760faf-7afd-4090-9b34-bc01e7999524_1911x306.png 848w, https://substackcdn.com/image/fetch/$s_!oLnw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5760faf-7afd-4090-9b34-bc01e7999524_1911x306.png 1272w, https://substackcdn.com/image/fetch/$s_!oLnw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5760faf-7afd-4090-9b34-bc01e7999524_1911x306.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!oLnw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5760faf-7afd-4090-9b34-bc01e7999524_1911x306.png" width="1456" height="233" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f5760faf-7afd-4090-9b34-bc01e7999524_1911x306.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:233,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:46650,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/208211900?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5760faf-7afd-4090-9b34-bc01e7999524_1911x306.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!oLnw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5760faf-7afd-4090-9b34-bc01e7999524_1911x306.png 424w, https://substackcdn.com/image/fetch/$s_!oLnw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5760faf-7afd-4090-9b34-bc01e7999524_1911x306.png 848w, https://substackcdn.com/image/fetch/$s_!oLnw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5760faf-7afd-4090-9b34-bc01e7999524_1911x306.png 1272w, https://substackcdn.com/image/fetch/$s_!oLnw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5760faf-7afd-4090-9b34-bc01e7999524_1911x306.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div></div></div></div></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fMT3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c4ca27-048b-4daa-893f-a1727c4a93c7_1912x1011.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fMT3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c4ca27-048b-4daa-893f-a1727c4a93c7_1912x1011.png 424w, https://substackcdn.com/image/fetch/$s_!fMT3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c4ca27-048b-4daa-893f-a1727c4a93c7_1912x1011.png 848w, https://substackcdn.com/image/fetch/$s_!fMT3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c4ca27-048b-4daa-893f-a1727c4a93c7_1912x1011.png 1272w, https://substackcdn.com/image/fetch/$s_!fMT3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c4ca27-048b-4daa-893f-a1727c4a93c7_1912x1011.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!fMT3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c4ca27-048b-4daa-893f-a1727c4a93c7_1912x1011.png" width="1456" height="770" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/80c4ca27-048b-4daa-893f-a1727c4a93c7_1912x1011.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:770,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:248138,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://livinginharmony.substack.com/i/208211900?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c4ca27-048b-4daa-893f-a1727c4a93c7_1912x1011.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!fMT3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c4ca27-048b-4daa-893f-a1727c4a93c7_1912x1011.png 424w, https://substackcdn.com/image/fetch/$s_!fMT3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c4ca27-048b-4daa-893f-a1727c4a93c7_1912x1011.png 848w, https://substackcdn.com/image/fetch/$s_!fMT3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c4ca27-048b-4daa-893f-a1727c4a93c7_1912x1011.png 1272w, https://substackcdn.com/image/fetch/$s_!fMT3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80c4ca27-048b-4daa-893f-a1727c4a93c7_1912x1011.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://m.ddooo.com/softdown/223454.htm">Download the zipped ISO file here for KaihongOS x86</a> (Translate the web page with your browser)</p>]]></content:encoded></item><item><title><![CDATA[DevEco Studio (Linux) Port Notes ]]></title><description><![CDATA[&#8216;&#8216;The most useful episode of reverse engineering&#8217;&#8217;]]></description><link>https://www.harmony-developers.com/p/deveco-studio-linux-port-notes</link><guid isPermaLink="false">https://www.harmony-developers.com/p/deveco-studio-linux-port-notes</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Fri, 02 Oct 2026 06:46:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mZKD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe58f3c15-f481-437e-a59d-3b868c8c3e17_1920x1097.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mZKD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe58f3c15-f481-437e-a59d-3b868c8c3e17_1920x1097.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mZKD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe58f3c15-f481-437e-a59d-3b868c8c3e17_1920x1097.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mZKD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe58f3c15-f481-437e-a59d-3b868c8c3e17_1920x1097.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mZKD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe58f3c15-f481-437e-a59d-3b868c8c3e17_1920x1097.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mZKD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe58f3c15-f481-437e-a59d-3b868c8c3e17_1920x1097.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mZKD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe58f3c15-f481-437e-a59d-3b868c8c3e17_1920x1097.jpeg" width="1456" height="832" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e58f3c15-f481-437e-a59d-3b868c8c3e17_1920x1097.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:832,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#24320;&#28304;&#33258;&#33616;&#12305;&#25226;&#40511;&#33945;&#24320;&#21457;IDE DevEco Studio &#31227;&#26893;&#21040;Linux - &#21457;&#29616;&#39057;&#36947;- &#23567;&#20247;&#36719;&#20214;&#23448;&#26041;&#35770;&#22363;&quot;,&quot;title&quot;:&quot;&#24320;&#28304;&#33258;&#33616;&#12305;&#25226;&#40511;&#33945;&#24320;&#21457;IDE DevEco Studio &#31227;&#26893;&#21040;Linux - &#21457;&#29616;&#39057;&#36947;- &#23567;&#20247;&#36719;&#20214;&#23448;&#26041;&#35770;&#22363;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="&#24320;&#28304;&#33258;&#33616;&#12305;&#25226;&#40511;&#33945;&#24320;&#21457;IDE DevEco Studio &#31227;&#26893;&#21040;Linux - &#21457;&#29616;&#39057;&#36947;- &#23567;&#20247;&#36719;&#20214;&#23448;&#26041;&#35770;&#22363;" title="&#24320;&#28304;&#33258;&#33616;&#12305;&#25226;&#40511;&#33945;&#24320;&#21457;IDE DevEco Studio &#31227;&#26893;&#21040;Linux - &#21457;&#29616;&#39057;&#36947;- &#23567;&#20247;&#36719;&#20214;&#23448;&#26041;&#35770;&#22363;" srcset="https://substackcdn.com/image/fetch/$s_!mZKD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe58f3c15-f481-437e-a59d-3b868c8c3e17_1920x1097.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mZKD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe58f3c15-f481-437e-a59d-3b868c8c3e17_1920x1097.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mZKD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe58f3c15-f481-437e-a59d-3b868c8c3e17_1920x1097.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mZKD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe58f3c15-f481-437e-a59d-3b868c8c3e17_1920x1097.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A few months ago, I bought a Huawei tablet and have been hoping to take the opportunity to develop HarmonyOS, but since DevEco does not support Linux, I started considering whether a port might be possible.</p><h1><strong>Preparation</strong></h1><h2><strong>Get the Windows version of DevEco Studio</strong></h2><p>Here, we download the Windows version installation package from Huawei&#8217;s official website (at the time of writing, the downloadable version is <strong><a href="https://developer.huawei.com/consumer/cn/download/">DevEco Studio 6.0.2 Release</a></strong>) and install it via wine. If all installation configurations remain by default, the DevEco program main body should be located below. We enter this directory.<code>~/.wine/drive_c/Program Files/Huawei/DevEco Studio</code></p><h2><strong>Get IDEA</strong></h2><p>Since the current DevEco Studio is based on modifications of IDEA, we need a Linux version of IDEA as a reference. The version I downloaded is <strong><a href="https://www.jetbrains.com/idea/download/download-thanks.html?platform=linux">2025.3.2</a></strong>.</p><p>After extracting and organizing the directory, our directory format is as follows:</p><pre><code><code>.  
&#9500;&#9472;&#9472; DevEco Studio  
&#9474;   &#9500;&#9472;&#9472; bin  
&#9474;   &#9500;&#9472;&#9472; ......
&#9474;   &#9492;&#9472;&#9472; tools  
&#9492;&#9472;&#9472; idea-IU-253.30387.90  
&#9;&#9500;&#9472;&#9472; bin  
&#9;&#9500;&#9472;&#9472; ......
&#9;&#9492;&#9472;&#9472; plugins</code></code></pre><p>bash</p><h1><strong>Transplant environment</strong></h1><h2><strong>Transplanting JBR</strong></h2><p><strong>JBR (Jetbrains Runtime)</strong> is a JDK update created by JetBrains, and it was included when we downloaded IDEA. Simply copy and replace the jbr directory in DevEco Studio.</p><p>Of course, the JBR versions used by IDEA and DevEco are not necessarily the same. If you want the JBR versions to match exactly, you can print the DevEco JBR version using wine and download it from <strong><a href="https://github.com/JetBrains/JetBrainsRuntime/releases">Github</a></strong>.</p><h2><strong>Port Node</strong></h2><p>Huawei&#8217;s build tools are either written in Nodejs or Python. Checking tools/node, I found that NodeJS version is <strong><a href="https://nodejs.org/dist/v18.20.1/node-v18.20.1-linux-x64.tar.xz">v18.20.1 LTS</a></strong>, so I downloaded that version from the official website, extracted it, and replaced the original directory. (To keep the Windows version directory structure consistent, I softlinked all files in the node/bin subdirectory to the node directory.)</p><p>At this point, there should be a node folder in the directory.<code>tools</code></p><h2><strong>Replace libs</strong></h2><p>Go to the directory, copy the three directories from the IDEA sample, and replace the directories in DevEco<code>libnative, pty4j, jna</code></p><h2><strong>Replace the OpenHarmony SDK</strong></h2><p>Here, you can replace it with the downloaded OpenHarmony SDK. (As for how to download it, you can directly use the download tool provided by DevEco. You can skip this step and complete the other steps. After that, you should be able to open it on Linux and download the SDK.)<code>sdk/default/openharmony</code></p><h1><strong>Reverse official launcher</strong></h1><p>Since Huawei most likely directly copied the official launcher, here I directly used IDA to reverse bin/idea. The most useful function should be. The <s>conclusions drawn with the help of GPT</s> are as follows:<code>xplat_launcheer::main_lib</code></p><ol><li><p>The launcher is written in Rust<s>, the world&#8217;s best language</s></p></li><li><p>When the launcher loads, it regressively reads files from the upper level of the current directory, with a maximum depth of 5<code>product-info.json</code></p></li><li><p>The launcher loads the properties file, specifically the one that loads is</p></li></ol><p>Therefore, by writing and , we can complete the final porting work.<code>product-info.jsondevecostudio.vmoption</code></p><h1><strong>Write the relevant configuration files</strong></h1><p>I won&#8217;t elaborate on this part; here are some VMOption &amp; product-info &amp; idea properties you can copy from:</p><pre><code><code>// product-info.json
{  
"name": "DevEco Studio",  
"version": "6.0.2.640",  
"versionSuffix": "",  
"buildNumber": "243.24978.46.36.602640",  
"productCode": "DS",  
"envVarBaseName": "DEVECOSTUDIO",  
"dataDirectoryName": "DevEcoStudio6.0",  
"svgIconPath": "bin/devecostudio.svg",  
"productVendor": "Huawei",  
"launch": [  
{  
"os": "Linux",  
"arch": "amd64",  
"launcherPath": "bin/devecostudio",  
"javaExecutablePath": "jbr/bin/java",  
"vmOptionsFilePath": "bin/devecostudio64-lin.vmoptions",  
"startupWmClass": "deveco-studio",  
"bootClassPathJarNames": [  
"platform-loader.jar",  
"util-8.jar",  
"util.jar",  
"util_rt.jar",  
"opentelemetry.jar",  
"app.jar",  
"stats.jar",  
"jps-model.jar",  
"external-system-rt.jar",  
"rd.jar",  
"bouncy-castle.jar",  
"protobuf.jar",  
"forms_rt.jar",  
"lib.jar",  
"externalProcess-rt.jar",  
"groovy.jar",  
"annotations.jar",  
"hwlib.jar",  
"idea_rt.jar",  
"kotlinx-coroutines-slf4j-1.8.0-intellij.jar",  
"nio-fs.jar",  
"trove.jar"  
],  
"additionalJvmArguments": [  
"-Djava.system.class.loader=com.intellij.util.lang.PathClassLoader",  
"-Didea.vendor.name=Huawei",  
"-Didea.paths.selector=DevEcoStudio6.0",  
"-Djna.boot.library.path=$IDE_HOME/lib/jna/amd64",  
"-Dpty4j.preferred.native.folder=$IDE_HOME/lib/pty4j",  
"-Djna.nosys=true",  
"-Djna.noclasspath=true",  
"-Dintellij.platform.runtime.repository.path=$IDE_HOME/modules/module-descriptors.jar",  
"-Didea.platform.prefix=DevEcoStudio",  
"-Dsplash=true",  
"-Daether.connector.resumeDownloads=false",  
"-Dcompose.swing.render.on.graphics=true",  
"--add-opens=java.base/java.io=ALL-UNNAMED",  
"--add-opens=java.base/java.lang=ALL-UNNAMED",  
"--add-opens=java.base/java.lang.ref=ALL-UNNAMED",  
"--add-opens=java.base/java.lang.reflect=ALL-UNNAMED",  
"--add-opens=java.base/java.net=ALL-UNNAMED",  
"--add-opens=java.base/java.nio=ALL-UNNAMED",  
"--add-opens=java.base/java.nio.charset=ALL-UNNAMED",  
"--add-opens=java.base/java.text=ALL-UNNAMED",  
"--add-opens=java.base/java.time=ALL-UNNAMED",  
"--add-opens=java.base/java.util=ALL-UNNAMED",  
"--add-opens=java.base/java.util.concurrent=ALL-UNNAMED",  
"--add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED",  
"--add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED",  
"--add-opens=java.base/jdk.internal.vm=ALL-UNNAMED",  
"--add-opens=java.base/sun.net.dns=ALL-UNNAMED",  
"--add-opens=java.base/sun.nio.ch=ALL-UNNAMED",  
"--add-opens=java.base/sun.nio.fs=ALL-UNNAMED",  
"--add-opens=java.base/sun.security.ssl=ALL-UNNAMED",  
"--add-opens=java.base/sun.security.util=ALL-UNNAMED",  
"--add-opens=java.desktop/com.sun.java.swing=ALL-UNNAMED",  
"--add-opens=java.desktop/com.sun.java.swing.plaf.gtk=ALL-UNNAMED",  
"--add-opens=java.desktop/java.awt=ALL-UNNAMED",  
"--add-opens=java.desktop/java.awt.dnd.peer=ALL-UNNAMED",  
"--add-opens=java.desktop/java.awt.event=ALL-UNNAMED",  
"--add-opens=java.desktop/java.awt.font=ALL-UNNAMED",  
"--add-opens=java.desktop/java.awt.image=ALL-UNNAMED",  
"--add-opens=java.desktop/java.awt.peer=ALL-UNNAMED",  
"--add-opens=java.desktop/javax.swing=ALL-UNNAMED",  
"--add-opens=java.desktop/javax.swing.plaf.basic=ALL-UNNAMED",  
"--add-opens=java.desktop/javax.swing.text=ALL-UNNAMED",  
"--add-opens=java.desktop/javax.swing.text.html=ALL-UNNAMED",  
"--add-opens=java.desktop/javax.swing.text.html.parser=ALL-UNNAMED",  
"--add-opens=java.desktop/sun.awt=ALL-UNNAMED",  
"--add-opens=java.desktop/sun.awt.X11=ALL-UNNAMED",  
"--add-opens=java.desktop/sun.awt.datatransfer=ALL-UNNAMED",  
"--add-opens=java.desktop/sun.awt.image=ALL-UNNAMED",  
"--add-opens=java.desktop/sun.font=ALL-UNNAMED",  
"--add-opens=java.desktop/sun.java2d=ALL-UNNAMED",  
"--add-opens=java.desktop/sun.swing=ALL-UNNAMED",  
"--add-opens=java.management/sun.management=ALL-UNNAMED",  
"--add-opens=jdk.attach/sun.tools.attach=ALL-UNNAMED",  
"--add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED",  
"--add-opens=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED",  
"--add-opens=jdk.jdi/com.sun.tools.jdi=ALL-UNNAMED"  
],  
"mainClass": "com.intellij.idea.Main"  
}  
],  
"bundledPlugins": [],  
"modules": [],  
"fileExtensions": [],  
"layout": []  
}</code></code></pre><p>json</p><pre><code><code># devecostudio64-lin.vmoptions
-Xms256m  
-Xmx2048m  
-XX:ReservedCodeCacheSize=512m  
-XX:CICompilerCount=2  
-XX:+HeapDumpOnOutOfMemoryError  
-XX:-OmitStackTraceInFastThrow  
-XX:+IgnoreUnrecognizedVMOptions  
-XX:+UnlockDiagnosticVMOptions  
-XX:TieredOldPercentage=100000  
-ea  
-Dfile.encoding=UTF-8  
-Dsun.java2d.metal=true  
-Dawt.lock.fair=true  
-Dsun.io.useCanonCaches=false  
-Djdk.nio.maxCachedBufferSize=2097152  
-Djava.util.zip.use.nio.for.zip.file.access=true  
-Djava.nio.file.spi.DefaultFileSystemProvider=com.intellij.platform.core.nio.fs.MultiRoutingFileSystemProvider  
-Djdk.attach.allowAttachSelf=true  
-Dsun.tools.attach.tmp.only=true  
-Djdk.http.auth.tunneling.disabledSchemes=""  
-Djdk.module.illegalAccess.silent=true  
-Djbr.catch.SIGABRT=true  
-Dkotlinx.coroutines.debug=off  
-Djava.security.manager=com.intellij.platform.core.nio.fs.CoreBootstrapSecurityManager</code></code></pre><p>bash</p><pre><code><code># idea.properties

# ---------------------------------------------------------------------  
# DevEco Studio - Linux
# Based on IntelliJ Platform 243.x  
# ---------------------------------------------------------------------  
  
# Use ${idea.home.path} macro to specify location relative to IDE installation home.  
# Use ${xxx} where xxx is any Java property (including defined in previous lines of this file)  
# to refer to its value.  
  
# ---------------------------------------------------------------------  
# Paths (use defaults unless you really need to override)  
# ---------------------------------------------------------------------  
# idea.config.path=${user.home}/.DevEcoStudio/config  
# idea.system.path=${user.home}/.DevEcoStudio/system  
# idea.plugins.path=${idea.config.path}/plugins  
# idea.log.path=${idea.system.path}/log  
  
# ---------------------------------------------------------------------  
# File size limits  
# ---------------------------------------------------------------------  
idea.max.intellisense.filesize=2500  
idea.max.content.load.filesize=20000  
  
# ---------------------------------------------------------------------  
# Console &amp; process behavior  
# ---------------------------------------------------------------------  
idea.cycle.buffer.size=4096  
idea.no.launcher=false  
idea.dynamic.classpath=false  
  
# ---------------------------------------------------------------------  
# UI / Window manager behavior  
# ---------------------------------------------------------------------  
idea.popup.weight=heavy  
  
# ---------------------------------------------------------------------  
# Graphics &amp; rendering (Linux-safe)  
# ---------------------------------------------------------------------  
sun.java2d.d3d=false  
sun.java2d.pmoffscreen=false  
swing.bufferPerWindow=true  
sun.java2d.uiScale.enabled=false  
javax.swing.rebaseCssSizeMap=true  
  
# ---------------------------------------------------------------------  
# Accessibility &amp; stability (JBR)  
# ---------------------------------------------------------------------  
javax.swing.JTree.excludeAccessibleChildrenFromClosedNodes=true  
sun.awt.mac.a11y.tableAccessibleRowCountThreshold=1000  
sun.lwawt.macosx.LWCToolkit.invokeAndWait.disposeOnEDTFree=true  
  
# ---------------------------------------------------------------------  
# Smooth scrolling (disabled by default, stable choice)  
# ---------------------------------------------------------------------  
# idea.true.smooth.scrolling=true  
  
# ---------------------------------------------------------------------  
# DevEco specific: plugin compatibility baseline  
# IMPORTANT: keeps DevEco plugins from behaving like pure IDEA plugins  
# ---------------------------------------------------------------------  
idea.plugins.compatible.build=IC-243.24978.46  
  
# ---------------------------------------------------------------------  
# HarmonyOS / DevEco toolchain (keep even if commented)  
# ---------------------------------------------------------------------  
# ide.harmonyos.sdk.location=/path/hosdk/  
# ide.ohpm.location=/path/ohpm  
# ide.hvigor.location=/path/hvigor  
# ide.node.location=/path/node  
# ide.emulator.location=/path/emulator  
  
# ---------------------------------------------------------------------  
# ArkTS / Node related limits (optional)  
# ---------------------------------------------------------------------  
# arkts.server.max.intellisense.filesize=10240  
# arkts.server.max.old.space.size=8192  
  
# ---------------------------------------------------------------------  
# Error handling  
# ---------------------------------------------------------------------  
idea.fatal.error.notification=disabled</code></code></pre><p>properties</p><p>One fun fact worth noting here: if you enable IDEA&#8217;s recommended Scale by OS, Huawei&#8217;s strange plugin loading mechanism will mess everything up! So set it to false here, and we&#8217;ve completed the entire port.<code>sun.java2d.uiScale=true</code></p><h1><strong>Handling signature issues</strong></h1><p>At this point, DevEco seems to be developing normally, but strange issues arise during signing:</p><pre><code><code>2026-02-05 22:20:54,000 [ 490226]   WARN - #com.huawei.deveco.projectmgmt.hos.s  
ignature.sign.utils.AutoGenerateKeyCSRUtil - No available JDK is found.  
2026-02-05 22:21:00,716 [ 496942]   WARN - #com.huawei.deveco.projectmgmt.hos.s  
ignature.sign.utils.AutoGenerateKeyCSRUtil - No available JDK is found.</code></code></pre><p>plaintext</p><p>We use Recaf to reverse this component. (If you have friends working on Java reverse engineering, I sincerely recommend Recaf. So far, it&#8217;s the best Java decompilation and bytecode modification tool I&#8217;ve used&#8212;absolutely a legendary tool.) The component location is, and the related code is:<code>plugins/harmony/lib/hos-project-mgmt-6.0.2.640.jar</code></p><pre><code><code>String toolPath = homePath + TOOL_PATH;              // /jbr/bin
if (SystemInfo.isMac || SystemInfo.isLinux) {
    toolPath = homePath + MAC_TOOL_PATH;             // /jbr/Contents/Home/bin
}</code></code></pre><p>java</p><p>In other words, Linux is directly grouped with Mac, component search is , and the actual path is.<code>jbr/Contents/Home/bin/keytooljbr/bin/keytool</code></p><p>Therefore, we will &#8220;disguise the path,&#8221; and the specific method will not be elaborated here.</p><h1><strong>Porting &#8220;Simulator&#8221;</strong></h1><p>Since HarmonyOS&#8217;s emulator is not open source, we obviously cannot force compatibility with it, so here we use <strong><a href="https://docs.oniroproject.org/device-development/developer-boards/emulator">Oniro Emulator</a></strong>. Install and configure according to the requirements.</p><h1><strong>Effect</strong></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4Res!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17740b36-bcda-427c-ae1f-31aa6fb91708_2880x1800.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4Res!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17740b36-bcda-427c-ae1f-31aa6fb91708_2880x1800.webp 424w, https://substackcdn.com/image/fetch/$s_!4Res!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17740b36-bcda-427c-ae1f-31aa6fb91708_2880x1800.webp 848w, https://substackcdn.com/image/fetch/$s_!4Res!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17740b36-bcda-427c-ae1f-31aa6fb91708_2880x1800.webp 1272w, https://substackcdn.com/image/fetch/$s_!4Res!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17740b36-bcda-427c-ae1f-31aa6fb91708_2880x1800.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!4Res!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17740b36-bcda-427c-ae1f-31aa6fb91708_2880x1800.webp" width="1456" height="910" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/17740b36-bcda-427c-ae1f-31aa6fb91708_2880x1800.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:910,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;CodeGenie usability showcase&quot;,&quot;title&quot;:&quot;CodeGenie usability showcase&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="CodeGenie usability showcase" title="CodeGenie usability showcase" srcset="https://substackcdn.com/image/fetch/$s_!4Res!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17740b36-bcda-427c-ae1f-31aa6fb91708_2880x1800.webp 424w, https://substackcdn.com/image/fetch/$s_!4Res!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17740b36-bcda-427c-ae1f-31aa6fb91708_2880x1800.webp 848w, https://substackcdn.com/image/fetch/$s_!4Res!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17740b36-bcda-427c-ae1f-31aa6fb91708_2880x1800.webp 1272w, https://substackcdn.com/image/fetch/$s_!4Res!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17740b36-bcda-427c-ae1f-31aa6fb91708_2880x1800.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vZaA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8535c3f-baf5-4a7c-89f5-7c355bf2a7c7_2880x1800.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vZaA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8535c3f-baf5-4a7c-89f5-7c355bf2a7c7_2880x1800.webp 424w, https://substackcdn.com/image/fetch/$s_!vZaA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8535c3f-baf5-4a7c-89f5-7c355bf2a7c7_2880x1800.webp 848w, https://substackcdn.com/image/fetch/$s_!vZaA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8535c3f-baf5-4a7c-89f5-7c355bf2a7c7_2880x1800.webp 1272w, https://substackcdn.com/image/fetch/$s_!vZaA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8535c3f-baf5-4a7c-89f5-7c355bf2a7c7_2880x1800.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!vZaA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8535c3f-baf5-4a7c-89f5-7c355bf2a7c7_2880x1800.webp" width="1456" height="910" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e8535c3f-baf5-4a7c-89f5-7c355bf2a7c7_2880x1800.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:910,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Usability demonstration during actual operation&quot;,&quot;title&quot;:&quot;Usability demonstration during actual operation&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Usability demonstration during actual operation" title="Usability demonstration during actual operation" srcset="https://substackcdn.com/image/fetch/$s_!vZaA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8535c3f-baf5-4a7c-89f5-7c355bf2a7c7_2880x1800.webp 424w, https://substackcdn.com/image/fetch/$s_!vZaA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8535c3f-baf5-4a7c-89f5-7c355bf2a7c7_2880x1800.webp 848w, https://substackcdn.com/image/fetch/$s_!vZaA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8535c3f-baf5-4a7c-89f5-7c355bf2a7c7_2880x1800.webp 1272w, https://substackcdn.com/image/fetch/$s_!vZaA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8535c3f-baf5-4a7c-89f5-7c355bf2a7c7_2880x1800.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Rc9U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd45741-e0c0-48a0-84e5-4887d31e0dd8_2880x1796.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Rc9U!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd45741-e0c0-48a0-84e5-4887d31e0dd8_2880x1796.webp 424w, https://substackcdn.com/image/fetch/$s_!Rc9U!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd45741-e0c0-48a0-84e5-4887d31e0dd8_2880x1796.webp 848w, https://substackcdn.com/image/fetch/$s_!Rc9U!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd45741-e0c0-48a0-84e5-4887d31e0dd8_2880x1796.webp 1272w, https://substackcdn.com/image/fetch/$s_!Rc9U!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd45741-e0c0-48a0-84e5-4887d31e0dd8_2880x1796.webp 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!Rc9U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd45741-e0c0-48a0-84e5-4887d31e0dd8_2880x1796.webp" width="1456" height="908" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bfd45741-e0c0-48a0-84e5-4887d31e0dd8_2880x1796.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:908,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Simulator Operation Usability Display&quot;,&quot;title&quot;:&quot;Simulator Operation Usability Display&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Simulator Operation Usability Display" title="Simulator Operation Usability Display" srcset="https://substackcdn.com/image/fetch/$s_!Rc9U!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd45741-e0c0-48a0-84e5-4887d31e0dd8_2880x1796.webp 424w, https://substackcdn.com/image/fetch/$s_!Rc9U!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd45741-e0c0-48a0-84e5-4887d31e0dd8_2880x1796.webp 848w, https://substackcdn.com/image/fetch/$s_!Rc9U!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd45741-e0c0-48a0-84e5-4887d31e0dd8_2880x1796.webp 1272w, https://substackcdn.com/image/fetch/$s_!Rc9U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfd45741-e0c0-48a0-84e5-4887d31e0dd8_2880x1796.webp 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>GitHub Link: <a href="https://github.com/alex3236/devecostudio-linux">alex3236/devecostudio-linux: Bring DevEco Studio to Linux</a></p><p>Credit: ChrisQ (China) - <a href="https://crisq.top/blog/deveco_linux_porting_notes">DevEco Studio Port Notes &#8226; Cris.Q</a></p>]]></content:encoded></item><item><title><![CDATA[Backlash Against US Government’s Block on Huawei’s HarmonyOS ]]></title><description><![CDATA[This decision has sparked significant backlash from various stakeholders, including consumers, tech enthusiasts, and market competition advocates haring third platform choice in the global market.]]></description><link>https://www.harmony-developers.com/p/backlash-against-us-governments-block</link><guid isPermaLink="false">https://www.harmony-developers.com/p/backlash-against-us-governments-block</guid><dc:creator><![CDATA[IT Home (China)]]></dc:creator><pubDate>Sun, 18 May 2025 09:22:47 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/34f14736-fda3-4a95-ae13-9a78eb935f19_3508x2339.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>In a recent and controversial move, the United States government, in collaboration with its allies in Western Europe and NATO-aligned countries, has intensified efforts to block Huawei&#8217;s HarmonyOS. This decision has sparked significant <a href="https://www.change.org/p/stop-blockade-on-huawei-s-harmonyos-by-united-states-imposing-on-western-nations?recruiter=1149202730&amp;recruited_by_id=64b42c50-f6be-11ea-91ff-1dd98d779b8a&amp;utm_source=share_petition&amp;utm_campaign=petition_dashboard&amp;utm_medium=copylink">backlash from various stakeholders, including consumers, tech enthusiasts, and market competition advocates</a>.</p></blockquote><h4><strong>The Problem</strong></h4><blockquote><p>The push to <a href="https://t.co/8HOBDtBLIt">block Huawei&#8217;s HarmonyOS</a> raises substantial concerns about market competition and consumer choice. Critics argue that such actions could stifle innovation and limit technological advancement. In a marketplace that thrives on diversity and competition, the outright blocking of HarmonyOS could lead to a monopolistic environment, ultimately affecting consumer satisfaction and economic growth.</p></blockquote><h4><strong>Market Competition and Innovation</strong></h4><blockquote><p>Market competition is a driving force behind continuous innovation and improvement. When consumers have multiple options, companies are compelled to innovate and offer better products and services. HarmonyOS, developed by Huawei, offers a distinctive alternative to dominant operating systems, potentially fuelling further innovation and providing more choices for tech-savvy consumers.</p></blockquote><h4><strong>Security Concerns and Alternative Solutions</strong></h4><blockquote><p>While security concerns related to Huawei&#8217;s technology are valid, so are American counterparts&#8217; such as iOS and Android security concerns on data gathering and privacy in the world of AI emergence. Many argue that blanket blocking without exploring alternative solutions or collaborations may not be the most effective approach. A dialogue between stakeholders could lead to transparent solutions that address security issues while still allowing innovation to flourish. Constructive engagement, rather than isolation, might help address security concerns without compromising competition.</p></blockquote><h4><strong>A Balanced Approach</strong></h4><blockquote><p>Advocates for a balanced approach argue that HarmonyOS should be given the opportunity to compete in the market, allowing consumers to decide. This perspective is echoed in a recent petition urging lawmakers to reconsider the decision to block HarmonyOS. The petition emphasizes the importance of promoting a competitive, diverse, and innovative market environment.</p></blockquote><h4><strong>Consumer Choice and Economic Growth</strong></h4><p>Every consumer deserves the ability to navigate a marketplace that offers variety, fosters innovation, and encourages competitive pricing. Blocking HarmonyOS outright could limit these benefits, ultimately affecting consumer satisfaction and economic growth. Encouraging debates and solutions that address security concerns while nurturing market competition is essential for progress.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hvia!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbd8c65c-5262-4e89-afb4-b1fbf5f59f0a_679x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hvia!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbd8c65c-5262-4e89-afb4-b1fbf5f59f0a_679x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hvia!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbd8c65c-5262-4e89-afb4-b1fbf5f59f0a_679x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hvia!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbd8c65c-5262-4e89-afb4-b1fbf5f59f0a_679x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hvia!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbd8c65c-5262-4e89-afb4-b1fbf5f59f0a_679x900.jpeg 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!hvia!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbd8c65c-5262-4e89-afb4-b1fbf5f59f0a_679x900.jpeg" width="679" height="900" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fbd8c65c-5262-4e89-afb4-b1fbf5f59f0a_679x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:900,&quot;width&quot;:679,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="https://substackcdn.com/image/fetch/$s_!hvia!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbd8c65c-5262-4e89-afb4-b1fbf5f59f0a_679x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hvia!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbd8c65c-5262-4e89-afb4-b1fbf5f59f0a_679x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hvia!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbd8c65c-5262-4e89-afb4-b1fbf5f59f0a_679x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hvia!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbd8c65c-5262-4e89-afb4-b1fbf5f59f0a_679x900.jpeg 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Conclusion</strong></h4><p>The<a href="https://petition.parliament.uk/petitions/727893/sponsors/new?token=VAyV5v5HLCDefUkSKBW9"> backlash against the US government&#8217;s decision to block Huawei&#8217;s HarmonyOS highlights the importance of market competition and consumer choice</a>. As the debate continues, it is crucial to seek a balanced approach that addresses security concerns while promoting innovation and competition.</p><p></p><p>Original source: <a href="https://harmonyoshub.com/backlash-against-us-governments-block-on-huaweis-harmonyos/">Backlash Against US Government's Block on Huawei's HarmonyOS - HarmonyOSHub </a></p>]]></content:encoded></item><item><title><![CDATA[The software performance and stability have been improved, and Huawei HarmonyOS 5.0.5 (17) Release has been released]]></title><description><![CDATA[On May 15th Huawei&#8217;s official developer official website today released HarmonyOS 5.0.5 (17) Release version,The new version is based on the previously released HarmonyOS 5.0.5 (17) Beta1,The software]]></description><link>https://www.harmony-developers.com/p/the-software-performance-and-stability</link><guid isPermaLink="false">https://www.harmony-developers.com/p/the-software-performance-and-stability</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Thu, 15 May 2025 08:07:56 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4f652519-76a7-4656-9398-873a0afbf463_3968x2643.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://www.ithome.com/">IT Home</a> News on May 15th Huawei&#8217;s official developer website today released <a href="https://hmos.ithome.com/">HarmonyOS</a> <a href="https://hmos.ithome.com/">5.0.5</a> (17) Release version. The new version is based on the previously released <a href="https://hmos.ithome.com/">HarmonyOS</a> 5.0.5 (17) Beta 1. The <strong>software performance and stability have been improved, OS</strong> There are no new or enhanced features of the platform.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QLB5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4893d3b6-f86f-47e6-9f11-61b3d99fc357_1278x454.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QLB5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4893d3b6-f86f-47e6-9f11-61b3d99fc357_1278x454.webp 424w, https://substackcdn.com/image/fetch/$s_!QLB5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4893d3b6-f86f-47e6-9f11-61b3d99fc357_1278x454.webp 848w, https://substackcdn.com/image/fetch/$s_!QLB5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4893d3b6-f86f-47e6-9f11-61b3d99fc357_1278x454.webp 1272w, https://substackcdn.com/image/fetch/$s_!QLB5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4893d3b6-f86f-47e6-9f11-61b3d99fc357_1278x454.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QLB5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4893d3b6-f86f-47e6-9f11-61b3d99fc357_1278x454.webp" width="1278" height="454" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4893d3b6-f86f-47e6-9f11-61b3d99fc357_1278x454.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:454,&quot;width&quot;:1278,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&#36719;&#20214;&#24615;&#33021;&#21644;&#31283;&#23450;&#24615;&#25552;&#21319;&#65292;&#21326;&#20026;&#40511;&#33945; HarmonyOS 5.0.5 (17) Release &#29256;&#26412;&#21457;&#24067;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="&#36719;&#20214;&#24615;&#33021;&#21644;&#31283;&#23450;&#24615;&#25552;&#21319;&#65292;&#21326;&#20026;&#40511;&#33945; HarmonyOS 5.0.5 (17) Release &#29256;&#26412;&#21457;&#24067;" srcset="https://substackcdn.com/image/fetch/$s_!QLB5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4893d3b6-f86f-47e6-9f11-61b3d99fc357_1278x454.webp 424w, https://substackcdn.com/image/fetch/$s_!QLB5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4893d3b6-f86f-47e6-9f11-61b3d99fc357_1278x454.webp 848w, https://substackcdn.com/image/fetch/$s_!QLB5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4893d3b6-f86f-47e6-9f11-61b3d99fc357_1278x454.webp 1272w, https://substackcdn.com/image/fetch/$s_!QLB5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4893d3b6-f86f-47e6-9f11-61b3d99fc357_1278x454.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The full package for HarmonyOS 5.0.5 Release is as follows:</p><p>The following table compares the mappings of released versions of HarmonyOS:</p><p>HarmonyOS 5.0.5 (17) Beta1 adds and enhances the following features (same as the Release version):</p><blockquote><h2><em><strong>Ability</strong></em></h2><ul><li><p><em>Added support for specifying the size of the new window (minWindowWidth, minWindowHeight, maxWindowWidth, maxWindowHeight) via the startAbility property StartOptions.</em></p></li><li><p><em>C API added support for passing StartOptions when starting Ability.</em></p></li><li><p><em>C API added support for obtaining sub-process startup parameters.</em></p></li><li><p><em>C API adds support for setting the display mode of window and dock bar icons when starting Ability.</em></p></li></ul><h2><em><strong>ArkData</strong></em></h2><ul><li><p><em>UDMF adds support for converting incoming data into multi-style data structures. If the original data uses multiple records to carry different styles of the same data, you can use this API to convert the original data into a multi-style data structure.</em></p></li></ul><h2><em><strong>AR Engine</strong></em></h2><ul><li><p><em>Depth estimation is added to provide 3D perception capabilities, which can realize measurement, volume estimation, and more.</em></p></li></ul><h2><em><strong>ArkUI</strong></em></h2><ul><li><p><em>Added APIs related to mouse axis events.</em></p></li><li><p><em>NavDestination adds onActive and onInactive lifecycles.</em></p></li><li><p><em>The event capability of the C API has been enhanced, and the ability to obtain the width, height, X coordinates, and Y coordinates of components hit by an event has been added.</em></p></li><li><p><em>Added support for clearing the current pre-screen text content in the base type definition.</em></p></li><li><p><em>UIContext adds support for creating UI instances that don&#8217;t depend on windows.</em></p></li><li><p><em>Added support for setting the callback parameter of the event to limit its execution interval.</em></p></li><li><p><em>The ImageAnimator component supports setting whether to determine whether to pause and play the component by the visibility of the system onVisibleAreaChange.</em></p></li><li><p><em>The picture-in-picture window supports the creation of the parameter LocalStorage to achieve a page-level UI state storage unit, which can be used to track the main window instance under multiple instances.</em></p></li><li><p><em>Added support for the size memory function of the main window in the window management of PC / 2in1 devices.</em></p></li><li><p><em>Added support for setting the blur radius of shadows on the edge of a sub-window or floating window for PC / 2in1 devices and tablet devices.</em></p></li><li><p><em>Added support for window management for PC/2in1 devices and tablets to set whether a child window can be displayed across multiple screens at the same time when its parent window is in the process of dragging and moving or drag-and-zoom.</em></p></li></ul><h2><em><strong>Audio Kit</strong></em></h2><ul><li><p><em>Added support for Float32 audio stream sampling format.</em></p></li></ul><h2><em><strong>AVCodec Kit</strong></em></h2><ul><li><p><em>Video decoding supports MPEG2, MPEG4, and H.263 software decoding.</em></p></li></ul><h2><em><strong>AVSession Kit</strong></em></h2><ul><li><p><em>Added support for single-sentence/single-lyric display property singleLyricText.</em></p></li></ul><h2><em><strong>Background Tasks Kit</strong></em></h2><ul><li><p><em>The background sub-process management module is added to provide the ability for applications to suppress and decompress sub-processes, so as to prevent sub-processes from occupying too much system resources and causing system lag.</em></p></li></ul><h2><em><strong>Connectivity Kit</strong></em></h2><ul><li><p><em>The Bluetooth socket module adds the ability to obtain the address of the peer device through clientSocket.</em></p></li></ul><h2><em><strong>File Manager Service Kit</strong></em></h2><ul><li><p><em>&#12304;New Kit&#12305;File Manager Service Kit provides developers with file management capabilities, such as deleting files to the recycle bin and obtaining file icons, to meet the diverse demands of users for file management.</em></p></li></ul><h2><em><strong>IME Kit</strong></em></h2><ul><li><p><em>The input method framework adds support for setting the callback when the preview text is displayed, and supports subscribing to the event of the input method application operation text preview content.</em></p></li></ul><h2><em><strong>Media Kit</strong></em></h2><ul><li><p><em>When you call AVPlayer to set a playback policy, the first frame of the video after Prepare (showFirstFrameOnPrepare) is displayed.</em></p></li></ul><h2><em><strong>Payment Kit</strong></em></h2><ul><li><p><em>Added the ability to guide users to bind cards.</em></p></li></ul><h2><em><strong>PDF Kit</strong></em></h2><ul><li><p><em>Added support for encrypting PDF documents.</em></p></li></ul><h2><em><strong>Preview Kit</strong></em></h2><ul><li><p><em>Added file opening acceleration preload state awareness.</em></p></li></ul><h2><em><strong>Vision Kit</strong></em></h2><ul><li><p><em>A status code is added to the document scan result callback interface to determine whether all the input image URLs are invalid.</em></p></li></ul><h2><em><strong>Profiles</strong></em></h2><ul><li><p><em>Added Hook configuration file module.json5: You can use the abilitySrcEntryDelegator to identify the name of the UIAbility of the current module that needs the hook, and use the abilityStageSrcEntryDelegator You can identify the AbilityStage (the value of which is configured to correspond to the name of the module) that the current module needs to hook, and the two are used in combination to specify the target object of the hook.</em></p></li></ul><p>The new version notes are as follows:</p><ul><li><p><em>For the system version, please visit the &#8220;Settings&gt; Device Name &gt;Software Version&#8221; of the device, and go to &#8220;About This Mac&#8221; for inquiries. You must check whether the open capabilities described in the current version are supported in the API Version section of the page.The devices that are available in the current system version include: Mate 60, Mate 60 Pro, Mate X5, MatePad Pro 13.2-inch, MatePad Pro 11-inch 2024, etc. Please upgrade to the companion version for application development.It is not excluded that other models of devices can be upgraded to the above system software (ROM) version through other channels, but the open capabilities supported by the device are subject to the &#8220;API version&#8221; displayed on the &#8220;About this machine&#8221; page.</em></p></li><li><p><em>For the DevEco Studio version, please select &#8220;Help &gt; About DevEco Studio&#8221; from the DevEco Studio interface menu. Please <a href="https://developer.huawei.com/consumer/cn/deveco-studio/">click here</a> for the latest DevEco Studio software release.</em></p></li><li><p><em>The SDK is built into DevEco Studio, and the companion version of the SDK is automatically installed when you install DevEco Studio. For more information, choose Help &gt; About HarmonyOS SDK from the DevEco Studio menu.</em></p></li></ul><div><hr></div></blockquote><p></p><p>Global Aggegrate Source: <a href="https://harmonyoshub.com/the-software-performance-and-stability-have-been-improved-and-huawei-harmonyos-5-0-5-17-release-has-been-released/">The software performance and stability have been improved, and Huawei HarmonyOS 5.0.5 (17) Release has been released - HarmonyOSHub</a></p><p>Original Source: <a href="https://www.ithome.com/0/853/173.htm">Software performance and stability improvement, Huawei HarmonyOS 5.0.5 (17) Release released &#8211; IT Home</a></p>]]></content:encoded></item><item><title><![CDATA[The mobile police terminal based on the open source HarmonyOS was unveiled, adapted to the OpenHarmony 5.0 Release version and Police Hong ]]></title><description><![CDATA[OpenAtom OpenHarmony, an open-source open-source police terminal based on OpenHarmony has now been unveiled.]]></description><link>https://www.harmony-developers.com/p/the-mobile-police-terminal-based</link><guid isPermaLink="false">https://www.harmony-developers.com/p/the-mobile-police-terminal-based</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Wed, 14 May 2025 12:53:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NKZO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53686f47-d6d2-4b86-812f-c9d084efd70e_1080x810.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://www.ithome.com/">IT Home</a> reported on May 14 that according to OpenAtom OpenHarmony, an <strong>open-source open-source police terminal based on</strong> OpenHarmony has now been unveiled.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NKZO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53686f47-d6d2-4b86-812f-c9d084efd70e_1080x810.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NKZO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53686f47-d6d2-4b86-812f-c9d084efd70e_1080x810.webp 424w, https://substackcdn.com/image/fetch/$s_!NKZO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53686f47-d6d2-4b86-812f-c9d084efd70e_1080x810.webp 848w, https://substackcdn.com/image/fetch/$s_!NKZO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53686f47-d6d2-4b86-812f-c9d084efd70e_1080x810.webp 1272w, https://substackcdn.com/image/fetch/$s_!NKZO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53686f47-d6d2-4b86-812f-c9d084efd70e_1080x810.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NKZO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53686f47-d6d2-4b86-812f-c9d084efd70e_1080x810.webp" width="1080" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53686f47-d6d2-4b86-812f-c9d084efd70e_1080x810.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:&quot;&#22522;&#20110;&#24320;&#28304;&#40511;&#33945;&#30340;&#31227;&#21160;&#35686;&#21153;&#32456;&#31471;&#20142;&#30456;&#65292;&#36866;&#37197; OpenHarmony 5.0 Release &#29256;&#26412;&#21644;&#35686;&#40511;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="&#22522;&#20110;&#24320;&#28304;&#40511;&#33945;&#30340;&#31227;&#21160;&#35686;&#21153;&#32456;&#31471;&#20142;&#30456;&#65292;&#36866;&#37197; OpenHarmony 5.0 Release &#29256;&#26412;&#21644;&#35686;&#40511;" srcset="https://substackcdn.com/image/fetch/$s_!NKZO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53686f47-d6d2-4b86-812f-c9d084efd70e_1080x810.webp 424w, https://substackcdn.com/image/fetch/$s_!NKZO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53686f47-d6d2-4b86-812f-c9d084efd70e_1080x810.webp 848w, https://substackcdn.com/image/fetch/$s_!NKZO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53686f47-d6d2-4b86-812f-c9d084efd70e_1080x810.webp 1272w, https://substackcdn.com/image/fetch/$s_!NKZO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53686f47-d6d2-4b86-812f-c9d084efd70e_1080x810.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>According to reports, mobile police terminal products based on open source Hongmeng are widely used in the following scenarios:</p><ul><li><p>Daily patrol and public security prevention and control: Handheld law enforcement PDA, law enforcement recorder and other equipment support face recognition, license plate capture and real-time video backhaul to help the police complete daily patrol and public security prevention and control.</p></li><li><p>Emergency response and counter-terrorism: In emergencies, terminals support multi-modal communication and multi-department coordinated operations.</p></li><li><p>Smart case handling and administrative quick handling are applied to functions such as electronic transcription, video inquiry, and automatic document generation.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LGbN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf99ab7-7b09-4487-beea-bf478fd2fb76_1080x810.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LGbN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf99ab7-7b09-4487-beea-bf478fd2fb76_1080x810.webp 424w, https://substackcdn.com/image/fetch/$s_!LGbN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf99ab7-7b09-4487-beea-bf478fd2fb76_1080x810.webp 848w, https://substackcdn.com/image/fetch/$s_!LGbN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf99ab7-7b09-4487-beea-bf478fd2fb76_1080x810.webp 1272w, https://substackcdn.com/image/fetch/$s_!LGbN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf99ab7-7b09-4487-beea-bf478fd2fb76_1080x810.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LGbN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf99ab7-7b09-4487-beea-bf478fd2fb76_1080x810.webp" width="1080" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3cf99ab7-7b09-4487-beea-bf478fd2fb76_1080x810.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:&quot;&#22522;&#20110;&#24320;&#28304;&#40511;&#33945;&#30340;&#31227;&#21160;&#35686;&#21153;&#32456;&#31471;&#20142;&#30456;&#65292;&#36866;&#37197; OpenHarmony 5.0 Release &#29256;&#26412;&#21644;&#35686;&#40511;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="&#22522;&#20110;&#24320;&#28304;&#40511;&#33945;&#30340;&#31227;&#21160;&#35686;&#21153;&#32456;&#31471;&#20142;&#30456;&#65292;&#36866;&#37197; OpenHarmony 5.0 Release &#29256;&#26412;&#21644;&#35686;&#40511;" srcset="https://substackcdn.com/image/fetch/$s_!LGbN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf99ab7-7b09-4487-beea-bf478fd2fb76_1080x810.webp 424w, https://substackcdn.com/image/fetch/$s_!LGbN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf99ab7-7b09-4487-beea-bf478fd2fb76_1080x810.webp 848w, https://substackcdn.com/image/fetch/$s_!LGbN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf99ab7-7b09-4487-beea-bf478fd2fb76_1080x810.webp 1272w, https://substackcdn.com/image/fetch/$s_!LGbN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cf99ab7-7b09-4487-beea-bf478fd2fb76_1080x810.webp 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>IT Home learned from the Open Atom Open Source Foundation that the series of products <strong>are based on the chip certified by industry specifications and the FlyHong OS Smart system, and</strong> are adapted to the OpenHarmony 5.0 Release version and Jinghong.</p><ul><li><p>There is a full-process security protection, based on the chip certified by industry standards, using hardware encryption, trusted boot, data isolation and other technologies, in line with the Ministry of Public Security's mobile police terminal security specifications, to ensure system security.</p></li><li><p>Based on the distributed soft bus technology of open-source HarmonyOS, it builds efficient and secure cross-terminal collaboration capabilities.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QNFS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b4431-990d-49ac-8283-f27c4e01b617_1080x810.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QNFS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b4431-990d-49ac-8283-f27c4e01b617_1080x810.webp 424w, https://substackcdn.com/image/fetch/$s_!QNFS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b4431-990d-49ac-8283-f27c4e01b617_1080x810.webp 848w, https://substackcdn.com/image/fetch/$s_!QNFS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b4431-990d-49ac-8283-f27c4e01b617_1080x810.webp 1272w, https://substackcdn.com/image/fetch/$s_!QNFS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b4431-990d-49ac-8283-f27c4e01b617_1080x810.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QNFS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b4431-990d-49ac-8283-f27c4e01b617_1080x810.webp" width="1080" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/885b4431-990d-49ac-8283-f27c4e01b617_1080x810.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:&quot;&#22522;&#20110;&#24320;&#28304;&#40511;&#33945;&#30340;&#31227;&#21160;&#35686;&#21153;&#32456;&#31471;&#20142;&#30456;&#65292;&#36866;&#37197; OpenHarmony 5.0 Release &#29256;&#26412;&#21644;&#35686;&#40511;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="&#22522;&#20110;&#24320;&#28304;&#40511;&#33945;&#30340;&#31227;&#21160;&#35686;&#21153;&#32456;&#31471;&#20142;&#30456;&#65292;&#36866;&#37197; OpenHarmony 5.0 Release &#29256;&#26412;&#21644;&#35686;&#40511;" srcset="https://substackcdn.com/image/fetch/$s_!QNFS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b4431-990d-49ac-8283-f27c4e01b617_1080x810.webp 424w, https://substackcdn.com/image/fetch/$s_!QNFS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b4431-990d-49ac-8283-f27c4e01b617_1080x810.webp 848w, https://substackcdn.com/image/fetch/$s_!QNFS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b4431-990d-49ac-8283-f27c4e01b617_1080x810.webp 1272w, https://substackcdn.com/image/fetch/$s_!QNFS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F885b4431-990d-49ac-8283-f27c4e01b617_1080x810.webp 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Source: <a href="https://www.ithome.com/0/852/819.htm">The mobile police terminal based on the open source HarmonyOS was unveiled, adapted to the OpenHarmony 5.0 Release version and the Police Harmony - IT Home </a></p>]]></content:encoded></item><item><title><![CDATA[Building a Note App With ArkUI and ArkTS on HarmonyOS]]></title><description><![CDATA[In this article, we&#8217;ll walk through the creation of a simple Note App using ArkUI and ArkTS on HarmonyOS.]]></description><link>https://www.harmony-developers.com/p/building-a-note-app-with-arkui-and</link><guid isPermaLink="false">https://www.harmony-developers.com/p/building-a-note-app-with-arkui-and</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Mon, 12 May 2025 19:00:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!b-Ij!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23979a42-20d2-41c6-9ced-5b3c7133a820_875x657.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!b-Ij!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23979a42-20d2-41c6-9ced-5b3c7133a820_875x657.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!b-Ij!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23979a42-20d2-41c6-9ced-5b3c7133a820_875x657.jpeg 424w, https://substackcdn.com/image/fetch/$s_!b-Ij!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23979a42-20d2-41c6-9ced-5b3c7133a820_875x657.jpeg 848w, https://substackcdn.com/image/fetch/$s_!b-Ij!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23979a42-20d2-41c6-9ced-5b3c7133a820_875x657.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!b-Ij!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23979a42-20d2-41c6-9ced-5b3c7133a820_875x657.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!b-Ij!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23979a42-20d2-41c6-9ced-5b3c7133a820_875x657.jpeg" width="875" height="657" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23979a42-20d2-41c6-9ced-5b3c7133a820_875x657.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:657,&quot;width&quot;:875,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!b-Ij!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23979a42-20d2-41c6-9ced-5b3c7133a820_875x657.jpeg 424w, https://substackcdn.com/image/fetch/$s_!b-Ij!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23979a42-20d2-41c6-9ced-5b3c7133a820_875x657.jpeg 848w, https://substackcdn.com/image/fetch/$s_!b-Ij!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23979a42-20d2-41c6-9ced-5b3c7133a820_875x657.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!b-Ij!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23979a42-20d2-41c6-9ced-5b3c7133a820_875x657.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@aaronburden?utm_source=medium&amp;utm_medium=referral">Aaron Burden</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure></div><h1><strong>Introduction</strong></h1><p>In this article, we&#8217;ll walk through the creation of a simple Note App using <strong>ArkUI</strong> and <strong>ArkTS</strong> on <strong>HarmonyOS</strong>. We&#8217;ll demonstrate how ArkUI&#8217;s modern UI capabilities integrate seamlessly with a relational database for efficient data management. By the end of this guide, you&#8217;ll have a foundational understanding of how to develop a functional app that allows users to add, update, delete, and view notes in a local database.</p><h1><strong>Understanding HarmonyOS and its Development Tools</strong></h1><p>HarmonyOS, developed by Huawei, is designed to provide a seamless experience across a wide range of devices, from smartphones to wearables and smart home products. For developers, HarmonyOS offers a robust set of tools and APIs optimized for creating apps within this ecosystem.</p><p>Key tools for HarmonyOS app development include:</p><ul><li><p><strong>ArkUI</strong>: A UI framework for building modern, dynamic user interfaces that allow for easy navigation and interaction.</p></li><li><p><strong>ArkTS</strong>: A TypeScript-based programming language specifically tailored for HarmonyOS, providing syntax to work with ArkUI and integrate seamlessly with the system&#8217;s APIs.</p></li></ul><p>In this tutorial, we&#8217;ll focus on using <strong>ArkUI</strong> and <strong>ArkTS</strong> to build our Note App, creating a responsive and smooth experience for users on HarmonyOS.</p><h1><strong>What You Need to Get Started with HarmonyOS App Development</strong></h1><p>To start developing apps for HarmonyOS, you will need the HarmonyOS SDK and DevEco Studio, which is the recommended IDE. DevEco Studio simplifies the app creation process, from building and debugging to testing.</p><p>The SDK provides tools in the following key areas:</p><ul><li><p><strong>Application Framework</strong>: Includes ArkUI for UI development and Ability Kit for program services.</p></li><li><p><strong>System Services</strong>: Key management and networking libraries.</p></li><li><p><strong>Media Services</strong>: Tools for managing audio and media files.</p></li><li><p><strong>Graphics Services</strong>: ArkGraphics for 2D graphics and acceleration.</p></li><li><p><strong>Application Services</strong>: Libraries for game and location services.</p></li><li><p><strong>AI Capabilities</strong>: AI tools like the HiAI Foundation Kit.</p></li></ul><p>These tools allow developers to create powerful, cross-platform apps that provide a consistent experience across HarmonyOS devices.</p><h1><strong>App Overview</strong></h1><p>Now that we&#8217;ve covered the basics of HarmonyOS development, let&#8217;s dive into building our Note App using ArkUI and ArkTS. This Note App provides an intuitive, minimalist user interface with a tabbed layout. Users can easily navigate through different sections to add, view, update, and delete notes.</p><p>The app&#8217;s core features are organized under various tabs, offering a streamlined and straightforward experience. Users can quickly manage their notes, making the app ideal for everyday use.</p><p><strong>Note</strong>: To build this app, you should use SDK 5.0.0 (12) as the framework and DevEco Studio NEXT Developer Beta1 as the development environment.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PByG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1faad8e7-2585-4445-8d8c-bd16e91d0731_795x713.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PByG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1faad8e7-2585-4445-8d8c-bd16e91d0731_795x713.png 424w, https://substackcdn.com/image/fetch/$s_!PByG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1faad8e7-2585-4445-8d8c-bd16e91d0731_795x713.png 848w, https://substackcdn.com/image/fetch/$s_!PByG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1faad8e7-2585-4445-8d8c-bd16e91d0731_795x713.png 1272w, https://substackcdn.com/image/fetch/$s_!PByG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1faad8e7-2585-4445-8d8c-bd16e91d0731_795x713.png 1456w" sizes="auto, 100vw"><img src="https://substackcdn.com/image/fetch/$s_!PByG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1faad8e7-2585-4445-8d8c-bd16e91d0731_795x713.png" width="795" height="713" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1faad8e7-2585-4445-8d8c-bd16e91d0731_795x713.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:713,&quot;width&quot;:795,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!PByG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1faad8e7-2585-4445-8d8c-bd16e91d0731_795x713.png 424w, https://substackcdn.com/image/fetch/$s_!PByG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1faad8e7-2585-4445-8d8c-bd16e91d0731_795x713.png 848w, https://substackcdn.com/image/fetch/$s_!PByG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1faad8e7-2585-4445-8d8c-bd16e91d0731_795x713.png 1272w, https://substackcdn.com/image/fetch/$s_!PByG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1faad8e7-2585-4445-8d8c-bd16e91d0731_795x713.png 1456w" sizes="auto, 100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">App Overview</figcaption></figure></div><h1><strong>Preparing Database Operations</strong></h1><p>Before diving into the UI, let&#8217;s set up the database operations that our Note app will rely on for data management. In this section, we&#8217;ll create functions to create, insert, update, delete, and retrieve notes from a local database.</p><h2><strong>Step 1: Create the Database</strong></h2><p>Start by creating a new file named <strong>DBUtils</strong> to encapsulate all database operations. We&#8217;ll use ArkData relational database (RDB) APIs in DBUtils.</p><p>In <strong>DBUtils</strong>, we&#8217;ll define functions for each key operation in our Note app.</p><p>The<strong> createDb() </strong>function defines the database configuration (<code>STORE_CONFIG</code>) and creates a table named <code>NOTE_TABLE</code> if it doesn&#8217;t already exist. This ensures our database is ready for subsequent operations.</p><h2><strong>Step 2: Insert a New Note</strong></h2><p>The <strong>insertNote()</strong> function inserts a new note into the <code>NOTE_TABLE</code> by creating a <code>noteData</code> object, where <strong>"NOTE"</strong> is the column name, and its value is the note content.</p><h2><strong>Step 3: Update an Existing Note</strong></h2><p>The <strong>updateNote()</strong> function updates an existing note in the <code>NOTE_TABLE</code>. It creates an <code>updatedNoteData</code> object with the new content and applies a condition to match the old content.</p><h2><strong>Step 4: Delete a Note</strong></h2><p>The <strong>deleteNote()</strong> function deletes a note from the <code>NOTE_TABLE</code>. It creates a delete condition based on the note content and executes the delete operation.</p><h2><strong>Step 5: Get All Notes</strong></h2><p>The <strong>getAllNotes()</strong> function retrieves all notes from the <code>NOTE_TABLE</code>. It queries the database and extracts the note content into a list of notes, which is then returned.</p><h1><strong>Integrating Database Operations in UI Component</strong></h1><p>Now that our database is set up, we can focus on the UI component, where users will interact with the app, view their notes, and manage them through a tabbed interface.</p><h2><strong>Step 1: Initial Setup in Index.ets</strong></h2><p>In the <strong>Index.ets</strong> file, we initialize core UI elements, tabs, and set up initial states.</p><p><strong>State Variables</strong>:</p><ul><li><p><strong>currentIndex</strong>: Keeps track of the current tab.</p></li><li><p><strong>notes</strong>: Stores the list of notes fetched from the database.</p></li><li><p><strong>content</strong>, <strong>buttonText</strong>, <strong>oldNote</strong>: Used for managing note input, button labels, and previous note content for updates.</p></li></ul><h2><strong>Step 2: Initializing the Database</strong></h2><p>The <strong>aboutToAppear()</strong> method initializes the database when the component first loads. This lifecycle method ensures that the database setup happens just before the app appears on the screen.</p><h2><strong>Step 3: Loading Notes with loadNotes</strong></h2><p>The <strong>loadNotes()</strong> function uses the <strong>getAllNotes()</strong> method from <strong>DBUtils</strong> to fetch all notes from the database. It then updates the <code>notes</code> state with the list of notes.</p><h2><strong>Step 4: Handling Tabs with </strong><code>changeTab</code></h2><p>The <code>changeTab</code> function is responsible for switching between different tabs (e.g., &#8220;Add Note&#8221; and &#8220;My Notes&#8221;).</p><h2><strong>Step 5: Building the Tab Bar with tabBarBuilder</strong></h2><p>The <strong>tabBarBuilder()</strong> function creates a tab bar with icons and titles for each tab. It allows users to navigate between tabs and highlights the active tab.</p><h2><strong>Step 6: Saving or Updating Notes with saveOrUpdateNote</strong></h2><p>The <strong>saveOrUpdateNote()</strong> function checks whether to save a new note or update an existing one based on the input and button state (&#8220;Save&#8221; or &#8220;Update&#8221;).</p><p>The function:</p><ul><li><p>Ensures the content isn&#8217;t empty.</p></li><li><p>In the update flow, calls <strong>updateNote()</strong> to modify the note in the database and refresh the list.</p></li><li><p>In the save flow, calls <strong>insertNote()</strong> to add the note to the database.</p></li><li><p>Calls <strong>resetNoteState()</strong> to clear input fields after saving or updating.</p></li></ul><p>Now that all steps have been covered, we hope this guide has provided a clear and complete path to building your own Note App on HarmonyOS.</p><h1><strong>Conclusion</strong></h1><p>This Note App demonstrates how to build a functional, user-friendly app using <strong>ArkUI</strong> and <strong>ArkTS</strong> on HarmonyOS. By combining ArkUI&#8217;s component-based UI design with ArkTS&#8217;s powerful data management capabilities, developers can efficiently create apps that deliver smooth and responsive user experiences. With this foundational structure, you are now ready to extend your app with more advanced features or customizations that meet your users&#8217; needs.</p><p>Happy coding!</p><p></p><p>Original Source: <a href="https://medium.com/huawei-developers/building-a-note-app-with-arkui-and-arkts-on-harmonyos-67fd7c4c1086">Building a Note App With ArkUI and ArkTS on HarmonyOS | by Emine &#304;NAN | Huawei Developers | Medium</a></p><h1></h1>]]></content:encoded></item><item><title><![CDATA[The Road to Globalization of HarmonyOS Next Applications: Internationalization and Localization ]]></title><description><![CDATA[This article aims to deeply explore the technical details of the Huawei HarmonyOS Next system (up to API 12 as of now) in terms of application internationalization and localization, and is summarized]]></description><link>https://www.harmony-developers.com/p/the-road-to-globalization-of-harmonyos</link><guid isPermaLink="false">https://www.harmony-developers.com/p/the-road-to-globalization-of-harmonyos</guid><dc:creator><![CDATA[Harmony OS Developers]]></dc:creator><pubDate>Sun, 11 May 2025 08:42:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/2ab6a346-c588-44ae-8a57-0f42532ddfb5_971x593.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>This article aims to deeply explore the technical details of the Huawei HarmonyOS Next system (up to API 12 as of now) in terms of application internationalization and localization, and is summarized based on actual development practices. It mainly serves as a carrier for technical sharing and communication. Mistakes and omissions are inevitable. Colleagues are welcome to put forward valuable opinions and questions so that we can make progress together. This article is original content, and any form of reprint must indicate the source and the original author.<br>In today's era of globalization, application internationalization and localization have become key factors in enhancing user experience and expanding market share. The Huawei HarmonyOS Next system provides powerful tools and functions for developers to help create cross-language and cross-cultural applications. This article will introduce in detail the concepts, advantages, processes, and key steps of internationalization and localization of HarmonyOS Next applications, helping developers embark on the road to application globalization.</p><h2><strong>I. Concepts and Differences between Internationalization and Localization</strong></h2><h3><strong>(I) Internationalization (Internationalization, I18n)</strong></h3><p>Internationalization refers to the process of designing and developing an application so that it can adapt to different languages, regions, and cultures. It involves not only simple language translation but also the adaptation of various formats such as dates, times, numbers, currencies, weights and measures, as well as the universal design of interface layouts, icons, colors, and other elements. The goal of internationalization is to create an application that can be used globally without extensive code modifications. For example, in an internationalized application, the date format may be displayed in different styles depending on the user's region, such as "YYYY-MM-DD" (China) or "MM/DD/YYYY" (United States).</p><h3><strong>(II) Localization (Localization, L10n)</strong></h3><p>Localization is the process of customizing and optimizing an application for a specific target language and region on the basis of internationalization. This includes translating the interface text of the application into the local language, adjusting the interface layout to adapt to different text lengths and reading habits, and using local cultural elements and symbols. Localization ensures that the application can provide a natural, smooth, and user-expected experience in each target market. For example, when localizing an English application to Japan, not only should the text be translated into Japanese, but the interface layout may also need to be adjusted to adapt to the display of Japanese characters, and Japanese cultural elements may be used to enhance user affinity.</p><h3><strong>(III) Differences between the Two</strong></h3><p>Internationalization focuses on building the general framework and infrastructure of an application to enable it to support multiple languages and cultures; while localization is the personalized adaptation and optimization of an application for specific languages and regions. Internationalization is a global and forward-looking design concept, while localization is the actual implementation for specific markets on the basis of internationalization.</p><h2><strong>II. Advantages of Internationalization and Localization of HarmonyOS Next Applications</strong></h2><h3><strong>(I) Expanding the Global Market</strong></h3><p>Through internationalization and localization, applications can break through language and cultural barriers, attract users from different countries and regions, greatly expand market coverage, and increase the potential user base.</p><h3><strong>(II) Enhancing User Experience</strong></h3><p>Providing users with interfaces and functions that conform to their language habits and cultural backgrounds enables them to use the application more naturally and conveniently, thereby increasing user satisfaction and loyalty.</p><h3><strong>(II) Strengthening Competitiveness</strong></h3><p>In the global market competition, applications with internationalization and localization capabilities have an advantage, can better meet user needs, compete with local competitors, and enhance brand image and market share.</p><h3><strong>(IV) Reducing Development Costs</strong></h3><p>Adopting internationalization and localization design methods and following certain norms and standards during the development process can reduce the costs of separate development and maintenance for different languages and regions in the later stage.</p><h2><strong>III. Processes of Internationalization and Localization of HarmonyOS Next Applications</strong></h2><h3><strong>(I) Requirement Analysis</strong></h3><ol><li><p><strong>Target Market Research</strong>: Understand the potential markets of the application, including factors such as languages, cultures, user habits, and laws and regulations in different regions. For example, certain regions may have different cultural meanings for specific colors or icons, which need to be considered in the design.</p></li><li><p><strong>Function Requirement Evaluation</strong>: Determine the functions that the application needs to support in different language and cultural environments, such as multi-language input, payment methods in different regions, and localized push notifications. ### (II) Design Stage</p></li><li><p><strong>Interface Layout Design</strong>: Adopt a flexible layout method and reserve sufficient space to adapt to the length changes of different language texts. At the same time, consider functions such as interface mirroring to support the display requirements of right-to-left (RTL) languages such as Arabic.</p></li><li><p><strong>Resource Separation</strong>: Separate interface texts, pictures, audio, and other resources from the code logic to facilitate subsequent translation and replacement. For example, store all string resources in independent files instead of hard-coding them in the code. ### (III) Development Stage</p></li><li><p><strong>Using the Internationalization Framework</strong>: Utilize the internationalization and localization development services provided by HarmonyOS Next, such as the <code>Localization Kit</code>, to perform language and region-related settings, resource loading, and format conversions.</p></li><li><p><strong>Function Implementation and Adaptation</strong>: According to the requirement analysis, implement functions that support multiple languages, such as displaying the corresponding interface according to the user's language setting and handling date and time formats in different regions. ### (IV) Testing Stage</p></li><li><p><strong>Language Testing</strong>: Have local language experts or users test the translation accuracy, language fluency, and interface display of the application to ensure the quality of the application in different language environments.</p></li><li><p><strong>Localization Testing</strong>: Include interface layout testing, function compatibility testing, and cultural adaptability testing to check whether the application can operate normally in each target region and meet the expectations of local users.</p></li><li><p><strong>Pseudo-Localization Testing</strong>: Before formal localization, simulate the localization process by using pseudo-translated texts and special test regions (such as <code>en-XA</code>) to discover potential localization problems such as interface truncation and incorrect text direction. ### (V) Release and Maintenance Stage</p></li><li><p><strong>Multi-Language Version Release</strong>: Release the application in corresponding language versions according to different target markets.</p></li><li><p><strong>Continuous Optimization</strong>: Collect user feedback, promptly fix localization-related problems, and continuously update and optimize the internationalization and localization content of the application according to market changes and user needs. ## IV. Key Steps of Internationalization and Localization of HarmonyOS Next Applications ### (I) Setting the System Language and Region</p></li><li><p><strong>Obtaining the System Language and Region</strong>: Use the methods <code>i18n.System.getSystemLanguage()</code> and <code>i18n.System.getSystemRegion()</code> to obtain the language and region information of the current system.</p></li><li><p><strong>Setting the Application Preferred Language</strong>: The method <code>i18n.System.setAppPreferredLanguage()</code> can be used to set a specific preferred language for the application, so that the application loads the corresponding resources according to the user's setting or the default language when it starts. For example:</p></li></ol></blockquote><pre><code><code>import { i18n } from '@kit.LocalizationKit';
import {BusinessError } from '@kit.BasicServicesKit';
try {
    i18n.System.setAppPreferredLanguage("zh-Hans"); // Set the application preferred language to Simplified Chinese
} catch(error) {
    let err: BusinessError = error as BusinessError;
    console.error(`Failed to set the application preferred language, error code: ${err.code}, message: ${err.message}.`);
}
</code></code></pre><h3><strong>(II) Resource File Configuration and Management</strong></h3><ol><li><p><strong>Determining the Target Region</strong>: Clearly define the languages and regions that the application needs to support, referring to the region identifier (consisting of language, script, country/region, and extension parameters).</p></li><li><p><strong>Creating Resource Directories and Files</strong>: - Resource directories include the default (<code>base</code>) directory and qualifier directories (such as <code>resources/en_GB-vertical-car-mdpi</code>). The default directory stores general resources, and the qualifier directories are customized according to languages, scripts, etc., and are used to store resources for specific regions. - Create resource files (such as <code>.json</code> files) in the corresponding directories and classify and store resources such as strings, pictures, and audio. For example, store string resources in different languages in the <code>strings.json</code> file in the corresponding language directory.</p></li><li><p><strong>Resource Matching Rules</strong>: The application matches the user's language preference list with the resource directories and displays the most matching resources first. If no matching resources are found, the content in the default directory is used. ### (III) Interface Text Processing</p></li><li><p><strong>Avoiding Hard Coding</strong>: Extract all the text displayed on the interface to resource files and load them using relevant interfaces, avoiding directly hard-coding strings in the code. For example, define in the <code>strings.json</code> file:</p></li></ol><pre><code><code>{
    "name": "welcome_message",
    "value": "&#27426;&#36814;&#20351;&#29992;&#24212;&#29992;"
}
</code></code></pre><p>Then obtain and display this string in the code through the resource loading mechanism.</p><ol><li><p><strong>Supporting Singular and Plural Forms</strong>: According to the singular and plural rules of different languages, use methods such as <code>getPluralStringValueSync</code> to correctly handle the singular and plural forms of nouns or unit expressions. For example, in English, for the word "apple", display "apple" (singular) or "apples" (plural) depending on the quantity. ### (IV) Internationalization of Dates, Times, Numbers, and Weights and Measures</p></li><li><p><strong>Date and Time Formatting</strong>: - Use the <code>format</code> interface of the <code>DateTimeFormat</code> class to format date and time objects into appropriate strings according to the language and cultural habits of the user's region. For example:</p></li></ol><pre><code><code>import { intl } from '@kit.LocalizationKit';
let date = new Date(2021, 8, 17, 13, 4, 0);
let dateFormat1 = new intl.DateTimeFormat('zh-CN', {dateStyle: 'full', timeStyle: 'full'});
let formattedDate1 = dateFormat1.format(date); // Friday, September 17, 2021 China Standard Time 13:04:00
</code></code></pre><p>- At the same time, pay attention to handling daylight saving time transitions to ensure that the application displays the correct time during daylight saving time. The <code>Calendar</code> class can be used to obtain and set time zones, calculate time offsets related to daylight saving time, etc.</p><ol><li><p><strong>Number and Weights and Measures Formatting</strong>: - Through the <code>format</code> interface of the <code>NumberFormat</code> class, format numbers according to the user's region settings, including decimal separators, grouped displays, and currency symbols. For example:</p></li></ol><pre><code><code>import { intl } from '@kit.LocalizationKit';
let numberFormat1 = new intl.NumberFormat('zh-CN', {notation:'scientific', maximumSignificantDigits: 3});
let formattedNumber1 = numberFormat1.format(123400); // 1.23E5
</code></code></pre><p>- For weights and measures conversion, use the <code>unitConvert</code> interface of the <code>I18NUtil</code> class to perform unit conversion and formatting according to different weights and measures systems.</p><h3><strong>(V) Localization Testing and Optimization</strong></h3><ol><li><p><strong>Comprehensive Testing</strong>: Conduct language testing, localization testing, and pseudo-localization testing to cover all functions and interface elements of the application. During the testing process, check issues such as translation accuracy, interface layout rationality, and cultural adaptability.</p></li><li><p><strong>Problem Fixing and Optimization</strong>: According to the testing results, promptly fix the discovered problems and optimize the application. This may include adjusting the interface layout, modifying the translation text, optimizing resource loading, etc. At the same time, continuously monitor user feedback and continuously improve the internationalization and localization quality of the application. ### (VI) Continuous Update and Maintenance</p></li><li><p><strong>Language and Resource Updates</strong>: With the changes in the market and the evolution of user needs, promptly update the language resources of the application, including the update of translation texts and the support of new languages.</p></li><li><p><strong>Function Adaptation and Optimization</strong>: According to the user feedback and market needs in different regions, adapt and optimize the functions of the application to ensure that the application always maintains a good user experience globally. Through the above steps, we can gradually realize the internationalization and localization of HarmonyOS Next applications and create high-quality applications that adapt to the global market. In the actual development process, various language and cultural differences need to be fully considered, attention should be paid to details, and continuous optimization should be carried out to meet the diverse needs of users in different regions.</p></li></ol><p>Original source: <a href="https://dev.to/xun_wang_6384a403f9817c2/the-road-to-globalization-of-harmonyos-next-applications-internationalization-and-localization-21om#:~:text=This%20article%20will%20introduce%20in%20detail%20the%20concepts%2C,developers%20embark%20on%20the%20road%20to%20application%20globalization.">The Road to Globalization of HarmonyOS Next Applications: Internationalization and Localization - DEV Community</a></p>]]></content:encoded></item></channel></rss>