<?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: Milton Vafana</title>
    <description>The latest articles on Forem by Milton Vafana (@miltonhyndrex).</description>
    <link>https://forem.com/miltonhyndrex</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%2F1924648%2F150b08ec-2160-4309-93a5-5f6accdc2742.png</url>
      <title>Forem: Milton Vafana</title>
      <link>https://forem.com/miltonhyndrex</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/miltonhyndrex"/>
    <language>en</language>
    <item>
      <title>Bridging Rust and PHP with whyNot: A Learner’s Journey</title>
      <dc:creator>Milton Vafana</dc:creator>
      <pubDate>Sun, 11 Jan 2026 16:30:11 +0000</pubDate>
      <link>https://forem.com/miltonhyndrex/bridging-rust-and-php-with-whynot-a-learners-journey-15ed</link>
      <guid>https://forem.com/miltonhyndrex/bridging-rust-and-php-with-whynot-a-learners-journey-15ed</guid>
      <description>&lt;h2&gt;
  
  
  Bridging Rust and PHP with whyNot: A Learner’s Journey
&lt;/h2&gt;

&lt;p&gt;When you’re learning a new language, the temptation is to start small: toy projects, simple exercises, maybe a “Hello World” or two. But I’ve always believed the best way to learn is to build something real, something that scratches an itch and forces you to wrestle with the language in practice. That’s how &lt;strong&gt;whyNot&lt;/strong&gt; came to life — a Rust ↔ PHP bridge that lets you call PHP functions directly from Rust, capture return values, printed output, and exceptions, with async support via threads or Tokio.&lt;/p&gt;

&lt;p&gt;I’m still learning Rust myself, and whyNot is as much a learning experiment as it is a tool. But it’s already proving useful, and I want to share the story, the features, and the lessons I’ve learned along the way.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why I Built whyNot
&lt;/h3&gt;

&lt;p&gt;PHP has been my bread and butter for years. I love PHP — it’s the language I’m most comfortable with, the one I’ve used to build countless projects, and the one I trust when I need to get things done quickly. It powers much of the web, from WordPress to Laravel to legacy enterprise systems. But PHP has limits, especially when it comes to performance and modern concurrency. Rust, on the other hand, is fast, safe, and designed for systems programming. The idea of combining them fascinated me.&lt;/p&gt;

&lt;p&gt;Instead of rewriting PHP applications in Rust (which is unrealistic for most teams), I thought: why not build a bridge? Why not let Rust call into PHP directly, so developers can leverage existing PHP logic while experimenting with Rust’s ecosystem? And for me personally, why not use this as a fun way to learn Rust by building something ambitious?&lt;/p&gt;

&lt;p&gt;That’s the spirit behind the name: &lt;strong&gt;whyNot&lt;/strong&gt;. It’s both a challenge and an invitation.&lt;/p&gt;




&lt;h3&gt;
  
  
  What whyNot Can Do
&lt;/h3&gt;

&lt;p&gt;Here’s what the crate currently supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Call any PHP function from Rust
&lt;/li&gt;
&lt;li&gt;Capture return values and printed output
&lt;/li&gt;
&lt;li&gt;Structured exception handling with &lt;code&gt;PhpException&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Objects returned with class + fields
&lt;/li&gt;
&lt;li&gt;Persistent runtime (globals/includes survive across calls)
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;include&lt;/code&gt; and &lt;code&gt;eval&lt;/code&gt; support
&lt;/li&gt;
&lt;li&gt;Async via threads (&lt;code&gt;call_async_with_cfg&lt;/code&gt;)
&lt;/li&gt;
&lt;li&gt;Async/await via Tokio (&lt;code&gt;--features async_tokio&lt;/code&gt;)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means you can write PHP functions in a &lt;code&gt;bootstrap.php&lt;/code&gt; file, then call them from Rust as if they were native. You can capture not just the return value, but also whatever the PHP function prints, and handle exceptions in a structured way.&lt;/p&gt;




&lt;h3&gt;
  
  
  🚀 Getting Started
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;Add whyNot to your project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo add whynot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or in your &lt;code&gt;Cargo.toml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[dependencies]&lt;/span&gt;
&lt;span class="py"&gt;whynot&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.1.1"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ll also need PHP CLI (&lt;code&gt;php&lt;/code&gt;) available in your PATH.&lt;/p&gt;

&lt;h3&gt;
  
  
  Initialize PHP scaffolding
&lt;/h3&gt;

&lt;p&gt;After installing the crate, install the CLI binary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo &lt;span class="nb"&gt;install &lt;/span&gt;whynot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;whynot-init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a &lt;code&gt;php/&lt;/code&gt; folder in your project root with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;runner.php&lt;/code&gt; — the bridge script used internally by whyNot
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;bootstrap.php&lt;/code&gt; — where you define your own PHP functions/classes
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Edit &lt;code&gt;bootstrap.php&lt;/code&gt; to add your PHP logic. The Rust side will call into these functions.&lt;/p&gt;




&lt;h3&gt;
  
  
  Usage Examples
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Basic Call
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;bootstrap.php:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Adding &lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="s2"&gt; + &lt;/span&gt;&lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;$b&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;&lt;strong&gt;Rust:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;whynot&lt;/span&gt;&lt;span class="p"&gt;::{&lt;/span&gt;&lt;span class="n"&gt;new_runtime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PhpRuntime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;RuntimeConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;RuntimeKind&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;RuntimeConfig&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;default&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;rt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;new_runtime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;RuntimeKind&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="nf"&gt;.unwrap&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rt&lt;/span&gt;&lt;span class="nf"&gt;.call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"add"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="nf"&gt;.into&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="nf"&gt;.into&lt;/span&gt;&lt;span class="p"&gt;()])&lt;/span&gt;&lt;span class="nf"&gt;.unwrap&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"add.result = {:?}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="py"&gt;.result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"add.output = {:?}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="py"&gt;.output&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;&lt;strong&gt;Output:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;add.result = Some(12)
add.output = "Adding 7 + 5\n"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Exception Handling
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;bootstrap.php:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;risky&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Something went wrong!"&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;&lt;strong&gt;Rust:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;boom&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rt&lt;/span&gt;&lt;span class="nf"&gt;.call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"risky"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;[])&lt;/span&gt;&lt;span class="nf"&gt;.unwrap&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nf"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boom&lt;/span&gt;&lt;span class="py"&gt;.exception&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Exception: {} ({})"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="py"&gt;.message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="py"&gt;.class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Trace: {}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="py"&gt;.trace&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;h3&gt;
  
  
  Async with Threads
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;whynot&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;process&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;ProcRuntime&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;h1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;ProcRuntime&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;call_async_with_cfg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="nf"&gt;.clone&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="s"&gt;"greet"&lt;/span&gt;&lt;span class="nf"&gt;.to_string&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nd"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"Milton"&lt;/span&gt;&lt;span class="nf"&gt;.into&lt;/span&gt;&lt;span class="p"&gt;()]);&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;h2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;ProcRuntime&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;call_async_with_cfg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="nf"&gt;.clone&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="s"&gt;"add"&lt;/span&gt;&lt;span class="nf"&gt;.to_string&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nd"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="nf"&gt;.into&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="nf"&gt;.into&lt;/span&gt;&lt;span class="p"&gt;()]);&lt;/span&gt;
&lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"greet = {:?}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h1&lt;/span&gt;&lt;span class="nf"&gt;.join&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.unwrap&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.unwrap&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="py"&gt;.result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"add = {:?}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h2&lt;/span&gt;&lt;span class="nf"&gt;.join&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.unwrap&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.unwrap&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="py"&gt;.result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Async/Await with Tokio
&lt;/h3&gt;

&lt;p&gt;Enable the feature:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo run &lt;span class="nt"&gt;--example&lt;/span&gt; tokio_async &lt;span class="nt"&gt;--features&lt;/span&gt; async_tokio
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="nd"&gt;#[tokio::main]&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;cfg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;RuntimeConfig&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;default&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;greet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;whynot&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;async_tokio&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;call_async&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cfg&lt;/span&gt;&lt;span class="nf"&gt;.clone&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="s"&gt;"greet"&lt;/span&gt;&lt;span class="nf"&gt;.to_string&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nd"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"Milton"&lt;/span&gt;&lt;span class="nf"&gt;.into&lt;/span&gt;&lt;span class="p"&gt;()])&lt;/span&gt;
        &lt;span class="k"&gt;.await&lt;/span&gt;&lt;span class="nf"&gt;.unwrap&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"greet.result = {:?}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;greet&lt;/span&gt;&lt;span class="py"&gt;.result&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;h3&gt;
  
  
  Project Layout
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;whynot/
  Cargo.toml
  src/
    lib.rs
    value.rs
    macros.rs
    process.rs
    embedded.rs
    async_tokio.rs
  php/
    runner.php
    bootstrap.php
  examples/
    call_any.rs
    async_calls.rs
    tokio_async.rs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Roadmap
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Function calls, output capture, exceptions ✅
&lt;/li&gt;
&lt;li&gt;Object serialization ✅
&lt;/li&gt;
&lt;li&gt;Includes, eval ✅
&lt;/li&gt;
&lt;li&gt;Threaded async ✅
&lt;/li&gt;
&lt;li&gt;Tokio async/await ✅
&lt;/li&gt;
&lt;li&gt;Embedded Zend runtime (in‑process) 🚧
&lt;/li&gt;
&lt;li&gt;Resource/extension support 🚧
&lt;/li&gt;
&lt;li&gt;Automatic Rust ↔ PHP struct mapping 🚧
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The long-term vision is to make Rust ↔ PHP interop seamless, with support for complex data structures and embedded runtimes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Learning Rust Through Building
&lt;/h2&gt;

&lt;p&gt;I want to emphasize something: I’m still learning Rust. whyNot wasn’t built from a place of mastery, but from curiosity. I struggled with FFI, lifetimes, and async patterns. I broke things constantly. But each challenge taught me something new and i hope i will get good enough to make it better.&lt;/p&gt;

&lt;p&gt;Rust’s strictness forced me to think differently about safety and concurrency. PHP reminded me of pragmatism and flexibility. And because I genuinely love PHP and feel comfortable with it, I wanted this bridge to exist. For me, whyNot is about combining the language I know best with the one I’m still learning, and discovering what happens when they meet.&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;whyNot is still evolving, but it already opens up exciting possibilities: calling PHP functions from Rust, capturing output, handling exceptions, and running async tasks. For PHP developers curious about Rust, it’s a practical gateway. For Rust learners like me, it’s a hands-on way to explore the language while building something useful.&lt;/p&gt;

&lt;p&gt;👉 Source code: GitHub &lt;a href="https://github.com/nia-cloud-official/whynot" rel="noopener noreferrer"&gt;(github.com)&lt;/a&gt;&lt;br&gt;&lt;br&gt;
👉 Crate: &lt;a href="https://crates.io/crates/whynot" rel="noopener noreferrer"&gt;crates.io&lt;/a&gt;&lt;br&gt;&lt;br&gt;
👉 Original post: &lt;a href="https://medium.com/@miltonhyndrex/bridging-rust-and-php-with-whynot-a-learners-journey-5be686ad1de5" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;&lt;/p&gt;

</description>
      <category>rust</category>
      <category>php</category>
      <category>interoperability</category>
      <category>learning</category>
    </item>
    <item>
      <title>Rustnite: Turning Rust Learning Into a Battle Royale</title>
      <dc:creator>Milton Vafana</dc:creator>
      <pubDate>Sun, 11 Jan 2026 15:31:19 +0000</pubDate>
      <link>https://forem.com/miltonhyndrex/rustnite-turning-rust-learning-into-a-battle-royale-2pn1</link>
      <guid>https://forem.com/miltonhyndrex/rustnite-turning-rust-learning-into-a-battle-royale-2pn1</guid>
      <description>&lt;p&gt;Rust is well known for it's steep learning curve. Rust is uncompromising about safety and performance, and that makes it one of the most rewarding languages to master. &lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Rustnite&lt;/strong&gt;: a gamified, competitive platform where learning Rust feels less like homework and more like a battle royale. Instead of grinding through chapters, you drop into an arena, tackle challenges, earn XP, and climb leaderboards — all while writing real Rust code that compiles and runs in the browser.&lt;/p&gt;

&lt;p&gt;👉 Try it now: &lt;a href="https://rustnite.wasmer.app" rel="noopener noreferrer"&gt;rustnite.wasmer.app&lt;/a&gt;&lt;br&gt;&lt;br&gt;
👉 Explore the repo: &lt;a href="https://github.com/nia-cloud-official/rustnite" rel="noopener noreferrer"&gt;Rustnite on GitHub&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🎮 What Makes Rustnite Different?
&lt;/h2&gt;

&lt;p&gt;Rustnite isn’t just another coding playground. It’s built to combine &lt;strong&gt;learning, competition, and creation&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Battle Royale Learning&lt;/strong&gt;: Compete against other developers worldwide. Every challenge is a chance to prove your skills.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gamification That Sticks&lt;/strong&gt;: Earn XP, unlock achievements, and climb leaderboards. Motivation comes naturally when progress feels like winning.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real Projects, Not Just Snippets&lt;/strong&gt;: Build CLI tools, web servers, chat apps, and portfolio-worthy projects directly in the browser.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Coding Experience&lt;/strong&gt;: Powered by Monaco editor and Wasmer, Rustnite gives you instant compilation, syntax highlighting, and real-time feedback.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community &amp;amp; Collaboration&lt;/strong&gt;: Share your solutions, learn from others, and showcase your Rust journey.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free Forever&lt;/strong&gt;: No paywalls, no credit card required. Just open the site and start coding.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ How to Get Started
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;a href="https://rustnite.wasmer.app" rel="noopener noreferrer"&gt;rustnite.wasmer.app&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;Register and enter the coding arena.
&lt;/li&gt;
&lt;li&gt;Start tackling challenges — from beginner syntax to advanced concurrency.
&lt;/li&gt;
&lt;li&gt;Earn XP, unlock achievements, and climb the leaderboard.
&lt;/li&gt;
&lt;li&gt;Fork the repo on &lt;a href="https://github.com/nia-cloud-official/rustnite" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; to contribute or extend the platform.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🚧 Roadmap Ahead
&lt;/h2&gt;

&lt;p&gt;Rustnite is just getting started. Here’s what’s next:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More challenges and project templates.
&lt;/li&gt;
&lt;li&gt;Multiplayer modes with live coding battles.
&lt;/li&gt;
&lt;li&gt;Deeper Wasmer integrations for advanced Rust + Wasm workflows.
&lt;/li&gt;
&lt;li&gt;Community-driven features: shared snippets, collaborative projects, and tournaments.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✨ Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;Rustnite is about making Rust mastery fun, competitive, and rewarding. Whether you’re new to Rust or sharpening your skills, this is your chance to join the battle, learn faster, and build cooler projects. This is something i was building to try sharpen my skills but this will never surpass platforms like #rustfinity &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.rustfinity.com%2F" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.rustfinity.com%2F" alt="https://www.rustfinity.com/" width="" height=""&gt;&lt;/a&gt; which is an amazing platform to learn rust.  &lt;/p&gt;

&lt;p&gt;👉 Jump into the arena today: &lt;a href="https://rustnite.wasmer.app" rel="noopener noreferrer"&gt;rustnite.wasmer.app&lt;/a&gt;  &lt;/p&gt;

</description>
      <category>rust</category>
      <category>learning</category>
      <category>programming</category>
      <category>webapp</category>
    </item>
    <item>
      <title>How to Add Live Deploy Status Badges to Your Render Projects</title>
      <dc:creator>Milton Vafana</dc:creator>
      <pubDate>Sun, 30 Mar 2025 07:28:16 +0000</pubDate>
      <link>https://forem.com/miltonhyndrex/how-to-add-live-deploy-status-badges-to-your-render-projects-3co3</link>
      <guid>https://forem.com/miltonhyndrex/how-to-add-live-deploy-status-badges-to-your-render-projects-3co3</guid>
      <description>&lt;p&gt;Let me introduce you to render-status-badge - a lightweight Node.js tool that generates dynamic status badges for Render deployments using Shields.io and Render's API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fduogsqzxqlpfkksa72r3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fduogsqzxqlpfkksa72r3.png" alt="A screenshot of the render badges readme demo" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why You Need This
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Instant Visibility: Know if your last deploy succeeded or failed at a glance. &lt;/li&gt;
&lt;li&gt;Professional Polish: Make your READMEs look pro with Shields.io badges. &lt;/li&gt;
&lt;li&gt;Zero Maintenance: Automatically updates using GitHub Actions. &lt;/li&gt;
&lt;li&gt;Multi-Project Ready: Use it across all your Render services.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How It Works in 3 Steps
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Install the Package&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install render-status-badge 

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or run it once without installing&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx render-status-badge

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configure Your Render Credentials
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;2. Create a &lt;code&gt;.env&lt;/code&gt; file with your Render API key and service ID:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RENDER_API_KEY="your_api_key_here" 
RENDER_SERVICE_ID="srv-your-service-id"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Never commit &lt;code&gt;.env&lt;/code&gt; to Git! Use GitHub Secrets for CI/CD._&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;3. Add the Badge to Your README&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run the tool to get your badge URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx render-status-badge 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output is something like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://img.shields.io/badge/Render-Live-brightgreen?logo=render&amp;amp;style=for-the-badge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Then paste the URL into your &lt;code&gt;README.md&lt;/code&gt;:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;![Render Status](https://img.shields.io/badge/Render-Live-brightgreen?logo=render&amp;amp;style=for-the-badge)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Automate It with GitHub Action (Optional)&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;For **real-time updates&lt;/strong&gt;, add this workflow to your repo**&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.github/workflows/update-badge.yml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: Update Render Status Badge 
on: 
 schedule: 
 - cron: '*/5 * * * *' # Update every 5 minutes 
 workflow_dispatch:
jobs: 
 update-badge: 
 runs-on: ubuntu-latest 
 steps: 
 - uses: actions/checkout@v4 
 - name: Generate Badge 
 env: 
 RENDER_API_KEY: ${{ secrets.RENDER_API_KEY }} 
 RENDER_SERVICE_ID: ${{ secrets.RENDER_SERVICE_ID }} 
 run: npx render-status-badge &amp;gt;&amp;gt; badge-url.txt 
 - name: Update README 
 run: | 
 sed -i "s|&amp;lt;! - RENDER_BADGE →.*|![Render Status]($(cat badge-url.txt))|" README.md 
 git commit -am "Update Render status badge" &amp;amp;&amp;amp; git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Customize Your Badge&lt;/strong&gt;&lt;br&gt;
Use Shields.io's parameters to tweak the style:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FRender-Live-brightgreen%3Flogo%3Drender%26style%3Dflat-square%26label%3DDeploy%2520Status" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FRender-Live-brightgreen%3Flogo%3Drender%26style%3Dflat-square%26label%3DDeploy%2520Status" alt="Render Status" width="137" height="20"&gt;&lt;/a&gt;&lt;br&gt;
Options&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;style&lt;/code&gt;: &lt;code&gt;for-the-badge&lt;/code&gt; (default), &lt;code&gt;flat-square&lt;/code&gt;, &lt;code&gt;plastic&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;label&lt;/code&gt;: Custom text like "Deploy Status" &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;color&lt;/code&gt;: Override based on your theme&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you like the project please feel free to Contribute or Star the Project, it lives on GitHub: &lt;a href="https://github.com/nia-cloud-official/render-status" rel="noopener noreferrer"&gt;https://github.com/nia-cloud-official/render-status&lt;/a&gt;&lt;br&gt;
I'd love your help! &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⭐ Star the repo to show support. &lt;/li&gt;
&lt;li&gt;🐛 Report bugs via GitHub Issues. &lt;/li&gt;
&lt;li&gt;💡 Suggest features and fixes or submit PRs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Render is an amazing platform, and now it's got a little extra polish. Whether you're managing 1 service or 100, these badges will save you time and keep your team informed.&lt;br&gt;
Go ahead - give your README the glow-up it deserves! ✨&lt;/p&gt;

</description>
      <category>render</category>
      <category>programming</category>
      <category>webdev</category>
      <category>node</category>
    </item>
    <item>
      <title>Finding the Right Collaborator on GitHub</title>
      <dc:creator>Milton Vafana</dc:creator>
      <pubDate>Sun, 30 Mar 2025 06:54:07 +0000</pubDate>
      <link>https://forem.com/miltonhyndrex/finding-the-right-collaborator-on-github-g0p</link>
      <guid>https://forem.com/miltonhyndrex/finding-the-right-collaborator-on-github-g0p</guid>
      <description>&lt;p&gt;Finding the right contributor on GitHub.In the fast-paced world of software development, collaboration is key to bringing innovative ideas to life. Whether you're an open-source enthusiast or working on a private project, finding the right collaborator can make a significant difference. In this blog post, we'll explore strategies for finding the perfect collaborator on GitHub and introduce you to a handy tool l designed to streamline this process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Collaboration Matters&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Collaboration offers numerous benefits:&lt;/li&gt;
&lt;li&gt;Diverse Skill Sets: Teaming up with others brings a variety of skills to the table.&lt;/li&gt;
&lt;li&gt;Increased Productivity: Sharing the workload helps in achieving milestones faster.&lt;/li&gt;
&lt;li&gt;Learning Opportunities: Collaborating with others allows you to learn new techniques and best practices.&lt;/li&gt;
&lt;li&gt;Better Problem Solving: Different perspectives can lead to more effective solutions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Strategies for Finding Collaborators&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Leverage GitHub's Search Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;GitHub's search functionality is a powerful tool for finding potential collaborators. You can search for users based on their repositories, contributions, and skills.&lt;/li&gt;
&lt;li&gt;Search by Repository: Find users who have worked on projects similar to yours.&lt;/li&gt;
&lt;li&gt;Search by Language: Look for users proficient in the programming languages your project requires.&lt;/li&gt;
&lt;li&gt;Explore Topics: Use topic tags to discover repositories and contributors with specific interests.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Engage with the Community
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Be an active member of the GitHub community:&lt;/li&gt;
&lt;li&gt;Participate in Discussions: Join conversations in issues and pull requests.&lt;/li&gt;
&lt;li&gt;Contribute to Open Source: Contributing to other projects can help you connect with like-minded developers.&lt;/li&gt;
&lt;li&gt;Attend Meetups and Events: GitHub hosts various events where you can meet potential collaborators.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Use Social Media and Forums
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Platforms like Twitter, Reddit, and specialized forums can be great places to find collaborators. Share your project details and what you're looking for in a collaborator.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Network with Colleagues and Friends
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Don't underestimate the power of your existing network. Let your colleagues and friends know you're looking for collaborators. They might know someone who fits the bill.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Introducing the Collaborator Finder Tool&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To simplify the process of finding the right collaborator, l am developing a Collaborator Finder Tool. This application leverages the GitHub API to help you find potential collaborators based on specific criteria.&lt;br&gt;
&lt;strong&gt;&lt;u&gt;Features&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search by Username: Quickly find users by their GitHub username.&lt;/li&gt;
&lt;li&gt;Search by Skill: Discover users based on their repositories, skills, or interests.&lt;/li&gt;
&lt;li&gt;Search by Contributions: Identify users who have contributed to specific repositories.&lt;/li&gt;
&lt;li&gt;Filter by Location: Narrow down search results based on geographical location.&lt;/li&gt;
&lt;li&gt;User Profiles: View detailed profiles including repositories, contributions, and activity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Check it out on:&lt;/strong&gt; &lt;a href="https://collaborator-finder-tool.onrender.com/" rel="noopener noreferrer"&gt;https://collaborator-finder-tool.onrender.com/&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Find Repo here:&lt;/strong&gt; &lt;a href="https://github.com/nia-cloud-official/collaborator-finder-tool/" rel="noopener noreferrer"&gt;https://github.com/nia-cloud-official/collaborator-finder-tool/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am still learning and trying to advance my coding skills, although l would love to hear your thoughts on the whole idea itself and please do share feedback and contributes are greatly appreciated. &lt;/p&gt;

</description>
      <category>programming</category>
      <category>github</category>
      <category>javascript</category>
      <category>git</category>
    </item>
  </channel>
</rss>
