<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: 1234567890-</title>
    <description>The latest articles on Forem by 1234567890- (@tony_1234567890).</description>
    <link>https://forem.com/tony_1234567890</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3829082%2Ff4f7538d-c788-4c42-8137-5c89925583b4.jpg</url>
      <title>Forem: 1234567890-</title>
      <link>https://forem.com/tony_1234567890</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tony_1234567890"/>
    <language>en</language>
    <item>
      <title>Designing a practical sorting benchmark across Python, Rust, and C</title>
      <dc:creator>1234567890-</dc:creator>
      <pubDate>Mon, 20 Apr 2026 07:04:14 +0000</pubDate>
      <link>https://forem.com/tony_1234567890/designing-a-practical-sorting-benchmark-across-python-rust-and-c-16e7</link>
      <guid>https://forem.com/tony_1234567890/designing-a-practical-sorting-benchmark-across-python-rust-and-c-16e7</guid>
      <description>&lt;p&gt;I recently built a sorting playground, and one question kept coming up:&lt;/p&gt;

&lt;p&gt;How do you compare and evaluate sorting algorithms?&lt;/p&gt;

&lt;p&gt;Not just theoretically, but in practice.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;A simple benchmark sounds easy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;run the same algorithm
&lt;/li&gt;
&lt;li&gt;measure time
&lt;/li&gt;
&lt;li&gt;compare
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But it quickly becomes complicated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python vs Rust vs C behave very differently
&lt;/li&gt;
&lt;li&gt;large inputs can break CI pipelines
&lt;/li&gt;
&lt;li&gt;some algorithms are not even benchmarkable
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The approach
&lt;/h2&gt;

&lt;p&gt;Instead of chasing perfect accuracy, I focused on something else:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;consistency and reproducibility&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Key decisions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;run benchmarks in CI (GitHub Actions)
&lt;/li&gt;
&lt;li&gt;use fixed datasets
&lt;/li&gt;
&lt;li&gt;run multiple iterations
&lt;/li&gt;
&lt;li&gt;average results
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Input sizes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;small
&lt;/li&gt;
&lt;li&gt;medium
&lt;/li&gt;
&lt;li&gt;large
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But not every language runs all sizes (due to runtime issues).&lt;/p&gt;




&lt;h2&gt;
  
  
  The reality of cross-language benchmarking
&lt;/h2&gt;

&lt;p&gt;One important thing I learned:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Not all languages should run the same workload.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rust / C / C++ can handle large datasets easily
&lt;/li&gt;
&lt;li&gt;Python can become extremely slow on large inputs
&lt;/li&gt;
&lt;li&gt;running everything “fairly” is not practical
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Practical constraints
&lt;/h2&gt;

&lt;p&gt;So I introduced constraints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python skips large datasets
&lt;/li&gt;
&lt;li&gt;heavy algorithms are limited
&lt;/li&gt;
&lt;li&gt;some algorithms opt out entirely
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;This makes the system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fast enough to run in CI
&lt;/li&gt;
&lt;li&gt;stable
&lt;/li&gt;
&lt;li&gt;still useful for comparison
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Incremental benchmarking
&lt;/h2&gt;

&lt;p&gt;Another key idea:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;don’t re-run everything&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;new algorithms → benchmarked
&lt;/li&gt;
&lt;li&gt;existing ones → reused
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This keeps CI time under control.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the system produces
&lt;/h2&gt;

&lt;p&gt;Each algorithm gets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;per-language results
&lt;/li&gt;
&lt;li&gt;per-size measurements
&lt;/li&gt;
&lt;li&gt;aggregated data
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The output is stored as static JSON and rendered in the UI.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why build this?
&lt;/h2&gt;

&lt;p&gt;Because combining:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;visualization
&lt;/li&gt;
&lt;li&gt;comparison
&lt;/li&gt;
&lt;li&gt;and reproducible benchmarks
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;makes algorithms much easier to understand.&lt;/p&gt;




&lt;h2&gt;
  
  
  Future ideas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;more languages
&lt;/li&gt;
&lt;li&gt;better scoring models
&lt;/li&gt;
&lt;li&gt;workload-specific comparisons
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But always keeping it simple enough to run.&lt;/p&gt;




&lt;p&gt;If you’re interested, you can explore it here (Open sourced under the MIT license):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sorting.1234567890.dev/benchmark" rel="noopener noreferrer"&gt;https://sorting.1234567890.dev/benchmark&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/T-1234567890/sort-playground" rel="noopener noreferrer"&gt;https://github.com/T-1234567890/sort-playground&lt;/a&gt;&lt;/p&gt;

</description>
      <category>benchmark</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>algorithms</category>
    </item>
    <item>
      <title>I built a sorting playground to visualize real, weird, and absurd algorithms</title>
      <dc:creator>1234567890-</dc:creator>
      <pubDate>Mon, 20 Apr 2026 06:57:21 +0000</pubDate>
      <link>https://forem.com/tony_1234567890/i-built-a-sorting-playground-to-visualize-real-weird-and-absurd-algorithms-5c30</link>
      <guid>https://forem.com/tony_1234567890/i-built-a-sorting-playground-to-visualize-real-weird-and-absurd-algorithms-5c30</guid>
      <description>&lt;p&gt;I’ve been experimenting with sorting algorithms recently, and I realized something:&lt;/p&gt;

&lt;p&gt;Most explanations are static.&lt;/p&gt;

&lt;p&gt;You read code, you see diagrams, but you don’t actually &lt;em&gt;see&lt;/em&gt; what’s happening step by step.&lt;/p&gt;

&lt;p&gt;So I built a small project to explore that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sorting.1234567890.dev" rel="noopener noreferrer"&gt;https://sorting.1234567890.dev&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pick a sorting algorithm
&lt;/li&gt;
&lt;li&gt;watch every step
&lt;/li&gt;
&lt;li&gt;compare it with others
&lt;/li&gt;
&lt;li&gt;export the result
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It includes both:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;classic algorithms (Merge Sort, Quick Sort)
&lt;/li&gt;
&lt;li&gt;and weird / meme ones (like Miracle Sort or random-based sorts)
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why the weird ones?
&lt;/h2&gt;

&lt;p&gt;Some sorting algorithms don’t really make sense in practice.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one does nothing and just keeps checking
&lt;/li&gt;
&lt;li&gt;one randomly swaps elements until it works
&lt;/li&gt;
&lt;li&gt;one removes anything that doesn’t fit
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They’re not useful, but they’re interesting to observe.&lt;/p&gt;

&lt;p&gt;And once you visualize them, they become surprisingly fun.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;step-by-step visualization
&lt;/li&gt;
&lt;li&gt;side-by-side comparison&lt;/li&gt;
&lt;li&gt;export as image/GIF/embed
&lt;/li&gt;
&lt;li&gt;support for multiple implementations
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  A small experiment
&lt;/h2&gt;

&lt;p&gt;This project wasn’t meant to be a product.&lt;/p&gt;

&lt;p&gt;It started as something I built for fun, just to see how different algorithms behave visually.&lt;/p&gt;

&lt;p&gt;But it turned into something I kept using myself.&lt;/p&gt;




&lt;h2&gt;
  
  
  What’s next
&lt;/h2&gt;

&lt;p&gt;I’ve started building a system around it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;community ranking
&lt;/li&gt;
&lt;li&gt;benchmark comparisons
&lt;/li&gt;
&lt;li&gt;experimental features
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Still keeping it lightweight.&lt;/p&gt;




&lt;p&gt;If you have ideas, algorithms, or improvements, feel free to share.&lt;/p&gt;

&lt;p&gt;This project is open source (MIT), and contributions are welcome.&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>computerscience</category>
      <category>showdev</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>A modular terminal toolbox with a plugin system (tinfo v1.0)</title>
      <dc:creator>1234567890-</dc:creator>
      <pubDate>Thu, 19 Mar 2026 13:18:21 +0000</pubDate>
      <link>https://forem.com/tony_1234567890/a-modular-terminal-toolbox-with-a-plugin-system-tinfo-v10-3kfa</link>
      <guid>https://forem.com/tony_1234567890/a-modular-terminal-toolbox-with-a-plugin-system-tinfo-v10-3kfa</guid>
      <description>&lt;h2&gt;
  
  
  Terminal Info CLI v1.0
&lt;/h2&gt;

&lt;p&gt;I’ve been working on &lt;strong&gt;Terminal Info&lt;/strong&gt; (&lt;code&gt;tinfo&lt;/code&gt;), a CLI written in Rust.&lt;/p&gt;

&lt;p&gt;It started as a simple system info tool, but grew into a modular terminal toolbox with a plugin-based design.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get out of the box
&lt;/h2&gt;

&lt;p&gt;Run &lt;code&gt;tinfo&lt;/code&gt; and you get a clean dashboard (location/weather/time/network/CPU/memory). There are commands for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;weather + time&lt;/li&gt;
&lt;li&gt;ping/latency/network&lt;/li&gt;
&lt;li&gt;system + disk/storage&lt;/li&gt;
&lt;li&gt;diagnostics groups&lt;/li&gt;
&lt;li&gt;server mode for VPS environments&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--json&lt;/code&gt;, &lt;code&gt;--plain&lt;/code&gt;, &lt;code&gt;--compact&lt;/code&gt; output modes&lt;/li&gt;
&lt;li&gt;shell completions (&lt;code&gt;bash&lt;/code&gt;, &lt;code&gt;zsh&lt;/code&gt;, &lt;code&gt;fish&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;profiles + theming via &lt;code&gt;~/.tinfo/config.toml&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The “one CLI, many tools” plugin model
&lt;/h2&gt;

&lt;p&gt;Terminal Info routes subcommands to executables:&lt;/p&gt;

&lt;p&gt;Instead of building a one use CLI, the goal is to keep the core small and let functionality grow through plugins.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tinfo &amp;lt;plugin-name&amp;gt;    &lt;span class="c"&gt;# resolves to tinfo-&amp;lt;plugin-name&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Managed plugins live under:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.terminal-info/plugins/&amp;lt;plugin-name&amp;gt;/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There’s a “self-hosted” style registry in the repo: a small &lt;code&gt;plugins/index.json&lt;/code&gt; and one JSON per plugin. The registry &lt;em&gt;pins exact versions&lt;/em&gt;—Terminal Info won’t automatically install “latest”. Installs verify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the author’s Minisign signature&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;trust&lt;/code&gt; a plugin before it executes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Discovery &amp;amp; management:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tinfo plugin search &amp;lt;query&amp;gt;
tinfo plugin &lt;span class="nb"&gt;install&lt;/span&gt; &amp;lt;name&amp;gt;
tinfo plugin trust &amp;lt;name&amp;gt;
tinfo plugin update &amp;lt;name&amp;gt;
tinfo plugin list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Writing a plugin in ~5 minutes (with the SDK)
&lt;/h2&gt;

&lt;p&gt;The project includes a Rust plugin SDK crate, &lt;code&gt;tinfo-plugin&lt;/code&gt;. A typical workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tinfo plugin init weather
&lt;span class="nb"&gt;cd &lt;/span&gt;tinfo-weather
cargo run &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nt"&gt;--metadata&lt;/span&gt;
cargo &lt;span class="nb"&gt;test

&lt;/span&gt;tinfo plugin keygen &lt;span class="nt"&gt;--output-dir&lt;/span&gt; ./keys
tinfo plugin pack
tinfo plugin publish-check
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The template ships a release workflow, a manifest (&lt;code&gt;plugin.toml&lt;/code&gt;), a smoke test harness, and it automatically supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--metadata&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--help&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plugin metadata declares &lt;code&gt;plugin_api = 1&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security expectations
&lt;/h2&gt;

&lt;p&gt;Plugins are third-party executables. They run as your user (no automatic elevation), and if a plugin asks for &lt;code&gt;sudo&lt;/code&gt;, treat that as a big red flag.&lt;/p&gt;




&lt;p&gt;Repo: &lt;a href="https://github.com/T-1234567890/terminal-info" rel="noopener noreferrer"&gt;https://github.com/T-1234567890/terminal-info&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re building plugins or thinking about extending &lt;code&gt;tinfo&lt;/code&gt;, jump in, open a PR, share your ideas, or just start experimenting. If you have any questions or any problems, please let me know in the GitHub Discussions or open an Issue!&lt;/p&gt;

</description>
      <category>rust</category>
      <category>cli</category>
      <category>devtools</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Building an Extensible Rust CLI Toolbox with a Plugin System</title>
      <dc:creator>1234567890-</dc:creator>
      <pubDate>Tue, 17 Mar 2026 09:55:59 +0000</pubDate>
      <link>https://forem.com/tony_1234567890/building-an-extensible-rust-cli-toolbox-with-a-plugin-system-719</link>
      <guid>https://forem.com/tony_1234567890/building-an-extensible-rust-cli-toolbox-with-a-plugin-system-719</guid>
      <description>&lt;p&gt;I recently built a project called &lt;strong&gt;terminal-info&lt;/strong&gt;, a Rust CLI toolbox designed to display useful system and environment information directly in the terminal.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/T-1234567890/terminal-info" rel="noopener noreferrer"&gt;https://github.com/T-1234567890/terminal-info&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project originally started as a small terminal weather CLI, but over time, it developed into something closer to a &lt;strong&gt;CLI toolbox with plugins&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of being a single-purpose tool, the goal is to make it &lt;strong&gt;extensible&lt;/strong&gt; so developers can add their own tools and diagnostics.&lt;/p&gt;




&lt;h2&gt;
  
  
  What terminal-info does
&lt;/h2&gt;

&lt;p&gt;Running the CLI shows a simple dashboard with useful information:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────────────────────────┐
│           Terminal Info          │
├──────────────────────────────────┤
│ Location: Shenzhen               │
│ Weather: Clear sky, 20.3°C       │
│ Time: 2026-03-16 xx:xx:xx        │
│ Network: xxx.xxx.x.xx            │
│ CPU: 19.3%                       │
│ Memory: 16.2 GiB / 24.0 GiB used │
└──────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The dashboard is only the default overview. &lt;br&gt;&lt;br&gt;
Terminal Info provides many additional commands and plugins&lt;br&gt;
for diagnostics, networking, system information, and developer tools.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I added a plugin system
&lt;/h2&gt;

&lt;p&gt;While building the CLI, I realized that many terminal tools are limited by being &lt;strong&gt;fixed-feature applications&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;system info tools&lt;/li&gt;
&lt;li&gt;monitoring tools&lt;/li&gt;
&lt;li&gt;diagnostics utilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They are useful, but extending them often requires modifying the core codebase.&lt;/p&gt;

&lt;p&gt;So I developed terminal-info CLI with a &lt;strong&gt;plugin system&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;core CLI
+ plugin SDK
+ plugin registry
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Developers can write plugins that extend the CLI without modifying the main repository.&lt;/p&gt;




&lt;h2&gt;
  
  
  Security considerations
&lt;/h2&gt;

&lt;p&gt;One challenge with plugin systems is security.&lt;/p&gt;

&lt;p&gt;To address this, the project includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;signed plugin releases&lt;/li&gt;
&lt;li&gt;integrity verification&lt;/li&gt;
&lt;li&gt;registry review&lt;/li&gt;
&lt;li&gt;local trust controls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Users must explicitly trust a plugin before it can run.&lt;/p&gt;




&lt;h2&gt;
  
  
  Project goals
&lt;/h2&gt;

&lt;p&gt;The long-term goal is to turn &lt;strong&gt;terminal-info&lt;/strong&gt; into a general-purpose CLI toolbox where new functionality can live as plugins.&lt;/p&gt;

&lt;p&gt;Instead of replacing existing tools, the idea is to provide a platform where small terminal utilities can coexist and evolve.&lt;/p&gt;




&lt;h2&gt;
  
  
  Feedback welcome
&lt;/h2&gt;

&lt;p&gt;The project is still early and I would really appreciate feedback from the community, especially on the plugin architecture and developer experience.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/T-1234567890/terminal-info" rel="noopener noreferrer"&gt;https://github.com/T-1234567890/terminal-info&lt;/a&gt;&lt;br&gt;
Docs: &lt;a href="https://github.com/T-1234567890/terminal-info/tree/main/docs" rel="noopener noreferrer"&gt;https://github.com/T-1234567890/terminal-info/tree/main/docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is open source and licensed under &lt;strong&gt;Apache 2.0&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>cli</category>
      <category>opensource</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>Building an Extensible Rust CLI Toolbox with a Plugin System</title>
      <dc:creator>1234567890-</dc:creator>
      <pubDate>Tue, 17 Mar 2026 09:55:59 +0000</pubDate>
      <link>https://forem.com/tony_1234567890/building-an-extensible-rust-cli-toolbox-with-a-plugin-system-26c7</link>
      <guid>https://forem.com/tony_1234567890/building-an-extensible-rust-cli-toolbox-with-a-plugin-system-26c7</guid>
      <description>&lt;p&gt;I recently built a project called &lt;strong&gt;terminal-info&lt;/strong&gt;, a Rust CLI toolbox designed to display useful system and environment information directly in the terminal.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/T-1234567890/terminal-info" rel="noopener noreferrer"&gt;https://github.com/T-1234567890/terminal-info&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project originally started as a small terminal weather CLI, but over time, it developed into something closer to a &lt;strong&gt;CLI toolbox with plugins&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of being a single-purpose tool, the goal is to make it &lt;strong&gt;extensible&lt;/strong&gt; so developers can add their own tools and diagnostics.&lt;/p&gt;




&lt;h2&gt;
  
  
  What terminal-info does
&lt;/h2&gt;

&lt;p&gt;Running the CLI shows a simple dashboard with useful information:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────────────────────────┐
│           Terminal Info          │
├──────────────────────────────────┤
│ Location: Shenzhen               │
│ Weather: Clear sky, 20.3°C       │
│ Time: 2026-03-16 xx:xx:xx        │
│ Network: xxx.xxx.x.xx            │
│ CPU: 19.3%                       │
│ Memory: 16.2 GiB / 24.0 GiB used │
└──────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The dashboard is only the default overview. &lt;br&gt;&lt;br&gt;
Terminal Info provides many additional commands and plugins&lt;br&gt;
for diagnostics, networking, system information, and developer tools.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I added a plugin system
&lt;/h2&gt;

&lt;p&gt;While building the CLI, I realized that many terminal tools are limited by being &lt;strong&gt;fixed-feature applications&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;system info tools&lt;/li&gt;
&lt;li&gt;monitoring tools&lt;/li&gt;
&lt;li&gt;diagnostics utilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They are useful, but extending them often requires modifying the core codebase.&lt;/p&gt;

&lt;p&gt;So I developed terminal-info CLI with a &lt;strong&gt;plugin system&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;core CLI
+ plugin SDK
+ plugin registry
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Developers can write plugins that extend the CLI without modifying the main repository.&lt;/p&gt;




&lt;h2&gt;
  
  
  Security considerations
&lt;/h2&gt;

&lt;p&gt;One challenge with plugin systems is security.&lt;/p&gt;

&lt;p&gt;To address this, the project includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;signed plugin releases&lt;/li&gt;
&lt;li&gt;integrity verification&lt;/li&gt;
&lt;li&gt;registry review&lt;/li&gt;
&lt;li&gt;local trust controls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Users must explicitly trust a plugin before it can run.&lt;/p&gt;




&lt;h2&gt;
  
  
  Project goals
&lt;/h2&gt;

&lt;p&gt;The long-term goal is to turn &lt;strong&gt;terminal-info&lt;/strong&gt; into a general-purpose CLI toolbox where new functionality can live as plugins.&lt;/p&gt;

&lt;p&gt;Instead of replacing existing tools, the idea is to provide a platform where small terminal utilities can coexist and evolve.&lt;/p&gt;




&lt;h2&gt;
  
  
  Feedback welcome
&lt;/h2&gt;

&lt;p&gt;The project is still early and I would really appreciate feedback from the community, especially on the plugin architecture and developer experience.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/T-1234567890/terminal-info" rel="noopener noreferrer"&gt;https://github.com/T-1234567890/terminal-info&lt;/a&gt;&lt;br&gt;
Docs: &lt;a href="https://github.com/T-1234567890/terminal-info/tree/main/docs" rel="noopener noreferrer"&gt;https://github.com/T-1234567890/terminal-info/tree/main/docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is open source and licensed under &lt;strong&gt;Apache 2.0&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>cli</category>
      <category>opensource</category>
      <category>vibecoding</category>
    </item>
  </channel>
</rss>
