<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://wiki.devilplan.com/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://wiki.devilplan.com/feed.php">
        <title>Luci4 Wiki Blog</title>
        <description></description>
        <link>https://wiki.devilplan.com/</link>
        <image rdf:resource="https://wiki.devilplan.com/_media/wiki:logo.png" />
       <dc:date>2026-04-05T05:42:23+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://wiki.devilplan.com/coding:lua:lgiquickstart"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/sidebar"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/blog:dont_trust_apple"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=blog%3Addog-apple-bl.jpg&amp;ns=blog&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=blog%3Addog-apple.jpg&amp;ns=blog&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=blog%3Addog-notreal2.jpg&amp;ns=blog&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=blog%3Addog-notreal.png&amp;ns=blog&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=blog%3Atech%3Addog-chess.jpg&amp;ns=blog%3Atech&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=blog%3Addog-liveforever.png&amp;ns=blog&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=blog%3Addog-life-english.png&amp;ns=blog&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=0%3Adokuwiki.svg&amp;ns=0&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=wiki%3Adokuwiki.svg&amp;ns=wiki&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=wiki%3Afavicon.svg&amp;ns=wiki&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=wiki%3Alogo.png&amp;ns=wiki&amp;do=media"/>
                <rdf:li rdf:resource="https://wiki.devilplan.com/?image=wiki%3Aic_speaker_colored_432px.svg&amp;ns=wiki&amp;do=media"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://wiki.devilplan.com/_media/wiki:logo.png">
        <title>Luci4 Wiki Blog</title>
        <link>https://wiki.devilplan.com/</link>
        <url>https://wiki.devilplan.com/_media/wiki:logo.png</url>
    </image>
    <item rdf:about="https://wiki.devilplan.com/coding:lua:lgiquickstart">
        <dc:format>text/html</dc:format>
        <dc:date>2026-03-18T00:59:39+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>lgiquickstart</title>
        <link>https://wiki.devilplan.com/coding:lua:lgiquickstart</link>
        <description>


&lt;h1 class=&quot;sectionedit1&quot; id=&quot;getting_started_with_lgi_lua_gtk&quot;&gt;Getting Started with LGI (Lua GTK)&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
This tutorial covers everything you need to know to build your first &lt;abbr title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/abbr&gt; application using Lua and the GTK3 toolkit on Linux (I will be assuming Arch Linux, but any distro will work just fine). The focus will be on clean code architecture and understanding the core concepts that often confuse beginners.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Getting Started with LGI (Lua GTK)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;getting_started_with_lgi_lua_gtk&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;12-367&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Before writing code, ensure the environment is set up correctly. Three main components are needed:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;Lua: The programming language interpreter.
GTK3: The underlying C library that draws the windows and widgets (buttons, labels, etc.).
LGI: The Lua binding that allows your Lua code to talk to the GTK C library.&lt;/pre&gt;

&lt;p&gt;
&lt;em&gt;Luarocks (the Lua package manager) will be used for the Lua-specific libraries to ensure we have the most up-to-date version.&lt;/em&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Prerequisites&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;prerequisites&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;368-850&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;installation&quot;&gt;Installation&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
First, ensure you have the necessary system tools and the GTK3 library. Open your terminal:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;
sudo pacman -S vim gtk3 luarocks&lt;/pre&gt;

&lt;p&gt;
Install the Lua bindings using Luarocks. This pulls down the LGI library which bridges Lua and GTK.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;
luarocks install lgi
luarocks install luafilesystem&lt;/pre&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Installation&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;installation&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;851-1175&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;the_mental_modelhow_gtk_works&quot;&gt;The Mental Model: How GTK Works&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Before typing code, it is crucial to understand how GTK (and therefore LGI) structures an application. If you skip this, the code will feel arbitrary.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;The Mental Model: How GTK Works&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_mental_modelhow_gtk_works&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1176-1372&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;widgets&quot;&gt;Widgets&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Everything is a “Widget”. A window is a widget. A button is a widget. A text label is a widget. You build an application by creating widgets and stacking them together.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Widgets&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;widgets&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;1373-1561&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;containers_and_packing&quot;&gt;Containers and Packing&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
A Window widget can only hold one child item.
If you want a window with 5 buttons, you cannot simply “add” 5 buttons to the window. The window will reject them.
Instead, you add a Container (like a Box) to the window, and then you “pack” your 5 buttons into that Box.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4 id=&quot;visual_representation&quot;&gt;Visual Representation&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;Window
    Box (Container)
        Button 1
        Button 2
        Label&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Containers and Packing&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;containers_and_packing&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;1562-1991&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;properties_as_tables&quot;&gt;Properties as Tables&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
In traditional C programming, setting a button label looks like a function: &lt;code&gt;gtk_button_set_label(btn, &amp;quot;Click Me&amp;quot;)&lt;/code&gt;.
In LGI Lua, we use a cleaner object-oriented style. Properties are treated like table fields:
&lt;/p&gt;
&lt;pre class=&quot;code lua&quot;&gt;btn&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;label &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Click Me&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Properties as Tables&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;properties_as_tables&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:2,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;1992-2281&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit8&quot; id=&quot;first_application&quot;&gt;First Application&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
We will build a simple “Greeter” application. It will have a text input field, a button, and a result label.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;First Application&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;first_application&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;2282-2422&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;project_setup&quot;&gt;Project Setup&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Create a directory for your project to keep things organized. We will use Vim to create and edit our main file.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;mkdir lua_greeter
cd lua_greeter
vim main.lua&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Project Setup&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;project_setup&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;2423-2621&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit10&quot; id=&quot;writing_the_code&quot;&gt;Writing the Code&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Paste the following code in vim. Read the comments (lines starting with –) to understand what each part does.
&lt;/p&gt;
&lt;pre class=&quot;code lua&quot;&gt;&lt;span class=&quot;co1&quot;&gt;-- 1. LOAD THE LIBRARY&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;local&lt;/span&gt; lgi &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;lgi&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;local&lt;/span&gt; Gtk &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; lgi&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Gtk&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;3.0&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- 2. INITIALIZE GTK&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- This function checks the system environment and prepares the GTK engine.&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- It must be called before creating any widgets.&lt;/span&gt;
Gtk&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;init&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- 3. CREATE THE MAIN WINDOW&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;local&lt;/span&gt; window &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Gtk&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;Window &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    title &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;My First LGI App&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    default_width &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;400&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    default_height &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- CONNECTING SIGNALS:&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- When the user clicks the &#039;X&#039; button, the &#039;destroy&#039; signal is emitted.&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- We connect this directly to Gtk.main_quit to stop the application loop.&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- Without this, the window would close, but the process would keep running in the background.&lt;/span&gt;
on_destroy &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Gtk&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;main_quit
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- 4. CREATE CONTAINERS&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- Since a Window can only hold one item, we create a vertical Box.&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- This Box will stack our items top-to-bottom.&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;local&lt;/span&gt; vbox &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Gtk&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;Box &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    orientation &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;VERTICAL&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
    spacing &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;         &lt;span class=&quot;co1&quot;&gt;-- 10 pixels of space between children&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- Margins create padding around the edges of the box inside the window&lt;/span&gt;
margin_top &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
margin_bottom &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
margin_start &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt;
margin_end &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;20&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- 5. CREATE WIDGETS&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;local&lt;/span&gt; entry &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Gtk&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;Entry &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    placeholder_text &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Type your name here...&amp;quot;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;local&lt;/span&gt; btn &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Gtk&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;Button &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    label &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Greet Me&amp;quot;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;local&lt;/span&gt; resultLabel &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; Gtk&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;Label &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    label &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Result will appear here...&amp;quot;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- 6. DEFINE LOGIC (SIGNAL HANDLERS)&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- We define what happens when the button is clicked.&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- &#039;on_clicked&#039; is a special event listener built into Gtk.Button.&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;function&lt;/span&gt; btn&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;on_clicked&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;local&lt;/span&gt; name &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; entry&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;text &lt;span class=&quot;co1&quot;&gt;-- Access the text property of the entry widget&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; name &lt;span class=&quot;sy0&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;then&lt;/span&gt;
    resultLabel&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;label &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Please enter a name!&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;
    resultLabel&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;label &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;Hello, &amp;quot;&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;..&lt;/span&gt; name &lt;span class=&quot;sy0&quot;&gt;..&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;!&amp;quot;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;end&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw1&quot;&gt;end&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- 7. ASSEMBLE THE UI&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- We use pack_start to add widgets to our Box container.&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- Syntax: box:pack_start(widget, expand, fill, padding)&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- expand (false): Should this widget take up all extra vertical space? (No)&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- fill (false): If expanded, should the widget fill that space? (No)&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- padding (0): Extra pixels outside the widget.&lt;/span&gt;
&amp;nbsp;
vbox&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;pack_start&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;entry&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
vbox&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;pack_start&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;btn&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- For the label, we set expand to &#039;true&#039;. It will take all remaining empty space.&lt;/span&gt;
vbox&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;pack_start&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;resultLabel&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- Finally, add the fully populated Box to the Window.&lt;/span&gt;
window&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;add&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;vbox&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- 8. RUN THE APPLICATION&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- show_all() renders the window and all its children.&lt;/span&gt;
window&lt;span class=&quot;sy0&quot;&gt;:&lt;/span&gt;show_all&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;-- Gtk.main() starts the Event Loop.&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- The program pauses here and waits for user actions (clicks, key presses).&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;-- It will only exit when Gtk.main_quit() is called.&lt;/span&gt;
Gtk&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;main&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
Press Esc to exit Insert Mode, then type :wq and press Enter to save and quit Vim.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Writing the Code&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;writing_the_code&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;2622-5462&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit11&quot; id=&quot;running_the_application&quot;&gt;Running the Application&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Back in the terminal, run your script with the Lua interpreter:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;lua main.lua&lt;/pre&gt;

&lt;p&gt;
You should see a native Linux window appear. Try typing your name and clicking the button.
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Running the Application&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;running_the_application&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:5,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;5463-5686&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit12&quot; id=&quot;key_concepts_deep_dive&quot;&gt;Key Concepts Deep Dive&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Key Concepts Deep Dive&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;key_concepts_deep_dive&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;5687-5722&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit13&quot; id=&quot;the_event_loop&quot;&gt;The Event Loop&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
You will notice that the script does not finish execution immediately. It hangs at the line Gtk.main(). This is intentional.
&lt;/p&gt;

&lt;p&gt;
&lt;abbr title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/abbr&gt; applications are event-driven. They do not run linearly from start to finish; they wait. The Gtk.main() function creates a loop that constantly listens for events (mouse movements, clicks, system redraw requests). The program sleeps inside this loop until an event occurs.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;The Event Loop&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;the_event_loop&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;5723-6152&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit14&quot; id=&quot;layout_management_packing&quot;&gt;Layout Management (Packing)&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
The pack_start function is the heart of GTK layout. It determines how widgets behave when you resize the window.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;Expand (true/false): Does the widget grow if the window gets larger?
Fill (true/false): If the widget grows, does the content fill the new space, or does the widget just float in the center?&lt;/pre&gt;

&lt;p&gt;
Example:
If you set a Button to expand=true and fill=false, the button would stay its normal size but float in the middle of a large empty space when you maximize the window.
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Layout Management (Packing)&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;layout_management_packing&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;6153-6686&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit15&quot; id=&quot;finding_documentation&quot;&gt;Finding Documentation&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
LGI documentation is sparse, but you can use the official GTK3 C documentation and “translate” it to Lua mentally.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;C Syntax: gtk_button_new_with_label(&amp;quot;Hello&amp;quot;)

Lua Syntax: Gtk.Button { label = &amp;quot;Hello&amp;quot; }

C Syntax: gtk_window_set_title(win, &amp;quot;Title&amp;quot;)

Lua Syntax: window.title = &amp;quot;Title&amp;quot;&lt;/pre&gt;

&lt;p&gt;
Resource: Search for GTK3 Reference Manual online. It lists all widgets (Buttons, ComboBoxes, Scrollbars) and their properties, which apply directly to LGI.
&lt;/p&gt;
&lt;hr /&gt;
&lt;dl class=&quot;file&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wiki.devilplan.com/_export/code/coding:lua:lgiquickstart?codeblock=6&quot; title=&quot;Download Snippet&quot; class=&quot;mediafile mf_cpp&quot;&gt;snippet.cpp&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code file cpp&quot;&gt;by&lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt;
▖     ▘▖▖
▌ ▌▌▛▘▌▙▌
▙▖▙▌▙▖▌ ▌
&amp;nbsp;
written&lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt; February &lt;span class=&quot;nu0&quot;&gt;25&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2026&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Finding Documentation&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;finding_documentation&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:6,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;6687-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/sidebar">
        <dc:format>text/html</dc:format>
        <dc:date>2026-02-25T18:53:18+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>sidebar</title>
        <link>https://wiki.devilplan.com/sidebar</link>
        <description>

&lt;div class=&quot;table sectionedit1&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/start&quot; class=&quot;wikilink1&quot; title=&quot;start&quot; data-wiki-id=&quot;start&quot;&gt; 🏠 HOME&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;11-35&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;blog_📝&quot;&gt;Blog  📝&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;div class=&quot;table sectionedit3&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/blog:myth_of_career&quot; class=&quot;wikilink1&quot; title=&quot;blog:myth_of_career&quot; data-wiki-id=&quot;blog:myth_of_career&quot;&gt; 💭 The Myth of Career&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/blog:do_what_you_love&quot; class=&quot;wikilink1&quot; title=&quot;blog:do_what_you_love&quot; data-wiki-id=&quot;blog:do_what_you_love&quot;&gt; ❤️ Do what you love&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/blog:dont_trust_apple&quot; class=&quot;wikilink1&quot; title=&quot;blog:dont_trust_apple&quot; data-wiki-id=&quot;blog:dont_trust_apple&quot;&gt; 🍏 Apple Client Side Scanning &amp;amp; Privacy Violations&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/blog:foss_freedom_illusion&quot; class=&quot;wikilink1&quot; title=&quot;blog:foss_freedom_illusion&quot; data-wiki-id=&quot;blog:foss_freedom_illusion&quot;&gt; 🦀 Rust, Big Tech, the Illusion of Freedom&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table1&amp;quot;,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;59-331&amp;quot;} --&gt;&lt;div class=&quot;table sectionedit4&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/blog:tech:solid_unix&quot; class=&quot;wikilink1&quot; title=&quot;blog:tech:solid_unix&quot; data-wiki-id=&quot;blog:tech:solid_unix&quot;&gt; 📏 SOLID &amp;amp; Unix&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table2&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;333-380&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Blog  \ud83d\udcdd&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;blog_\ud83d\udcdd&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;37-381&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;linux_🐧&quot;&gt;Linux 🐧&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;div class=&quot;table sectionedit6&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:zfs:overview&quot; class=&quot;wikilink1&quot; title=&quot;linux:zfs:overview&quot; data-wiki-id=&quot;linux:zfs:overview&quot;&gt; 📁 ZFS Overview&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:zfs:raid&quot; class=&quot;wikilink1&quot; title=&quot;linux:zfs:raid&quot; data-wiki-id=&quot;linux:zfs:raid&quot;&gt; 🛠️ ZFS Raid&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:zfs:usb_backup&quot; class=&quot;wikilink1&quot; title=&quot;linux:zfs:usb_backup&quot; data-wiki-id=&quot;linux:zfs:usb_backup&quot;&gt; 🔌 ZFS USB Backup&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:zfs:encryption&quot; class=&quot;wikilink1&quot; title=&quot;linux:zfs:encryption&quot; data-wiki-id=&quot;linux:zfs:encryption&quot;&gt; 🔒 ZFS Encryption&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table3&amp;quot;,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;405-591&amp;quot;} --&gt;&lt;div class=&quot;table sectionedit7&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:btrfs:hd-migration&quot; class=&quot;wikilink1&quot; title=&quot;linux:btrfs:hd-migration&quot; data-wiki-id=&quot;linux:btrfs:hd-migration&quot;&gt; 🔄 BTRFS Migration to&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:btrfs:compression&quot; class=&quot;wikilink1&quot; title=&quot;linux:btrfs:compression&quot; data-wiki-id=&quot;linux:btrfs:compression&quot;&gt; 🗜️ BTRFS Compression&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:btrfs:trim&quot; class=&quot;wikilink1&quot; title=&quot;linux:btrfs:trim&quot; data-wiki-id=&quot;linux:btrfs:trim&quot;&gt; 🎯 BTRFS Optimization&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:btrfs:error-checks&quot; class=&quot;wikilink1&quot; title=&quot;linux:btrfs:error-checks&quot; data-wiki-id=&quot;linux:btrfs:error-checks&quot;&gt; ❗ BTRFS Error Checks&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table4&amp;quot;,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;593-816&amp;quot;} --&gt;&lt;div class=&quot;table sectionedit8&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:docker:installation&quot; class=&quot;wikilink1&quot; title=&quot;linux:docker:installation&quot; data-wiki-id=&quot;linux:docker:installation&quot;&gt; 🐳 Docker Installation&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/linux:docker:network_debug&quot; class=&quot;wikilink1&quot; title=&quot;linux:docker:network_debug&quot; data-wiki-id=&quot;linux:docker:network_debug&quot;&gt; 🌐 Docker Network Tools&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table5&amp;quot;,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;818-939&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Linux \ud83d\udc27&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;linux_\ud83d\udc27&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;382-940&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit9&quot; id=&quot;coding_-_lua☽⋆&quot;&gt;Coding - Lua☽⋆&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;div class=&quot;table sectionedit10&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/coding:lua:lgiquickstart&quot; class=&quot;wikilink1&quot; title=&quot;coding:lua:lgiquickstart&quot; data-wiki-id=&quot;coding:lua:lgiquickstart&quot;&gt; 🌙 Lua LGI Quick Start&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table6&amp;quot;,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;972-1030&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Coding - Lua\u263d\u22c6&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;coding_-_lua\u263d\u22c6&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;941-1031&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;coding_-_qt_💻&quot;&gt;Coding - Qt 💻&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;div class=&quot;table sectionedit12&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;a href=&quot;https://wiki.devilplan.com/coding:qt:quickstart&quot; class=&quot;wikilink1&quot; title=&quot;coding:qt:quickstart&quot; data-wiki-id=&quot;coding:qt:quickstart&quot;&gt; ⚡ Qt Quick Start&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table7&amp;quot;,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;1061-1109&amp;quot;} --&gt;
&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Coding - Qt \ud83d\udcbb&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;coding_-_qt_\ud83d\udcbb&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;1032-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/blog:dont_trust_apple">
        <dc:format>text/html</dc:format>
        <dc:date>2025-10-17T19:15:23+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>dont_trust_apple</title>
        <link>https://wiki.devilplan.com/blog:dont_trust_apple</link>
        <description>


&lt;h1 class=&quot;sectionedit1&quot; id=&quot;apple_client_side_scanning_data_control_and_violation_of_privacy&quot;&gt;Apple Client Side Scanning, Data Control and Violation of Privacy&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Apple Client Side Scanning, Data Control and Violation of Privacy&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;apple_client_side_scanning_data_control_and_violation_of_privacy&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;10-78&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit2&quot; id=&quot;do_i_trust_apple&quot;&gt;Do I trust Apple?&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
No, absolutely not! I don’t trust Apple for the same reasons I don’t trust other big tech corporations or any closed-source ecosystem.
&lt;/p&gt;

&lt;p&gt;
If your trust comes from “they promised they’re not evil,” mine comes from documented behavior that says otherwise.
Their reputation relies on marketing slogans like “we protect your privacy” while my skepticism is based on facts, history and hard evidence.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://wiki.devilplan.com/_detail/blog:ddog-apple-bl.jpg?id=blog%3Adont_trust_apple&quot; class=&quot;media&quot; title=&quot;blog:ddog-apple-bl.jpg&quot;&gt;&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:ddog-apple-bl.jpg?w=400&amp;amp;tok=794888&quot; class=&quot;mediaright&quot; align=&quot;right&quot; loading=&quot;lazy&quot; alt=&quot;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Do I trust Apple?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;do_i_trust_apple&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;79-544&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;what_s_client_side_scanning&quot;&gt;What’s Client Side Scanning?&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
“Client-side scanning” (&lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt;) refers to analyzing data, photos, messages, files, &lt;strong&gt;locally on your device&lt;/strong&gt; &lt;em class=&quot;u&quot;&gt;before it’s encrypted or sent&lt;/em&gt;. The idea is that AI or machine learning models scan your content for illegal or harmful material (like Child Sexual Abuse Material, CSAM) &lt;strong&gt;without Apple or any third party ever needing to decrypt your data on their servers&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
In theory, assuming we believe what Apple claims, this means your phone or computer runs a model comparing your content to a database of known illegal content hashes or patterns. If the model detects a match, it triggers an alert or sends metadata to Apple or relevant authorities for further action.
&lt;/p&gt;

&lt;p&gt;
Apple’s client-side scanning system runs on certain chips:
&lt;/p&gt;
&lt;div class=&quot;table sectionedit4&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;A11 Bionic and later&lt;/strong&gt; (iPhones from 2017 onward) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;A12 and later&lt;/strong&gt; &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;M1, M2, M3 chips&lt;/strong&gt; (used in recent Macs and iPads) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;Latest A17 Pro / M4 chips&lt;/strong&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;1322-1494&amp;quot;} --&gt;
&lt;p&gt;
This means this kind of scanning capability has been technically possible for years thanks to Apple’s Neural Engine and secure enclave hardware.
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;What\u2019s Client Side Scanning?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;what_s_client_side_scanning&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;545-1647&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;why_is_client_side_scanning_risky_what_doors_does_it_open&quot;&gt;Why is Client Side Scanning Risky? What Doors Does It Open?&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
While client-side scanning is pitched as a privacy-preserving measure, &lt;strong&gt;there are major risks and concerns:&lt;/strong&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Why is Client Side Scanning Risky? What Doors Does It Open?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;why_is_client_side_scanning_risky_what_doors_does_it_open&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;1648-1823&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit6&quot; id=&quot;expands_the_scope_of_surveillance_on_users_private_data&quot;&gt;Expands the scope of surveillance on users’ private data&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Even if scanning is done locally, &lt;strong&gt;the system must have access to all your content&lt;/strong&gt; (photos, messages, files) in unencrypted form &lt;em&gt;before&lt;/em&gt; encryption. This breaks the principle of true end-to-end encryption.
&lt;/p&gt;

&lt;p&gt;
This creates a backdoor, not a traditional backdoor that Apple holds, but a &lt;strong&gt;built-in mechanism to scan all personal data on your device&lt;/strong&gt;, which governments or other actors could exploit.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Expands the scope of surveillance on users\u2019 private data&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;expands_the_scope_of_surveillance_on_users_private_data&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;1824-2289&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit7&quot; id=&quot;potential_for_false_positives_and_overreach&quot;&gt;Potential for false positives and overreach&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Machine learning models can make mistakes. Innocent content could be flagged as illegal, leading to unwarranted investigations or censorship.
&lt;/p&gt;

&lt;p&gt;
Apple or third parties could expand the scanning scope beyond CSAM to politically sensitive content, activist messages, or even legal but “undesirable” material.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Potential for false positives and overreach&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;potential_for_false_positives_and_overreach&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;2290-2648&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;governmental_or_authoritarian_misuse&quot;&gt;Governmental or authoritarian misuse&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Governments with authoritarian tendencies could demand Apple or other companies &lt;strong&gt;expand scanning databases&lt;/strong&gt; to include content critical of the government, religious minorities, journalists, or political activists.
&lt;/p&gt;

&lt;p&gt;
Client-side scanning can become a tool for &lt;strong&gt;mass surveillance and suppression of dissent&lt;/strong&gt; under the guise of security.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Governmental or authoritarian misuse&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;governmental_or_authoritarian_misuse&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;2649-3029&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;increased_risk_of_hacking_or_abuse&quot;&gt;Increased risk of hacking or abuse&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
The scanning algorithms and databases themselves become a target for hackers. If malicious actors access these scanning components, they could &lt;strong&gt;1)&lt;/strong&gt; Reverse engineer or spoof the scanning process. &lt;strong&gt;2)&lt;/strong&gt; Introduce malicious hashes to flag innocent content, disrupt user privacy, or frame individuals.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Increased risk of hacking or abuse&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;increased_risk_of_hacking_or_abuse&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;3030-3372&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit10&quot; id=&quot;enables_broad_data_collection_and_profiling&quot;&gt;Enables broad data collection and profiling&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
While Apple claims only metadata or alerts are sent if matches occur, &lt;strong&gt;client-side scanning creates a system where detailed knowledge about your data exists on your device&lt;/strong&gt;. This could be leveraged to collect user behavior patterns or metadata, either by Apple or third parties.
&lt;/p&gt;

&lt;p&gt;
Apple or “big tech” could use this data to &lt;strong&gt;profile users, refine targeted advertising, or even sell aggregated behavioral data&lt;/strong&gt; to third parties, despite privacy promises.
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Enables broad data collection and profiling&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;enables_broad_data_collection_and_profiling&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;3373-3888&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit11&quot; id=&quot;how_could_big_tech_exploit_client_side_scanning&quot;&gt;How Could Big Tech Exploit Client Side Scanning?&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;strong&gt;Eroding End-to-End Encryption:&lt;/strong&gt; client-side scanning introduces a &lt;strong&gt;“soft” backdoor&lt;/strong&gt; that can be widened over time, allowing tech companies to access user content under the pretext of safety.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Expanding Surveillance Beyond CSAM:&lt;/strong&gt; The scanning scope could gradually broaden from child abuse material to drug-related content, political opinions, or copyrighted content, increasing user data exposure.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Selling or Monetizing User Data:&lt;/strong&gt; Although Apple says it doesn’t sell user data, the existence of detailed metadata or flagged content creates &lt;strong&gt;new rich datasets&lt;/strong&gt; that could be monetized directly or indirectly by advertisers or government contracts.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Creating a Precedent for Other Companies:&lt;/strong&gt; If Apple successfully normalizes client-side scanning, other big tech players might implement &lt;strong&gt;even more invasive scanning or data collection&lt;/strong&gt; systems, accelerating privacy erosion industry-wide.
&lt;strong&gt;
Government Collaboration and Pressure:&lt;/strong&gt; Governments can compel companies to add new categories to scanning databases or share flagged data under secret orders, sidestepping traditional privacy safeguards.
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;How Could Big Tech Exploit Client Side Scanning?&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;how_could_big_tech_exploit_client_side_scanning&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;3889-5069&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit12&quot; id=&quot;to_summarize&quot;&gt;To summarize:&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
While client-side scanning may seem like a privacy-preserving way to combat illegal content, &lt;strong&gt;it fundamentally shifts control of your personal data from you to big tech and governments&lt;/strong&gt; by:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Forcing devices to scan all private data locally,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Increasing surveillance capability and risk of abuse,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Weakening encryption and privacy protections,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Opening avenues for misuse, false accusations, and government overreach,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;And enabling new forms of data collection, profiling, or monetization.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;To summarize:&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;to_summarize&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;5070-5591&amp;quot;} --&gt;
&lt;h1 class=&quot;sectionedit13&quot; id=&quot;but_luci_i_trust_apple_their_ad_says_privacy_first&quot;&gt;But Luci... I trust Apple! Their AD says &amp;quot;Privacy First!&amp;quot;&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Here are some of the legal cases from &lt;strong&gt;2025&lt;/strong&gt; involving Apple where it has been accused (or found) of violating user rights, privacy, consumer protection, misleading advertising etc.
&lt;/p&gt;

&lt;p&gt;
Keep in mind that these are just the ones I found with a relatively quick search, since compiling a comprehensive list is beyond the scope of this post, and, importantly, this only covers the year 2025, the list would have been too long if I included additional years.
&lt;/p&gt;
&lt;hr /&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;But Luci... I trust Apple! Their AD says \&amp;quot;Privacy First!\&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;but_luci_i_trust_apple_their_ad_says_privacy_first&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;5592-6112&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit14&quot; id=&quot;key_cases_legal_issues_in_2025&quot;&gt;Key Cases &amp;amp; Legal Issues in 2025&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;div class=&quot;table sectionedit15&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Case / Action &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; Issue &lt;/th&gt;&lt;th class=&quot;col2&quot;&gt; Status / Outcome (as of 2025) &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;Siri Privacy Settlement (U.S.)&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Class-action lawsuit alleging Siri was listening to users’ private conversations without their consent, including instances of accidental activation, sharing or using voice data, targeting ads etc. ([The Guardian][1]) &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Apple agreed to a &lt;strong&gt;$95 million&lt;/strong&gt; settlement. ([The Guardian][1]) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;France Antitrust fine over App Tracking Transparency (ATT)&lt;/strong&gt;                               &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; French regulator found that Apple abused its dominant position via ATT — specifically, that ATT’s implementation was “neither necessary nor proportionate,” hurting smaller publishers dependent on third-party tracking / advertising revenue. ([Reuters][2])                                                               &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; Apple was fined &lt;strong&gt;150 million euros&lt;/strong&gt;. ([Reuters][2])                                                                                                &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;Lawsuit by Authors over AI training using books&lt;/strong&gt;                                          &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Authors claim Apple used copyrighted books without consent to train its AI systems (“OpenELM” etc.). Accusations include using pirated “shadow libraries”. ([CNBC][3])                                                                                                                                                       &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; Open, proposed class action. Seeking damages / injunctive relief. ([CNBC][3])                                                                        &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;False advertising / delay of promised Siri / Apple Intelligence features&lt;/strong&gt; (U.S. &amp;amp; Canada) &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Apple marketed advanced Siri / “Apple Intelligence” features in iPhone 16 as available or imminent, but delayed their release. Plaintiffs allege this misled consumers, and that some bought devices under false expectations. ([MacRumors][4])                                                                              &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; Lawsuits filed (class actions) in both countries. As of 2025 not resolved. ([MacRumors][4])                                                          &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;Developer lawsuit over external payment link injunction / App Store policy&lt;/strong&gt;               &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; Developers sued Apple over costs related to external payment links, anti-steering policies (i.e. policies that discourage or block linking outside the App Store), commissions etc., claiming Apple incurred revenues due to the restrictive policy, harming developers. ([MacRumors][5])                                    &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; Lawsuit pending. Seeking restitution, etc. ([MacRumors][5])                                                                                          &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;Apple Books e-Books / Audiobooks availability lawsuit&lt;/strong&gt;                                    &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Plaintiffs allege that when Apple loses licensing rights to certain digital books/audiobooks, Apple removes them entirely from the Books store, including revoking the ability to re-download even if the user “purchased” them. They say Apple misled customers into believing purchases were “perpetual.” ([MacRumors][6]) &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; Class action filed, seeking up to &lt;strong&gt;US$5 billion&lt;/strong&gt; in damages. ([MacRumors][6])                                                                      &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0 leftalign&quot;&gt; &lt;strong&gt;Canadian class action over Siri / conversation recordings&lt;/strong&gt;                                &lt;/td&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; In Canada, class actions (e.g. Hammerco, Lex Group) have been filed alleging Apple recorded private conversations via Siri without consent, and possibly shared them with third parties. ([Hammerco][7])                                                                                                                     &lt;/td&gt;&lt;td class=&quot;col2 leftalign&quot;&gt; Pending. ([Hammerco][7])                                                                                                                             &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table1&amp;quot;,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;6151-9968&amp;quot;} --&gt;&lt;hr /&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;a href=&quot;https://www.theguardian.com/technology/2025/jan/03/apple-siri-privacy-lawsuit-settlement?utm_source=chatgpt.com&quot; class=&quot;urlextern&quot; title=&quot;https://www.theguardian.com/technology/2025/jan/03/apple-siri-privacy-lawsuit-settlement?utm_source=chatgpt.com&quot; rel=&quot;ugc nofollow&quot;&gt;The Guardian&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;a href=&quot;https://www.reuters.com/technology/french-antitrust-regulator-fines-apple-150-million-euros-over-privacy-tool-2025-03-31/?utm_source=chatgpt.com&quot; class=&quot;urlextern&quot; title=&quot;https://www.reuters.com/technology/french-antitrust-regulator-fines-apple-150-million-euros-over-privacy-tool-2025-03-31/?utm_source=chatgpt.com&quot; rel=&quot;ugc nofollow&quot;&gt;Reuters&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;a href=&quot;https://www.reuters.com/sustainability/boards-policy-regulation/apple-sued-over-use-copyrighted-books-train-apple-intelligence-2025-10-10/?utm_source=chatgpt.com&quot; class=&quot;urlextern&quot; title=&quot;https://www.reuters.com/sustainability/boards-policy-regulation/apple-sued-over-use-copyrighted-books-train-apple-intelligence-2025-10-10/?utm_source=chatgpt.com&quot; rel=&quot;ugc nofollow&quot;&gt;Reuters&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Key Cases &amp;amp; Legal Issues in 2025&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;key_cases_legal_issues_in_2025&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;6113-11961&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit16&quot; id=&quot;a_couple_of_early_cases_worth_mentioning&quot;&gt;A couple of early cases worth mentioning:&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;div class=&quot;table sectionedit17&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;thead&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0&quot;&gt; Case &lt;/th&gt;&lt;th class=&quot;col1&quot;&gt; What Apple Did &lt;/th&gt;
	&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;2008 “Jansen case” (Watertown, NY)&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; Apple complied with the first court-ordered iPhone unlock. The company assisted in drafting the court order and bypassing a passcode. ([MacRumors][1]) &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; &lt;strong&gt;Multiple early cases (2008-2014 era)&lt;/strong&gt; &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; According to government filings and press reports, Apple “unlocked iPhones” or extracted some data from locked phones under court order during this period. ([CBS News][2]) &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;table&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;table2&amp;quot;,&amp;quot;secid&amp;quot;:17,&amp;quot;range&amp;quot;:&amp;quot;12010-12459&amp;quot;} --&gt;

&lt;hr /&gt;
&lt;dl class=&quot;file&quot;&gt;
&lt;dt&gt;&lt;a href=&quot;https://wiki.devilplan.com/_export/code/blog:dont_trust_apple?codeblock=0&quot; title=&quot;Download Snippet&quot; class=&quot;mediafile mf_cpp&quot;&gt;snippet.cpp&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;pre class=&quot;code file cpp&quot;&gt;by&lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt;
▖     ▘▖▖
▌ ▌▌▛▘▌▙▌
▙▖▙▌▙▖▌ ▌
&amp;nbsp;
written&lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt; October &lt;span class=&quot;nu0&quot;&gt;17&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2025&lt;/span&gt;&lt;/pre&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;A couple of early cases worth mentioning:&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;a_couple_of_early_cases_worth_mentioning&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;11962-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=blog%3Addog-apple-bl.jpg&amp;ns=blog&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-10-17T19:14:58+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>ddog-apple-bl.jpg - created</title>
        <link>https://wiki.devilplan.com/?image=blog%3Addog-apple-bl.jpg&amp;ns=blog&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:ddog-apple-bl.jpg?w=500&amp;amp;h=500&amp;amp;tok=9d7751&quot; alt=&quot;ddog-apple-bl.jpg&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=blog%3Addog-apple.jpg&amp;ns=blog&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-10-17T16:06:07+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>ddog-apple.jpg - created</title>
        <link>https://wiki.devilplan.com/?image=blog%3Addog-apple.jpg&amp;ns=blog&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:ddog-apple.jpg?w=500&amp;amp;h=500&amp;amp;tok=516057&quot; alt=&quot;ddog-apple.jpg&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=blog%3Addog-notreal2.jpg&amp;ns=blog&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-09-17T03:28:44+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>ddog-notreal2.jpg - created</title>
        <link>https://wiki.devilplan.com/?image=blog%3Addog-notreal2.jpg&amp;ns=blog&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:ddog-notreal2.jpg?w=500&amp;amp;h=500&amp;amp;tok=fe72c5&quot; alt=&quot;ddog-notreal2.jpg&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=blog%3Addog-notreal.png&amp;ns=blog&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-09-17T03:25:00+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>ddog-notreal.png - created</title>
        <link>https://wiki.devilplan.com/?image=blog%3Addog-notreal.png&amp;ns=blog&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:ddog-notreal.png?w=500&amp;amp;h=500&amp;amp;tok=93f968&quot; alt=&quot;ddog-notreal.png&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=blog%3Atech%3Addog-chess.jpg&amp;ns=blog%3Atech&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-17T01:33:45+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>ddog-chess.jpg - created</title>
        <link>https://wiki.devilplan.com/?image=blog%3Atech%3Addog-chess.jpg&amp;ns=blog%3Atech&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:tech:ddog-chess.jpg?w=500&amp;amp;h=500&amp;amp;tok=b8b34c&quot; alt=&quot;ddog-chess.jpg&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=blog%3Addog-liveforever.png&amp;ns=blog&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-08T00:23:04+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>ddog-liveforever.png - created</title>
        <link>https://wiki.devilplan.com/?image=blog%3Addog-liveforever.png&amp;ns=blog&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:ddog-liveforever.png?w=500&amp;amp;h=500&amp;amp;tok=9ea8b9&quot; alt=&quot;ddog-liveforever.png&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=blog%3Addog-life-english.png&amp;ns=blog&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-06T13:48:34+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>ddog-life-english.png - created</title>
        <link>https://wiki.devilplan.com/?image=blog%3Addog-life-english.png&amp;ns=blog&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/blog:ddog-life-english.png?w=500&amp;amp;h=500&amp;amp;tok=529393&quot; alt=&quot;ddog-life-english.png&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=0%3Adokuwiki.svg&amp;ns=0&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-04T18:14:36+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>dokuwiki.svg - created</title>
        <link>https://wiki.devilplan.com/?image=0%3Adokuwiki.svg&amp;ns=0&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/0:dokuwiki.svg?w=500&amp;amp;h=500&amp;amp;tok=8969ff&quot; alt=&quot;dokuwiki.svg&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=wiki%3Adokuwiki.svg&amp;ns=wiki&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-04T18:14:02+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>dokuwiki.svg - created</title>
        <link>https://wiki.devilplan.com/?image=wiki%3Adokuwiki.svg&amp;ns=wiki&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/wiki:dokuwiki.svg?w=500&amp;amp;h=500&amp;amp;tok=88b7b6&quot; alt=&quot;dokuwiki.svg&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=wiki%3Afavicon.svg&amp;ns=wiki&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-04T18:13:01+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>favicon.svg - created</title>
        <link>https://wiki.devilplan.com/?image=wiki%3Afavicon.svg&amp;ns=wiki&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/wiki:favicon.svg?w=500&amp;amp;h=500&amp;amp;tok=8720b9&quot; alt=&quot;favicon.svg&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=wiki%3Alogo.png&amp;ns=wiki&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-04T18:08:31+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>logo.png - created</title>
        <link>https://wiki.devilplan.com/?image=wiki%3Alogo.png&amp;ns=wiki&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/wiki:logo.png?w=500&amp;amp;h=500&amp;amp;tok=dba1e3&quot; alt=&quot;logo.png&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
    <item rdf:about="https://wiki.devilplan.com/?image=wiki%3Aic_speaker_colored_432px.svg&amp;ns=wiki&amp;do=media">
        <dc:format>text/html</dc:format>
        <dc:date>2025-06-04T18:07:31+00:00</dc:date>
        <dc:creator>luci4 (luci4@undisclosed.example.com)</dc:creator>
        <title>ic_speaker_colored_432px.svg - removed</title>
        <link>https://wiki.devilplan.com/?image=wiki%3Aic_speaker_colored_432px.svg&amp;ns=wiki&amp;do=media</link>
        <description>&lt;img src=&quot;https://wiki.devilplan.com/_media/wiki:ic_speaker_colored_432px.svg?w=500&amp;amp;h=500&amp;amp;tok=c32ee3&quot; alt=&quot;ic_speaker_colored_432px.svg&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;500&quot; /&gt;</description>
    </item>
</rdf:RDF>
