<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Create System API</title><link>https://sourceforge.net/p/sucrose/wiki/Create%2520System%2520API/</link><description>Recent changes to Create System API</description><atom:link href="https://sourceforge.net/p/sucrose/wiki/Create%20System%20API/feed" rel="self"/><language>en</language><lastBuildDate>Sat, 04 Jul 2026 04:15:48 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/sucrose/wiki/Create%20System%20API/feed" rel="self" type="application/rss+xml"/><item><title>Create System API modified by Bayram Emekli</title><link>https://sourceforge.net/p/sucrose/wiki/Create%2520System%2520API/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v2
+++ v3
@@ -29,7 +29,7 @@

 The engine only invokes a callback if you declared its template in `SucroseCompatible.json`. If you do not request an object, Sucrose never pushes it and your callback is never called — so request only what you use.

-&amp;gt; Only the **browser-style engines** (WebView and CefSharp) deliver this API. The data channel is web-engine-only. MpvPlayer, Aurora, Nebula, Vexana, and Xavier do not push the System API. See [Choosing Engines](Choosing-Engines).
+&amp;gt; Only the **browser-style engines** (WebView and CefSharp) deliver this API. The data channel is web-engine-only. MpvPlayer, VlcPlayer, Aurora, Nebula, Vexana, and Xavier do not push the System API. See [Choosing Engines](Choosing-Engines).

 ## Opting in (SucroseCompatible.json)

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bayram Emekli</dc:creator><pubDate>Sat, 04 Jul 2026 04:15:48 -0000</pubDate><guid>https://sourceforge.netc421655119dc249306c8fe0ab3264e20059106c6</guid></item><item><title>Create System API modified by Bayram Emekli</title><link>https://sourceforge.net/p/sucrose/wiki/Create%2520System%2520API/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -136,7 +136,7 @@

 ## SucroseMemoryData

-Reports physical RAM and virtual (page-file backed) memory. `MemoryLoad` is a percentage; the `*Used`/`*Available` figures are byte counts. To get a total, add used + available (this is exactly what the Simple System Showcase wallpaper does).
+Reports physical RAM and virtual (page-file backed) memory. `MemoryLoad` is a percentage; the `*Used`/`*Available` figures are already in gibibytes (GiB — the raw byte count divided by 1024^3). To get a total, add used + available (this is exactly what the Simple System Showcase wallpaper does).

 | Field | Meaning |
 |-------|---------|
@@ -144,17 +144,17 @@
 | `Name` | Physical memory label |
 | `VirtualName` | Virtual memory label |
 | `MemoryLoad` | Physical memory used (%) |
-| `MemoryUsed` | Physical memory used (bytes) |
-| `MemoryAvailable` | Physical memory free (bytes) |
+| `MemoryUsed` | Physical memory used (GiB) |
+| `MemoryAvailable` | Physical memory free (GiB) |
 | `VirtualMemoryLoad` | Virtual memory used (%) |
-| `VirtualMemoryUsed` | Virtual memory used (bytes) |
-| `VirtualMemoryAvailable` | Virtual memory free (bytes) |
+| `VirtualMemoryUsed` | Virtual memory used (GiB) |
+| `VirtualMemoryAvailable` | Virtual memory free (GiB) |

     :::js
     window.SucroseMemoryData = function (obj) {
       if (!obj.State) return;

-      const totalBytes = obj.MemoryUsed + obj.MemoryAvailable;
-      const usedGiB = obj.MemoryUsed / (1024 * 1024 * 1024);
+      const totalGiB = obj.MemoryUsed + obj.MemoryAvailable;
+      const usedGiB = obj.MemoryUsed;            // already in GiB
       setText("ram", usedGiB.toFixed(1) + " GiB (" + obj.MemoryLoad + "%)");
     };

@@ -317,7 +317,7 @@


 - **Request only what you use.** Each declared hook makes Backgroundog collect and ship that category; unused hooks waste CPU.
 - **Always check `State`.** A single bad tick is normal; never assume a field is populated.
-- **Mind the units.** Network `Upload`/`Download` are bytes/second; memory `*Used`/`*Available` are bytes; load fields (`Now`/`MemoryLoad`) are percentages. The `Format*Data` strings are pre-formatted if you would rather not convert.
+- **Mind the units.** Network `Upload`/`Download` are bytes/second; memory `*Used`/`*Available` are gibibytes (GiB); load fields (`Now`/`MemoryLoad`) are percentages. The `Format*Data` strings are pre-formatted if you would rather not convert.
 - **`Type` is a number in the manifest, but the System payload uses real types** — booleans for `State`/`Online`/`SavingMode`, numbers for loads and byte counts.
 - **Function names are yours, but stay standard.** Sucrose just runs your template; the whole ecosystem uses `Sucrose&amp;lt;thing&amp;gt;Data`, so match it for portability.
 - **Web-engine only.** If your callbacks never fire, confirm the wallpaper is running on WebView or CefSharp, not a video/GIF engine — see [Choosing Engines](Choosing-Engines).
&amp;lt;/thing&amp;gt;&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bayram Emekli</dc:creator><pubDate>Sat, 04 Jul 2026 04:15:46 -0000</pubDate><guid>https://sourceforge.net68a612f5f09a7e1d99e12ec924ec220799bf7008</guid></item><item><title>Create System API modified by Bayram Emekli</title><link>https://sourceforge.net/p/sucrose/wiki/Create%2520System%2520API/</link><description>&lt;div class="markdown_content"&gt;&lt;h1 id="h-create-system-status-api"&gt;Create: System Status API&lt;/h1&gt;
&lt;p&gt;The &lt;strong&gt;System Status API&lt;/strong&gt; is the set of JavaScript callbacks Sucrose pushes into a web wallpaper so it can read live hardware and OS readings — CPU/GPU load, memory, network, battery, storage, motherboard, BIOS, and the system clock. It is the companion to the &lt;a href="./Create-Audio-API"&gt;Audio API&lt;/a&gt;: both are delivered by the same data pump (the &lt;strong&gt;Backgroundog&lt;/strong&gt; service) over the same channel, and both are opt-in via &lt;code&gt;SucroseCompatible.json&lt;/code&gt;. This page documents every system object, every field it carries, the units to expect, and the &lt;code&gt;State&lt;/code&gt; validity flag that every object includes. Use it to build on-desktop system monitors, network meters, battery widgets, clocks, and hardware dashboards.&lt;/p&gt;
&lt;h2 id="h-contents"&gt;Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#how-it-works"&gt;How it works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#opting-in-sucrosecompatiblejson"&gt;Opting in (SucroseCompatible.json)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-objects-at-a-glance"&gt;The objects at a glance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#sucroseprocessordata"&gt;SucroseProcessorData&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#sucrosegraphicdata"&gt;SucroseGraphicData&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#sucrosememorydata"&gt;SucroseMemoryData&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#sucrosenetworkdata"&gt;SucroseNetworkData&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#sucrosebatterydata"&gt;SucroseBatteryData&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#sucrosestoragedata"&gt;SucroseStorageData&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#sucrosemotherboarddata"&gt;SucroseMotherboardData&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#sucrosebiosdata"&gt;SucroseBiosData&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#sucrosedatedata"&gt;SucroseDateData&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-state-flag"&gt;The State flag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#worked-example-simple-system"&gt;Worked example: Simple System&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#tips-and-gotchas"&gt;Tips and gotchas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#see-also"&gt;See also&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h-how-it-works"&gt;How it works&lt;/h2&gt;
&lt;p&gt;System data is collected by the &lt;strong&gt;Backgroundog&lt;/strong&gt; service. On a timer, Backgroundog calls a &lt;code&gt;Get*Info()&lt;/code&gt; method for each category, builds a single bundle object, and JSON-serializes it. The bundle is shipped to the running web engine over the active live-data channel (named pipe, signal file, or TCP loopback — see &lt;a href="./IPC"&gt;IPC&lt;/a&gt;), where the engine stores each sub-object and then fans it out to your declared JavaScript callbacks via &lt;code&gt;ExecuteScriptAsync&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The bundle carries ten sub-objects: &lt;code&gt;Bios&lt;/code&gt;, &lt;code&gt;Date&lt;/code&gt;, &lt;code&gt;Audio&lt;/code&gt;, &lt;code&gt;Memory&lt;/code&gt;, &lt;code&gt;Battery&lt;/code&gt;, &lt;code&gt;Graphic&lt;/code&gt;, &lt;code&gt;Network&lt;/code&gt;, &lt;code&gt;Storage&lt;/code&gt;, &lt;code&gt;Processor&lt;/code&gt;, and &lt;code&gt;Motherboard&lt;/code&gt;. The &lt;code&gt;Audio&lt;/code&gt; object is documented separately on &lt;a href="./Create-Audio-API"&gt;Create Audio API&lt;/a&gt;; the remaining nine are the System Status API covered here.&lt;/p&gt;
&lt;p&gt;The engine only invokes a callback if you declared its template in &lt;code&gt;SucroseCompatible.json&lt;/code&gt;. If you do not request an object, Sucrose never pushes it and your callback is never called — so request only what you use.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Only the &lt;strong&gt;browser-style engines&lt;/strong&gt; (WebView and CefSharp) deliver this API. The data channel is web-engine-only. MpvPlayer, Aurora, Nebula, Vexana, and Xavier do not push the System API. See &lt;a href="./Choosing-Engines"&gt;Choosing Engines&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="h-opting-in-sucrosecompatiblejson"&gt;Opting in (SucroseCompatible.json)&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;SucroseCompatible.json&lt;/code&gt; is a flat dictionary of &lt;code&gt;string.Format&lt;/code&gt; templates. Each key names a data category; each value is the JavaScript call the engine will run, with &lt;code&gt;{0}&lt;/code&gt; substituted for the JSON payload. The function name on the right is your choice, but the ecosystem standard — used by every shipped Showcase wallpaper — is &lt;code&gt;Sucrose&amp;lt;Thing&amp;gt;Data&lt;/code&gt;.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;"SystemProcessor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SucroseProcessorData({0});"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;"SystemGraphic"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s2"&gt;"SucroseGraphicData({0});"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;"SystemMemory"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;"SucroseMemoryData({0});"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;"SystemNetwork"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s2"&gt;"SucroseNetworkData({0});"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;"SystemBattery"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s2"&gt;"SucroseBatteryData({0});"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;"SystemStorage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s2"&gt;"SucroseStorageData({0});"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;"SystemMotherboard"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SucroseMotherboardData({0});"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;"SystemBios"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"SucroseBiosData({0});"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;"SystemDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="s2"&gt;"SucroseDateData({0});"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The mapping of &lt;code&gt;SucroseCompatible.json&lt;/code&gt; key → JavaScript callback:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;code&gt;SucroseCompatible.json&lt;/code&gt; key&lt;/th&gt;
&lt;th&gt;Payload object&lt;/th&gt;
&lt;th&gt;Conventional callback&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SystemProcessor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Processor JObject&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SucroseProcessorData({0});&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SystemGraphic&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Graphic JObject&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SucroseGraphicData({0});&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SystemMemory&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Memory JObject&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SucroseMemoryData({0});&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SystemNetwork&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Network JObject&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SucroseNetworkData({0});&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SystemBattery&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Battery JObject&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SucroseBatteryData({0});&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SystemStorage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Storage JObject&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SucroseStorageData({0});&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SystemMotherboard&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Motherboard JObject&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SucroseMotherboardData({0});&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SystemBios&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bios JObject&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SucroseBiosData({0});&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SystemDate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Date JObject&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SucroseDateData({0});&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Then implement the matching functions on &lt;code&gt;window&lt;/code&gt;:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SucroseProcessorData&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;State&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;// data not valid this tick&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"cpu"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Now&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"%"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;For full details of the hook model, see &lt;a href="./Create-JS-Bridge"&gt;Create JS Bridge&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="h-the-objects-at-a-glance"&gt;The objects at a glance&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Callback&lt;/th&gt;
&lt;th&gt;What it reports&lt;/th&gt;
&lt;th&gt;Key load/value fields&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SucroseProcessorData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CPU model, load, per-core load, counts&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Now&lt;/code&gt;, &lt;code&gt;Min&lt;/code&gt;, &lt;code&gt;Max&lt;/code&gt;, &lt;code&gt;Cores&lt;/code&gt;, &lt;code&gt;Thread&lt;/code&gt;, &lt;code&gt;ProcessorCount&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SucroseGraphicData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GPU model, load&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Now&lt;/code&gt;, &lt;code&gt;Min&lt;/code&gt;, &lt;code&gt;Max&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SucroseMemoryData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;RAM and virtual memory usage&lt;/td&gt;
&lt;td&gt;&lt;code&gt;MemoryLoad&lt;/code&gt;, &lt;code&gt;MemoryUsed&lt;/code&gt;, &lt;code&gt;MemoryAvailable&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SucroseNetworkData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Throughput, ping, online state&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Upload&lt;/code&gt;, &lt;code&gt;Download&lt;/code&gt;, &lt;code&gt;Ping&lt;/code&gt;, &lt;code&gt;Online&lt;/code&gt;, &lt;code&gt;Total&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SucroseBatteryData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Charge, status, power source&lt;/td&gt;
&lt;td&gt;&lt;code&gt;LifePercent&lt;/code&gt;, &lt;code&gt;ChargeStatus&lt;/code&gt;, &lt;code&gt;PowerLineStatus&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SucroseStorageData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Drives (logical/physical)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Drivers&lt;/code&gt;, &lt;code&gt;LogicalDrivers&lt;/code&gt;, &lt;code&gt;PhysicalDrivers&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SucroseMotherboardData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Board identity&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Name&lt;/code&gt;, &lt;code&gt;Product&lt;/code&gt;, &lt;code&gt;Manufacturer&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SucroseBiosData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Firmware identity&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Caption&lt;/code&gt;, &lt;code&gt;Version&lt;/code&gt;, &lt;code&gt;ReleaseDate&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SucroseDateData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;System clock&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Year&lt;/code&gt;, &lt;code&gt;Month&lt;/code&gt;, &lt;code&gt;Day&lt;/code&gt;, &lt;code&gt;Hour&lt;/code&gt;, &lt;code&gt;Minute&lt;/code&gt;, &lt;code&gt;Second&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Every object carries a &lt;code&gt;State&lt;/code&gt; boolean (data validity) and most carry a &lt;code&gt;Name&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="h-sucroseprocessordata"&gt;SucroseProcessorData&lt;/h2&gt;
&lt;p&gt;Reports the CPU. &lt;code&gt;Now&lt;/code&gt; is the current overall load; the &lt;code&gt;Cores*&lt;/code&gt; arrays/fields carry per-core figures.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;State&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Validity flag (bool)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Processor name/model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Processor type&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Now&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Current overall load (%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Min&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Minimum observed load (%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Max&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Maximum observed load (%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Core&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Single-core figure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Cores&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Per-core figures (current)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Thread&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Thread count&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CoresNow&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Per-core current load&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CoresMin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Per-core minimum load&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CoresMax&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Per-core maximum load&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ProcessorCount&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Logical processor count&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SucroseProcessorData&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;State&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;setGauge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"cpu"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Now&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="c1"&gt;// % overall&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ProcessorCount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"logical CPUs"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2 id="h-sucrosegraphicdata"&gt;SucroseGraphicData&lt;/h2&gt;
&lt;p&gt;Reports the GPU.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;State&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Validity flag&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GPU name/model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Manufacturer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GPU vendor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Now&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Current GPU load (%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Min&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Minimum observed load (%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Max&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Maximum observed load (%)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SucroseGraphicData&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;State&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;setGauge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"gpu"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Now&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2 id="h-sucrosememorydata"&gt;SucroseMemoryData&lt;/h2&gt;
&lt;p&gt;Reports physical RAM and virtual (page-file backed) memory. &lt;code&gt;MemoryLoad&lt;/code&gt; is a percentage; the &lt;code&gt;*Used&lt;/code&gt;/&lt;code&gt;*Available&lt;/code&gt; figures are byte counts. To get a total, add used + available (this is exactly what the Simple System Showcase wallpaper does).&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;State&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Validity flag&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Physical memory label&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VirtualName&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Virtual memory label&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MemoryLoad&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Physical memory used (%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MemoryUsed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Physical memory used (bytes)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MemoryAvailable&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Physical memory free (bytes)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VirtualMemoryLoad&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Virtual memory used (%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VirtualMemoryUsed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Virtual memory used (bytes)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;VirtualMemoryAvailable&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Virtual memory free (bytes)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SucroseMemoryData&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;State&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;totalBytes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MemoryUsed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MemoryAvailable&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;usedGiB&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MemoryUsed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1024&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1024&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;setText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"ram"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;usedGiB&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;" GiB ("&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MemoryLoad&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"%)"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2 id="h-sucrosenetworkdata"&gt;SucroseNetworkData&lt;/h2&gt;
&lt;p&gt;Reports throughput, latency, and connectivity. &lt;code&gt;Upload&lt;/code&gt; and &lt;code&gt;Download&lt;/code&gt; are &lt;strong&gt;bytes per second&lt;/strong&gt; (showcase code divides by &lt;code&gt;1024 * 1024&lt;/code&gt; for MB/s). &lt;code&gt;Total&lt;/code&gt; is cumulative bytes; the &lt;code&gt;*Data&lt;/code&gt; fields carry raw values and the &lt;code&gt;Format*Data&lt;/code&gt; fields carry pre-formatted strings.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;State&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Validity flag&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Adapter name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Host&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ping host (the Performance ping target)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ping&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Round-trip latency (ms)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Online&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Connectivity flag (bool)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Upload&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Upload rate (bytes/s)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Download&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Download rate (bytes/s)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Total&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cumulative bytes transferred&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PingData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Raw ping value&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;TotalData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Raw total value&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;UploadData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Raw upload value&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DownloadData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Raw download value&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PingAddress&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The host pinged&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FormatTotalData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Human-readable total (string)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FormatUploadData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Human-readable upload (string)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FormatDownloadData&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Human-readable download (string)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SucroseNetworkData&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;State&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;downMBs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Download&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1024&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;setText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"net"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Online&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;downMBs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;" MB/s · "&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Ping&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;" ms"&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Offline"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2 id="h-sucrosebatterydata"&gt;SucroseBatteryData&lt;/h2&gt;
&lt;p&gt;Reports battery charge, power state, and power-saving mode. &lt;code&gt;LifePercent&lt;/code&gt;/&lt;code&gt;BatteryLifePercent&lt;/code&gt; give the charge level; &lt;code&gt;PowerLineStatus&lt;/code&gt;/&lt;code&gt;ACPowerStatus&lt;/code&gt; indicate whether it is plugged in.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;State&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Validity flag&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Battery name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Battery status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Chemistry&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Battery chemistry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SavingMode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Energy-saver active flag&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SaverStatus&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Energy-saver status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BatteryFlag&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Raw battery flag&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ChargeStatus&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Charging/discharging status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Battery description&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;LifePercent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Charge level (%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BatteryLifePercent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Charge level (%)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EstimatedChargeRemaining&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Estimated remaining charge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;FullLifetime&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Full battery lifetime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BatteryFullLifeTime&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Full battery lifetime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BatteryLifeTime&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Remaining battery time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;LifeRemaining&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Remaining life&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EstimatedRunTime&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Estimated run time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ACPowerStatus&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;AC power status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PowerLineStatus&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Power line status (plugged in?)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DesignVoltage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Designed voltage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PowerPlanType&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Active power plan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;EnergySaverType&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Energy-saver type&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SucroseBatteryData&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;State&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;setText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"battery"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LifePercent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"%"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SavingMode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;" (saver)"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2 id="h-sucrosestoragedata"&gt;SucroseStorageData&lt;/h2&gt;
&lt;p&gt;Reports drives. &lt;code&gt;Drivers&lt;/code&gt; is the combined list; &lt;code&gt;LogicalDrivers&lt;/code&gt; and &lt;code&gt;PhysicalDrivers&lt;/code&gt; separate logical volumes from physical disks.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;State&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Validity flag&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Drivers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All drives&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;LogicalDrivers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Logical volumes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;PhysicalDrivers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Physical disks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SucroseStorageData&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;State&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Logical volumes:"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LogicalDrivers&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2 id="h-sucrosemotherboarddata"&gt;SucroseMotherboardData&lt;/h2&gt;
&lt;p&gt;Reports the motherboard identity.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;State&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Validity flag&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Board name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Product&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Product identifier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Version&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Board version&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Manufacturer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Board manufacturer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="h-sucrosebiosdata"&gt;SucroseBiosData&lt;/h2&gt;
&lt;p&gt;Reports the firmware/BIOS identity.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;State&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Validity flag&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BIOS name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Caption&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BIOS caption&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Version&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BIOS version&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BIOS description&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ReleaseDate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BIOS release date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Manufacturer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BIOS manufacturer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SerialNumber&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Serial number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;CurrentLanguage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;BIOS language&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="h-sucrosedatedata"&gt;SucroseDateData&lt;/h2&gt;
&lt;p&gt;Reports the system clock, broken into components so you can build a clock without parsing. Pushed on the same cadence as the rest of the bundle.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;State&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Validity flag&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Year&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Month&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Month (1–12)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Day&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Day of month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Hour&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hour&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Minute&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Minute&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Second&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Second&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Millisecond&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Millisecond&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DayOfYear&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Day of the year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DayOfWeek&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Day of the week&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Kind&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DateTimeKind&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SucroseDateData&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;State&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pad&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;setText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"clock"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Hour&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;":"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Minute&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;":"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pad&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Second&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2 id="h-the-state-flag"&gt;The State flag&lt;/h2&gt;
&lt;p&gt;Every System object carries a &lt;code&gt;State&lt;/code&gt; boolean. It is the data-validity flag: when &lt;code&gt;State&lt;/code&gt; is &lt;code&gt;false&lt;/code&gt;, the reading for that tick could not be collected (the source was unavailable, a sensor failed, or the value is not yet populated). Always guard your handler with an early &lt;code&gt;if (!obj.State) return;&lt;/code&gt; so a transient failure does not corrupt your display. Most objects also carry a &lt;code&gt;Name&lt;/code&gt; you can show as a label.&lt;/p&gt;
&lt;h2 id="h-worked-example-simple-system"&gt;Worked example: Simple System&lt;/h2&gt;
&lt;p&gt;The shipped Showcase wallpaper &lt;strong&gt;Simple System&lt;/strong&gt; (a &lt;code&gt;Web&lt;/code&gt; type, &lt;code&gt;Source: System.html&lt;/code&gt;) is the canonical System API demo: it charts hardware readings live. Its &lt;code&gt;SucroseCompatible.json&lt;/code&gt; requests four categories:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;"SystemMemory"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;"SucroseMemoryData({0});"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;"SystemGraphic"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s2"&gt;"SucroseGraphicData({0});"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;"SystemNetwork"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="s2"&gt;"SucroseNetworkData({0});"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nt"&gt;"SystemProcessor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SucroseProcessorData({0});"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Note it only requests the four it draws — CPU, GPU, memory, and network — and not battery, storage, BIOS, motherboard, or date. That is the pattern to follow: declare exactly the hooks you render. See &lt;a href="./Create-Example-Wallpapers"&gt;Create Example Wallpapers&lt;/a&gt; for a full walkthrough of the shipped examples.&lt;/p&gt;
&lt;h2 id="h-tips-and-gotchas"&gt;Tips and gotchas&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Request only what you use.&lt;/strong&gt; Each declared hook makes Backgroundog collect and ship that category; unused hooks waste CPU.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Always check &lt;code&gt;State&lt;/code&gt;.&lt;/strong&gt; A single bad tick is normal; never assume a field is populated.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mind the units.&lt;/strong&gt; Network &lt;code&gt;Upload&lt;/code&gt;/&lt;code&gt;Download&lt;/code&gt; are bytes/second; memory &lt;code&gt;*Used&lt;/code&gt;/&lt;code&gt;*Available&lt;/code&gt; are bytes; load fields (&lt;code&gt;Now&lt;/code&gt;/&lt;code&gt;MemoryLoad&lt;/code&gt;) are percentages. The &lt;code&gt;Format*Data&lt;/code&gt; strings are pre-formatted if you would rather not convert.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Type&lt;/code&gt; is a number in the manifest, but the System payload uses real types&lt;/strong&gt; — booleans for &lt;code&gt;State&lt;/code&gt;/&lt;code&gt;Online&lt;/code&gt;/&lt;code&gt;SavingMode&lt;/code&gt;, numbers for loads and byte counts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Function names are yours, but stay standard.&lt;/strong&gt; Sucrose just runs your template; the whole ecosystem uses &lt;code&gt;Sucrose&amp;lt;Thing&amp;gt;Data&lt;/code&gt;, so match it for portability.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Web-engine only.&lt;/strong&gt; If your callbacks never fire, confirm the wallpaper is running on WebView or CefSharp, not a video/GIF engine — see &lt;a href="./Choosing-Engines"&gt;Choosing Engines&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross-engine portability.&lt;/strong&gt; When porting from Wallpaper Engine or Lively, feature-detect their hooks first and fall back to the Sucrose API — see &lt;a href="./Create-Compatibility"&gt;Create Compatibility&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="h-see-also"&gt;See also&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="./Create-Audio-API"&gt;Create Audio API&lt;/a&gt; — the &lt;code&gt;SucroseAudioData&lt;/code&gt; FFT + now-playing companion callback&lt;/li&gt;
&lt;li&gt;&lt;a href="./Create-JS-Bridge"&gt;Create JS Bridge&lt;/a&gt; — &lt;code&gt;SucroseCompatible.json&lt;/code&gt;, detection, and the hook/template model&lt;/li&gt;
&lt;li&gt;&lt;a href="./Create-Web-Architecture"&gt;Create Web Architecture&lt;/a&gt; — how data reaches the page (Backgroundog → pipe → &lt;code&gt;ExecuteScriptAsync&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="./Create-Property-Listener-Filters"&gt;Create Property Listener Filters&lt;/a&gt; — receiving user customization values&lt;/li&gt;
&lt;li&gt;&lt;a href="./Backgroundog-Service"&gt;Backgroundog Service&lt;/a&gt; — the service that collects and pushes this data&lt;/li&gt;
&lt;li&gt;&lt;a href="./Create-Example-Wallpapers"&gt;Create Example Wallpapers&lt;/a&gt; — Simple System and other worked examples&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Bayram Emekli</dc:creator><pubDate>Sat, 04 Jul 2026 04:15:24 -0000</pubDate><guid>https://sourceforge.net55bb169d175f70f5a48baf8b0ff5592e15713b33</guid></item></channel></rss>