<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>JimJam&#x27;s blogs</title><link>https://blog.anandbansal.me/</link><description>JimJam&#x27;s blogs</description><item><title>My Experience of Building Deimos - Part 2 : UniFFI Magic</title><link>https://blog.anandbansal.me/building-deimos-part-2/</link><guid>https://blog.anandbansal.me/building-deimos-part-2/</guid><pubDate>Sat, 07 Mar 2026 00:00:00 +0000</pubDate><description>&lt;p&gt;Imagine you are a Rustacean like me. You write your software logic in Rust. You are happy, but suddenly you realize you need to write Kotlin code to use that logic in an Android app. You&amp;rsquo;re worried, but you have two options:&lt;br /&gt;
- Rewrite into Kotlin like a normie &lt;br /&gt;
- Use UniFFI like a true rustacean 🦀&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Note: There are other options such as using&lt;a href=&quot;https://github.com/wasm-bindgen/wasm-bindgen&quot;&gt;wasm bindings&lt;/a&gt; which is used by mopro for web apps but that is not our focus currently and so we are putting that out of scope for this article&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Welcome back to the second article of the series where I share my raw learning and expereince building Deimos. If you want to know what I am talking about, read the previous article &lt;a href=&quot;https://open.substack.com/pub/jimjam908460/p/my-experience-of-building-deimos?r=6t71oe&amp;amp;utm_campaign=post&amp;amp;utm_medium=web&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This article will attempt to break down this amazing piece of code, how it works under the abstraction, how you can use it, and finally, how it is used in &lt;strong&gt;Deimos.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Motivation&lt;/h3&gt;
&lt;p&gt;The Original motivation is well presented in the &lt;a href=&quot;https://github.com/mozilla/uniffi-rs/blob/main/docs/adr/0000-whats-the-big-idea.md&quot;&gt;original proposal&lt;/a&gt;. It consider the four choices we also initially faced, and they valued each option with its pros and cons. The only percieved con of developing UniFFI option was the risk of it bearing less fruit then the time spent on it. Fortunately that didn&amp;rsquo;t turn out to be true and it provided a much higher return.&lt;/p&gt;
&lt;h3&gt;We Gotta make Bindings&lt;/h3&gt;
&lt;p&gt;Our goal is to call code written in rust through different programming languages -formally known as a &lt;em&gt;Foreign Function Interface (FFI).&lt;/em&gt; This is done by generating foreign-language bindings that target Rust libraries. Currently UniFFI fully supports Python, Kotlin, and Swift, with partial legacy support for Ruby. In this article, we will demonstrate using Kotlin, because it&amp;rsquo;s the one most relevant to Deimos. &lt;/p&gt;
&lt;p&gt;This is how bindings communicate with the logic code:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://substackcdn.com/image/fetch/$s_!EkAy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05983049-8fd8-49a0-b7ff-1f29d9929cd6_1189x774.png&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;img1.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s zoom in at the architecture of Deimos App ( I have isolated the architecture for Android app for a better explanation, though there is equivalent architecture for iOS as well) &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://substackcdn.com/image/fetch/$s_!wgdS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F253d93e2-9463-4874-b74c-54adc3f4b6ac_956x718.png&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;img2.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The parts sandwhiched between the Deimos App and Rust Logic is the abstraction we called &amp;ldquo;UniFFI Magic&amp;rdquo; in the &lt;a href=&quot;https://open.substack.com/pub/jimjam908460/p/my-experience-of-building-deimos?r=6t71oe&amp;amp;utm_campaign=post&amp;amp;utm_medium=web&quot;&gt;previous article&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s go through a hands-on tutorial to really understand what it does and then we will pop open the hood.&lt;/p&gt;
&lt;p&gt;This is our very &lt;em&gt;crucial&lt;/em&gt; business logic that we want to call from a different language
[code]
    fn product(a: u32, b: u32) -&amp;gt; u32 {
        a * b
    }
[/code]&lt;/p&gt;
&lt;p&gt;We are creating a &amp;ldquo;math&amp;rdquo; library. So we will start with 𝚌𝚊𝚛𝚐𝚘 𝚗𝚎𝚠 --𝚕𝚒𝚋 𝚖𝚊𝚝𝚑 and add our code to 𝚕𝚒𝚋.𝚛𝚜. Next, append the following to 𝙲𝚊𝚛𝚐𝚘.𝚝𝚘𝚖𝚕. (I have used v0.31.0, which is the latest at the time of writing this article).
[code]
    [dependencies]
    uniffi = { version = &amp;ldquo;0.31.0&amp;rdquo;, features = [ &amp;ldquo;cli&amp;rdquo; ] }&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[build-dependencies]
uniffi = { version = &quot;0.31.0&quot;, features = [ &quot;build&quot; ] }

[lib]
crate-type = [&quot;cdylib&quot;]
name = &quot;math&quot; # This is our crate name in this tutorial
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;[/code]&lt;/p&gt;
&lt;p&gt;𝚌𝚍𝚢𝚕𝚒𝚋 is used to create a dynamic library that can be called by our Kotlin code. &lt;br /&gt;
Next, we have to define the interface and scaffold it. The interface can be defined in two ways: through &lt;a href=&quot;https://mozilla.github.io/uniffi-rs/latest/tutorial/udl_file.html&quot;&gt;a UDL file&lt;/a&gt;, or proc macros. We are using the latter for simplicity. Scaffolding is as simple as adding a macro at the top (we will see what happens under the hood later ).&lt;br /&gt;
With these changes, our lib.rs looks like this:
[code]
    uniffi::setup_scaffolding!();&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#[uniffi::export]
fn product(a: u32, b: u32) -&amp;gt; u32 {
    a*b
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;[/code]&lt;/p&gt;
&lt;p&gt;Last step is to actually create bindings! For that we will create a binary and then run it.
[code]
    [[bin]]
    # This can be whatever name makes sense for your project, but the rest of this tutorial assumes uniffi-bindgen.
    name = &amp;ldquo;uniffi-bindgen&amp;rdquo;
    path = &amp;ldquo;bin/uniffi-bindgen.rs&amp;rdquo;&lt;/p&gt;
&lt;p&gt;[/code]&lt;/p&gt;
&lt;p&gt;And here is the content of the file 𝚋𝚒𝚗/𝚞𝚗𝚒𝚏𝚏𝚒-𝚋𝚒𝚗𝚍𝚐𝚎𝚗.𝚛𝚜
[code]
    fn main() {
        uniffi::uniffi_bindgen_main()
    }
[/code]&lt;/p&gt;
&lt;p&gt;We are pretty much done now ! Just run the binary we just created using the command below :
[code]
    cargo build &amp;ndash;release &amp;amp;&amp;amp; cargo run &amp;ndash;bin uniffi-bindgen generate &amp;ndash;library target/release/libmath.so &amp;ndash;language kotlin &amp;ndash;out-dir out
[/code]&lt;/p&gt;
&lt;p&gt;And voila, we have generated the bindings!. The output has two parts: 𝚕𝚒𝚋𝚖𝚊𝚝𝚑.𝚜𝚘 (the library containg native code) and math.kt (a wrapper containing Kotlin-specific code that calls the library, which we generated by setting the flag &amp;ndash; 𝚕𝚊𝚗𝚐𝚊𝚞𝚐𝚎 𝚔𝚘𝚝𝚕𝚒𝚗).&lt;/p&gt;
&lt;p&gt;Now, let&amp;rsquo;s use these bindings to do our &lt;em&gt;critical&lt;/em&gt; operation. Make a file called main.kt at the same location as math.kt.
[code]
    import uniffi.math.*&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fun main() {
    val a: UInt = 5u
    val b: UInt = 7u
    val res = product(a, b)
    println(&quot;Result of $a * $b is $res&quot;)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;[/code]&lt;/p&gt;
&lt;p&gt;You can run this code following the step in the &lt;a href=&quot;https://github.com/AnInsaneJimJam/uniffi_tutorial&quot;&gt;github repo&lt;/a&gt;, I made for this article. It includes a script for setting up Kotlin, compiling, and running the code. It also has a meaningful commit history to help you follow along.
[code]
    Checking for JNA library&amp;hellip;
    Compiling Kotlin files&amp;hellip;
    Running output&amp;hellip;
    Result of 5 * 7 is 35
[/code]&lt;/p&gt;
&lt;p&gt;Hooray ! We have done it. We executed our &lt;em&gt;critcal&lt;/em&gt; operation through Kotlin without writing any Kotlin logic.&lt;/p&gt;
&lt;h3&gt;Revealing the trick&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;This section can be skipped without losing any context for the future, but the curious ones should stick around.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Just like all great magic tricks boil down to cleverness and illusion, our UniFFI &amp;ldquo;magic&amp;rdquo; is the result of great architectural design and clever engineering. Let&amp;rsquo;s look at both from a wanderer&amp;rsquo;s perspective.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://substackcdn.com/image/fetch/$s_!oCQv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7f0018-7a86-419a-8db6-5c1558d2b36a_1284x511.png&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;img3.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There are 5 main steps in the flow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Metadata Preparation :&lt;/strong&gt; During 𝚌𝚊𝚛𝚐𝚘 𝚋𝚞𝚒𝚕𝚍, our Rust code is converted from a Rust AST (Abstract Syntax Tree) to flat metadata arrays using the interface defined by the macros (or UDL file). The next step runs the 𝚞𝚗𝚒𝚏𝚏𝚒-𝚋𝚒𝚗𝚍𝚐𝚎𝚗 binary, which embeds this metadata directly into the compiled &lt;code&gt;.so&lt;/code&gt; or &lt;code&gt;.𝚍𝚢𝚕𝚒𝚋&lt;/code&gt; library.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Initial IR Generation:&lt;/strong&gt; The flat list of metadata is converted back into a structured hierarchical tree. Think of this as generating a theoretical interface definition. Essentially we converted Rust AST to language-agnostic structured hierarchical tree.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;General IR Generation:&lt;/strong&gt; The Initial IR is transformed into the General IR. This essentially bridges the gap between the purely theoretical interface definition and the physical C-FFI reality. It iterates over every node of the tree and computes the exact FFI mechanics needed for each item.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Language Specific IR :&lt;/strong&gt; he General IR gets transformed into the Language-Specific IR. This involves incorporating language-specific details. For example, resolving intermediate &lt;code&gt;UInt64&lt;/code&gt; types to &lt;code&gt;Long&lt;/code&gt; in Kotlin, or reformatting function names to match the target language&amp;rsquo;s naming conventions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Code Generation using Askama :&lt;/strong&gt; Finally, the IR is converted into language-specific code. &lt;code&gt;Math.kt&lt;/code&gt; was generated as a result of this stage.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This completes the binding generation. But how does the actual execution work?&lt;/p&gt;
&lt;h5&gt;Execution Flow:&lt;/h5&gt;
&lt;p&gt;Calling Kotlin Code -&amp;gt; Data types are converted to adequate C types (e.g., &lt;code&gt;u8&lt;/code&gt;, &lt;code&gt;i32&lt;/code&gt;, &lt;code&gt;f64&lt;/code&gt;, pointers) through a process called &lt;strong&gt;Kotlin lowering&lt;/strong&gt; -&amp;gt; The Rust binary is called -&amp;gt; C code handles the type conversion into Rust types (&lt;strong&gt;Rust lifting&lt;/strong&gt;) -&amp;gt; The Rust logic is executed -&amp;gt; The output is converted back to C types (&lt;strong&gt;Rust lowering&lt;/strong&gt;) -&amp;gt; Finally, the output is converted back to Kotlin types (&lt;strong&gt;Kotlin lifting&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Lowering&lt;/em&gt; and &lt;em&gt;Lifting&lt;/em&gt; refer to the type conversion between higher-level languages and lower-level ones, and vice versa.&lt;/p&gt;
&lt;p&gt;This topic could be a separate article on its own, but I&amp;rsquo;ve tried to extract just enough juice to give you a solid understanding. Let&amp;rsquo;s move on.&lt;/p&gt;
&lt;h3&gt;Deimos Part Finally …&lt;/h3&gt;
&lt;p&gt;This section acts as an introductory bridge to upcoming articles. We are now moving into the &amp;ldquo;Prover Rust Backend&amp;rdquo; territory of the Deimos architecture we talked about in the previous article. Consider this a warm-up before we dive into different zkVMs and Provers. Let&amp;rsquo;s see how UniFFI is used in Deimos (or Mopro).&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://substackcdn.com/image/fetch/$s_!jNH7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2a57da6-9083-4e94-99ba-2f5c728f1d77_1117x769.png&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;img4.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We can import any zkVM or Prover API into our library and generate bindings for it. Mopro makes this even easier for us. The &lt;code&gt;mopro-cli&lt;/code&gt; provides a lot of customizable boilerplate code, which is why we chose to scaffold Deimos on top of it. It even provides boilerplate Kotlin and Swift code!  &lt;/p&gt;
&lt;p&gt;This wraps up this article and provides a solid foundation that we will build upon in future articles, where we will integrate different zkVMs and Provers.  &lt;/p&gt;
&lt;h3&gt;Useful Links:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Mopro Docs: &lt;a href=&quot;https://zkmopro.org/docs/intro&quot;&gt;https://zkmopro.org/docs/intro&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;UniFFI user guide: &lt;a href=&quot;https://mozilla.github.io/uniffi-rs/latest/Getting_started.html&quot;&gt;https://mozilla.github.io/uniffi-rs/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;UniFFI-rs github: &lt;a href=&quot;https://github.com/mozilla/uniffi-rs&quot;&gt;https://github.com/mozilla/uniffi-rs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Repo for this article: &lt;a href=&quot;https://github.com/AnInsaneJimJam/uniffi_tutorial&quot;&gt;https://github.com/AnInsaneJimJam/uniffi_tutorial&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Don&amp;rsquo;t forget to check the previous article if you have not read it&lt;/p&gt;</description></item><item><title>My Experience of Building Deimos - Part 1 : Journey Begins</title><link>https://blog.anandbansal.me/building-deimos-part-1/</link><guid>https://blog.anandbansal.me/building-deimos-part-1/</guid><pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate><description>&lt;p&gt;Welcome to the first article of a new series - where I will be documenting my journey and raw learnings of building &lt;strong&gt;Deimos&lt;/strong&gt;. You may be wondering, what is &lt;a href=&quot;https://github.com/BlocSoc-iitr/Deimos&quot;&gt;Deimos&lt;/a&gt; ?(feel free to check out our Github by clicking the link and don&amp;rsquo;t forget to star us! &amp;lt;3 ) It&amp;rsquo;s a client side benchmarking initiative by &lt;em&gt;&lt;a href=&quot;https://blocsoc.eth.limo/&quot;&gt;BlocSoc IITR&lt;/a&gt;&lt;/em&gt;. I&amp;rsquo;ll dive into the technical weeds of the project, some below and mostly in the upcoming articles, but first, let&amp;rsquo;s talk about how this project started and why it&amp;rsquo;s so necessary. &lt;/p&gt;
&lt;h4&gt;Identifying the Gap&lt;/h4&gt;
&lt;p&gt;This project started in mid August 2025. While exploring the ZK infrastructure, we identifyied a large gap: there was a massive lack of client-side benchmarks for proving and verifying common ZKP circuits across different provers.&lt;br /&gt;
Sure, we have &lt;a href=&quot;https://github.com/privacy-ethereum/csp-benchmarks&quot;&gt;csp-benchmarks&lt;/a&gt; on &lt;a href=&quot;https://ethproofs.org/csp-benchmarks&quot;&gt;Ethproofs&lt;/a&gt;. But they were proving on dedicated AWS for &lt;em&gt;Apple M1 CPU with 8 cores&lt;/em&gt;. But what&amp;rsquo;s missing was the benchmarks of the most common client device - the mobile phones. We imagine a future where privacy focused application can prove and verify ZKP circuits on mobile devices. But they need data for making the right choice of circuits and provers. Making that data and insights available is our mission.&lt;/p&gt;
&lt;h4&gt;Why Client Side ?&lt;/h4&gt;
&lt;p&gt;This &lt;a href=&quot;https://pse.dev/blog/client-side-gpu-everyday-ef-privacy&quot;&gt;article&lt;/a&gt; by PSE team accurately describe the problem - ZK circuits proven on server are not actually &amp;ldquo;zero-knowledge&amp;rdquo; , they have a serious risk of leaking sensitive data (private inputs) which are often needed to be hidden as part of maintaining privacy.&lt;br /&gt;
I will highly suggest reading the article. It also covers some hot topics around client side proving.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://substackcdn.com/image/fetch/$s_!gdRY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc25aa184-a5d3-4c46-b5dc-71ba2c012392_1176x688.png&quot;&gt;&lt;img alt=&quot;privacy-is-hygiene&quot; src=&quot;img1.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Building on top of Mopro&lt;/h4&gt;
&lt;p&gt;With the problem defined, we entered the research and architecture phase. The initial groundwork and architectural planning were laid out by my amazing seniors - &lt;a href=&quot;https://x.com/0x_senpai_x&quot;&gt;Utsav &lt;/a&gt; and &lt;a href=&quot;https://x.com/0x_Wyrm&quot;&gt;Sambhav&lt;/a&gt; (Here&amp;rsquo;s the link to &lt;a href=&quot;https://github.com/BlocSoc-iitr/Deimos/commit/5ffde5606c9167bf0aa81b2a57cf2f94dfaa3d02&quot;&gt;first commit&lt;/a&gt;), they are also leading this project.&lt;/p&gt;
&lt;p&gt;We decided to scaffold Deimos on top of &lt;a href=&quot;https://github.com/zkmopro/mopro&quot;&gt;Mopro&lt;/a&gt; . It&amp;rsquo;s a project by PSE and is under active development. According to their github :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Mopro (Mobile Prover) is a toolkit for ZK app development on mobile. Mopro makes client-side proving on mobile simple.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And indeed it gave us a good ground to work on. As we traverse along this series, I will regularly talk and explain about the relevant parts of the Mopro. But If you want to read about it in greater detail right now, I highly recommend exploring their fantastic &lt;a href=&quot;https://zkmopro.org/docs/intro/&quot;&gt;documentation&lt;/a&gt;.  &lt;/p&gt;
&lt;h4&gt;Journey Begins !&lt;/h4&gt;
&lt;p&gt;My first month was pure research and exploration, in which I explored and tried Mopro and spent hours reading it&amp;rsquo;s wonderful &lt;a href=&quot;https://zkmopro.org/docs/intro/&quot;&gt;docs&lt;/a&gt;. I understood how it worked and how was everything connected from integration to proving. Also I was handling the Circom circuits initially, which meant I had to learn how to write them and figure out how to prove and verify them using the CLI. &lt;/p&gt;
&lt;p&gt;Although Mopro supports various framework for app integration ( such as React Native, Kotlin etc) but we found by trial and lots of errors that the Flutter was by far the easiest to integrate and build our app with. With that, next thing was to design a suitable architecture.&lt;/p&gt;
&lt;h4&gt;Deimos in Nutshell : The Architecture&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://substackcdn.com/image/fetch/$s_!7ksa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2517148-7d2d-4f4d-86c5-e164734bd0dd_1003x642.png&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;img2.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The above image provide a high level overview of the app&amp;rsquo;s architecture. In the following lectures we will tackle each part in great depth.&lt;br /&gt;
Basic Flow is like this : User run the benchmarks -&amp;gt; Frontend calls the appropriate Rust code using uniFFI ( We will explore this wonderful thing in next article) -&amp;gt; Values get returned to Frontend -&amp;gt; Various benchmarks are recorded in the process -&amp;gt; Benchmarks are sent to the database and are displayed on the website.&lt;/p&gt;
&lt;p&gt;Although this seems simple, it has a lot of technical depth ( I also experienced this only while actually working on this project ).  &lt;/p&gt;
&lt;p&gt;This concludes our 1st article but this is just the beginning, Stay tuned for Part 2, where we will dive deep into the magic of bridging Rust and Flutter with UniFFI.&lt;/p&gt;
&lt;p&gt;You might want to &lt;a href=&quot;https://x.com/AnIdiotJimJam&quot;&gt;follow&lt;/a&gt; me on X and subscribe to my substack :) so that you don&amp;rsquo;t miss the next articles.  &lt;/p&gt;
&lt;p&gt;Other Relevant Links: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://x.com/Deimos_Labs&quot;&gt;Deimos X account&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://deimos-werw.vercel.app/&quot;&gt;Deimos Website &lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>