<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Rust Stack</title>
    <subtitle>Rust Newsletter for Rustaceans</subtitle>
    <link rel="self" type="application/atom+xml" href="https://rust-stack.com/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://rust-stack.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-06-08T00:00:00+00:00</updated>
    <id>https://rust-stack.com/atom.xml</id>
    <entry xml:lang="en">
        <title>Issue #1: Rust 1.96 Lands, RustWeek Utrecht, and Building the Ultimate TUI 🦀</title>
        <published>2026-06-08T00:00:00+00:00</published>
        <updated>2026-06-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Jose Garcia
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://rust-stack.com/newsletter/20260608-issue-1/"/>
        <id>https://rust-stack.com/newsletter/20260608-issue-1/</id>
        
        <content type="html" xml:base="https://rust-stack.com/newsletter/20260608-issue-1/">&lt;p&gt;Welcome to the very first edition of the newsletter! Whether you&#x27;re here because you love fearless concurrency or because the borrow checker has inflicted Stockholm syndrome upon you, I’m glad to have you.&lt;&#x2F;p&gt;
&lt;p&gt;Every week, we’re going to dive into the Rust ecosystem, highlight some incredible projects, and curate the best news of the week. Let’s get right to it.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-main-event-rust-1-96-and-rustweek-2026&quot;&gt;The Main Event: Rust 1.96 and RustWeek 2026&lt;&#x2F;h2&gt;
&lt;p&gt;It has been a busy week for the community. First up, &lt;a class=&quot;&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.rust-lang.org&#x2F;2026&#x2F;05&#x2F;28&#x2F;Rust-1.96.0&#x2F;&quot;&gt;Rust 1.96.0&lt;&#x2F;a&gt; just hit stable on May 28th. While it’s not a massive, paradigm-shifting release, it brings some much-needed quality-of-life improvements under the hood. The highlights include new &lt;code&gt;core::range&lt;&#x2F;code&gt; re-exports and stricter module linking rules to catch symbol naming bugs much earlier in the compilation process. It also patches two CVEs for users of third-party Cargo registries, so run that &lt;code&gt;rustup update stable&lt;&#x2F;code&gt; if you haven’t already.&lt;&#x2F;p&gt;
&lt;p&gt;But the real buzz this week came from &lt;strong&gt;RustWeek 2026&lt;&#x2F;strong&gt; in Utrecht. Over 900 developers, educators and maintainers gathered to talk shop. The biggest takeaway? The ecosystem is maturing rapidly. Conversations shifted heavily toward embedded Rust, tooling, and professional enterprise adoption. My favorite sentiment from the event: “Rust will become a boring language, ant that’s a good thing”. When a systems language becomes “boring” it means it’s stable, predictable and ready for massive, quiet production workloads.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;brain-the-rust-challenge&quot;&gt;&lt;strong&gt;🧠 The Rust Challenge&lt;&#x2F;strong&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Let’s test your intuition around ownership and iterators. Why does this perfectly innocent-looking code fail to compile, and how would you fix it?&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt; main&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;    let mut&lt;&#x2F;span&gt;&lt;span&gt; numbers&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt; vec!&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BD93F9;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BD93F9;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BD93F9;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BD93F9;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BD93F9;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;];&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; in &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;numbers {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;        if *&lt;&#x2F;span&gt;&lt;span&gt;num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BD93F9;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            numbers&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BD93F9;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;The answer&lt;&#x2F;strong&gt;: This is a classic borrow checker trap! We are trying to mutate &lt;code&gt;numbers&lt;&#x2F;code&gt; (by pushing to it) while simultaneously holding an immutable reference to it via the &lt;code&gt;for loop&lt;&#x2F;code&gt; iterator. Rust prevents this to ensure memory safety —if &lt;code&gt;push&lt;&#x2F;code&gt; causes the vector to reallocate its memory buffer to fit the new element, the iterator would be left pointing to invalid memory (dangling pointer).&lt;&#x2F;p&gt;
&lt;p&gt;To fix this, you could collect the items you want to append into a temporary vector first, and then push them to the original vector after the loop finishes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;project-spotlight-ratatui&quot;&gt;Project Spotlight: Ratatui&lt;&#x2F;h2&gt;
&lt;p&gt;Command-line tools don’t have to be visually boring. If you haven’t checked out &lt;a class=&quot;&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ratatui.rs&quot;&gt;Ratatui&lt;&#x2F;a&gt; yet, you are missing out one of the most satisfying crates in the ecosystem.&lt;&#x2F;p&gt;
&lt;p&gt;Ratatui is a Rust library that lets you build rich, interactive Terminal User Interfaces (TUIs). It handles the heavy lifting of terminal rendering, layout management, and input handling, letting you focus on making your CLI look like a sleek, professional dashboard. Ratatui is super fun to use because of its widget system and clear layout style. It is perfect for making system monitors, data finders, or git tools.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;handpicked-links&quot;&gt;Handpicked Links&lt;&#x2F;h2&gt;
&lt;p&gt;Here are a few fresh reads and resources from the past week:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;[Read]&lt;&#x2F;strong&gt; &lt;a class=&quot;&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.rust-lang.org&#x2F;2026&#x2F;06&#x2F;02&#x2F;launching-the-rust-foundation-maintainers-fund&#x2F;&quot;&gt;Launching the Rust Foundation Maintainers Fund&lt;&#x2F;a&gt;: The official breakdown of the new residency program and how it plans to financially support the backbone of the ecosystem.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;[Read]&lt;&#x2F;strong&gt; &lt;a class=&quot;&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;blog.rust-lang.org&#x2F;releases&#x2F;latest&#x2F;&quot;&gt;Announcing Rust 1.96.0&lt;&#x2F;a&gt;: The full release notes from the Rust Blog. Make sure to check out the WebAssembly linking behavior changes if you compile to WASM.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;[Video]&lt;&#x2F;strong&gt; &lt;a class=&quot;&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;gOkIl3Gd7e4?si=8SAaO-D_tJXu7UuT&quot;&gt;Rhai-console Demo&lt;&#x2F;a&gt;: A really cool demo showing a Rails Console-style workflow for Rust applications using Rhai as the scripting layer.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;sponsor-or-get-featured&quot;&gt;Sponsor or Get Featured&lt;&#x2F;h2&gt;
&lt;p&gt;That’s all for Issue #1! If you built something cool in Rust this week, hit reply and &lt;a href=&quot;mailto:hello@rust-stack.com&quot;&gt;let me know&lt;&#x2F;a&gt; —it might just end up in next week’s spotlight.&lt;&#x2F;p&gt;
&lt;p&gt;Also, if you are a company looking to get your tool or service in front of passionate Rust developers, &lt;a href=&quot;mailto:hello@rust-stack.com&quot;&gt;reach out! &lt;&#x2F;a&gt;We have sponsorship spots available to help keep this newsletter running.&lt;&#x2F;p&gt;
&lt;p&gt;Keep compiling.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>First Rust API - Building a Json Health Check Endpoint</title>
        <published>2026-06-07T00:00:00+00:00</published>
        <updated>2026-06-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Jose Garcia
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://rust-stack.com/tutorials/web-api-development/20260607-rust-actix-web-health-check-endpoint/"/>
        <id>https://rust-stack.com/tutorials/web-api-development/20260607-rust-actix-web-health-check-endpoint/</id>
        
        <content type="html" xml:base="https://rust-stack.com/tutorials/web-api-development/20260607-rust-actix-web-health-check-endpoint/">&lt;p&gt;When starting a new backend project, you don’t want to get bogged down in database schemas or authentication right out of the gate. Before diving into compex business logic, you need to prove your environment is wired up correctly and capable of handling traffic. You need to see a &lt;code&gt;200 Ok&lt;&#x2F;code&gt; response in your browser.&lt;&#x2F;p&gt;
&lt;p&gt;In modern web architecture, a &lt;code&gt;&#x2F;health&lt;&#x2F;code&gt; endpoint is a standard practice. It is a dead-simple route used by load balancers, Docker containers, and uptime monitors to verify that your server is alive and accepting traffic.&lt;&#x2F;p&gt;
&lt;p&gt;Let’s look at how to spin up a server using &lt;strong&gt;Actix-web&lt;&#x2F;strong&gt; (one of the fastest, most battle-tested web frameworks in the Rust ecosystem) and map a simple health check route.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-setup&quot;&gt;The setup&lt;&#x2F;h2&gt;
&lt;p&gt;First, initialize a new Rust project:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;cargo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt; new health_api&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8BE9FD;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt; health_api&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;To build this, we only need two crates: &lt;strong&gt;actix-web&lt;&#x2F;strong&gt; for the server architecture and &lt;strong&gt;serde_json&lt;&#x2F;strong&gt; to format our response. Unlike some other frameworks, &lt;strong&gt;Actix-web&lt;&#x2F;strong&gt; bundles its own async runtime, so you don’t need to install &lt;strong&gt;Tokio&lt;&#x2F;strong&gt; manually. Add them to your project via the terminal:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;cargo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt; add actix-web&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;cargo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt; add serde_json&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;writing-the-server&quot;&gt;Writing the server&lt;&#x2F;h2&gt;
&lt;p&gt;Open your &lt;code&gt;src&#x2F;main.rs&lt;&#x2F;code&gt; file. We are going to wipe out the default “Hello, World!” and replace it with a minimal &lt;em&gt;Actix-web&lt;&#x2F;em&gt; server.&lt;&#x2F;p&gt;
&lt;p&gt;Actix-web uses an app factory pattern. You provide a closure that configures an App instance with your routes, and the &lt;code&gt;HttpServer&lt;&#x2F;code&gt; uses that factory to spin up multiple worker threads to handle incoming traffic.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt; actix_web&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;{web,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; App&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; HttpServer&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; Responder&lt;&#x2F;span&gt;&lt;span&gt;};&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt; serde_json&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;json;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#[actix_web&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;main]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;async fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt; main&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;io&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;Result&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;()&amp;gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;    println!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;&amp;quot;Starting server at http:&#x2F;&#x2F;127.0.0.1:8080...&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6272A4;&quot;&gt;    &#x2F;&#x2F; 1. Initialize the HTTP server and provide the App factory&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;    HttpServer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;||&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        App&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6272A4;&quot;&gt;            &#x2F;&#x2F; 2. Map the &amp;quot;&#x2F;health&amp;quot; path to our handler function&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;            .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;route&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;&amp;quot;&#x2F;health&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, web&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt;(health_check))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    })&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6272A4;&quot;&gt;    &#x2F;&#x2F; 3. Bind the server to localhost on port 8080&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;    .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span&gt;((&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;&amp;quot;127.0.0.1&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BD93F9;&quot;&gt; 8080&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;    .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;run&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;    .await&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6272A4;&quot;&gt;&#x2F;&#x2F; 4. Our handler function&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;async fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt; health_check&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&amp;gt; impl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; Responder&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    web&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;Json&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;json!&lt;&#x2F;span&gt;&lt;span&gt;({&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;        &amp;quot;status&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt; &amp;quot;success&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;        &amp;quot;message&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt; &amp;quot;Server is up and running!&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;how-it-works&quot;&gt;How it works&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;#[actix_web::main]&lt;&#x2F;strong&gt;: Rust doesn’t have an asynchronous runtime built into the standard library. This macro initializes the Actix runtime, allowing us to use &lt;code&gt;async&#x2F;await&lt;&#x2F;code&gt; in our main function.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;The App Factory&lt;&#x2F;strong&gt;: &lt;code&gt;HttpServer::new(|| App::new()…)&lt;&#x2F;code&gt; is where we define the API’s structure. We are telling Actix-web that any HTTP GET request hitting &#x2F;health should be handed off to the &lt;code&gt;health_check&lt;&#x2F;code&gt; function.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;The Handler&lt;&#x2F;strong&gt;: The &lt;code&gt;health_check&lt;&#x2F;code&gt; function returns &lt;code&gt;implement Responder&lt;&#x2F;code&gt;. This is an powerful trait in Actix-web. Because we wrap our &lt;code&gt;serde_json::json!&lt;&#x2F;code&gt; macro inside &lt;code&gt;web::Json&lt;&#x2F;code&gt;, the framework automatically knows how to convert that into an HTTP response and automatically sets the correct Content-Type: &lt;code&gt;application&#x2F;json&lt;&#x2F;code&gt; header for us.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;test-it-out&quot;&gt;Test it out&lt;&#x2F;h2&gt;
&lt;p&gt;Run tha application from your terminal&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;cargo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt; run&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You shoud see &lt;code&gt;Starting server at http:&#x2F;&#x2F;127.0.0.1:8080...&lt;&#x2F;code&gt; printed in your console. Open your web browser (or an API tool like Postman or curl) and navigate to &lt;code&gt;http:&#x2F;&#x2F;127.0.0.1:8080&#x2F;health&lt;&#x2F;code&gt;. You will immediately get your JSON response:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8BE9FE;&quot;&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;&quot;&gt;message&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FE;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E9F284;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;Server is up and running!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E9F284;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8BE9FE;&quot;&gt;    &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;&quot;&gt;status&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FE;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E9F284;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;success&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E9F284;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;That is all it takes. In less that 30 lines of code, you have a highly concurrent, memory-safe web server handling live HTTP requests.&lt;&#x2F;p&gt;
&lt;p&gt;This &lt;code&gt;&#x2F;health&lt;&#x2F;code&gt; endpoint serves as the perfect foundation. From here, you can start extracting query parameters, defining complex structs to serialize your JSON, or passing database connection pools into your application state.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Find more tutorials on the Rust ecosystem and modern software architecture at &lt;a href=&quot;&#x2F;&quot;&gt;Rust-Stack&lt;&#x2F;a&gt;.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Rust error handling with Question mark operator</title>
        <published>2026-06-05T00:00:00+00:00</published>
        <updated>2026-06-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Jose Garcia
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://rust-stack.com/tutorials/core-concepts/20260605-rust-question-mark-operator-error-handling/"/>
        <id>https://rust-stack.com/tutorials/core-concepts/20260605-rust-question-mark-operator-error-handling/</id>
        
        <content type="html" xml:base="https://rust-stack.com/tutorials/core-concepts/20260605-rust-question-mark-operator-error-handling/">&lt;p&gt;When you first pick up Rust, the compiler forces you to confront every possible point of failure. It is one of the language’s best features, guaranteeing that unexpected crashes don’t make it to production. But if you are coming from languages with exceptions, your initial reaction is usually to handle &lt;code&gt;Result&lt;&#x2F;code&gt; types using massive, nested &lt;code&gt;match&lt;&#x2F;code&gt; statements.&lt;&#x2F;p&gt;
&lt;p&gt;Your code starts drifting to the right, and suddenly a simple function that reads a configuration file takes up twenty lines of visual noise.&lt;&#x2F;p&gt;
&lt;p&gt;There is a built-in tool to fix this immediately. Let’s look at how the question mark operator &lt;code&gt;?&lt;&#x2F;code&gt; flattens your logic and gets the boilerplate out of your way.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-drift-problem&quot;&gt;The drift problem&lt;&#x2F;h2&gt;
&lt;p&gt;Imagine you need to open a local file and reads its content into a string. Both opening the file and reading from it can fail, returning a &lt;code&gt;Result&lt;&#x2F;code&gt;. A standard beginner approach traps you in a nested match block that looks like this:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;fs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;File&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;io&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BD93F9;font-style: italic;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; Read&lt;&#x2F;span&gt;&lt;span&gt;};&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt; read_config&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; -&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; Result&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt;, io&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;Error&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span&gt; file_result&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; File&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;open&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;&amp;quot;config.json&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;    match&lt;&#x2F;span&gt;&lt;span&gt; file_result {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;        Ok&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;mut&lt;&#x2F;span&gt;&lt;span&gt; file)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;            let mut&lt;&#x2F;span&gt;&lt;span&gt; contents&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; String&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;            match&lt;&#x2F;span&gt;&lt;span&gt; file&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;read_to_string&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;&amp;amp;mut&lt;&#x2F;span&gt;&lt;span&gt; contents) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;                Ok&lt;&#x2F;span&gt;&lt;span&gt;(_)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; Ok&lt;&#x2F;span&gt;&lt;span&gt;(contents),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;                Err&lt;&#x2F;span&gt;&lt;span&gt;(e)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; Err&lt;&#x2F;span&gt;&lt;span&gt;(e),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;        Err&lt;&#x2F;span&gt;&lt;span&gt;(e)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; Err&lt;&#x2F;span&gt;&lt;span&gt;(e),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This works, but it is hard to read. The actual logic is buried under the error-handling infrastructure.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-question-mark-solution&quot;&gt;The Question mark solution&lt;&#x2F;h2&gt;
&lt;p&gt;The &lt;code&gt;?&lt;&#x2F;code&gt; operator acts as an automatic early return. You place it at the end of an expression that returns a &lt;code&gt;Result&lt;&#x2F;code&gt;. If the operation succeeds, the operator unwraps the &lt;code&gt;Ok&lt;&#x2F;code&gt; value and assings it to your variable, letting the code continue. If the opeartion fails, it immediately aborts the current function and returns the &lt;code&gt;Err&lt;&#x2F;code&gt; upward to whatever called it.&lt;&#x2F;p&gt;
&lt;p&gt;Here is that exact same function rewritten using the question mark operator:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;fs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;File&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;io&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BD93F9;font-style: italic;&quot;&gt;self&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; Read&lt;&#x2F;span&gt;&lt;span&gt;};&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt; read_config&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; -&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; Result&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;String&lt;&#x2F;span&gt;&lt;span&gt;, io&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;Error&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;    let mut&lt;&#x2F;span&gt;&lt;span&gt; file&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; File&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;open&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;&amp;quot;config.json&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;    let mut&lt;&#x2F;span&gt;&lt;span&gt; contents&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; String&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    file&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;read_to_string&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;&amp;amp;mut&lt;&#x2F;span&gt;&lt;span&gt; contents)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;    Ok&lt;&#x2F;span&gt;&lt;span&gt;(contents)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The logic is now linear. You define what you want to happen, append &lt;code&gt;?&lt;&#x2F;code&gt; to handle the failure paths automatically, and return the final success state at the bottom.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-you-need-to-know&quot;&gt;What you need to know&lt;&#x2F;h2&gt;
&lt;p&gt;The only rule for using &lt;code&gt;?&lt;&#x2F;code&gt; is that the function you are inside must return a compatible type, usually a &lt;code&gt;Result&lt;&#x2F;code&gt; or an &lt;code&gt;Option&lt;&#x2F;code&gt;. You can not use it inside a function that returns nothing at all, because if the &lt;code&gt;?&lt;&#x2F;code&gt; encounters an error, it needs a valid return type to pass that error into.&lt;&#x2F;p&gt;
&lt;p&gt;You can even chain methods together. For example, imagine you want to read a string from a file and immediately parse it into a number. Instead of creating intermediate variables and handling the error for each step, you can chain the operations:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;fs;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt; std&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;error&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;Error&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt; read_port_config&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; -&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; Result&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;u16&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; Box&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;dyn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; Error&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&amp;gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6272A4;&quot;&gt;    &#x2F;&#x2F; Read the file (might fail), trim it, then parse to u16 (might fail)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span&gt; port&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; fs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;read_to_string&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;&amp;quot;port.txt&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;?.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;trim&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;parse&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;u16&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;?&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;    Ok&lt;&#x2F;span&gt;&lt;span&gt;(port)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If &lt;code&gt;read_to_string&lt;&#x2F;code&gt; fails, the functions exits early and returns that specific file error. If it succeeds, it trims the whitespace and calls &lt;code&gt;parse&lt;&#x2F;code&gt;, which also uses &lt;code&gt;?&lt;&#x2F;code&gt; in case the text inside the file isn’t a valid number.&lt;&#x2F;p&gt;
&lt;p&gt;By learning on the question mark operator, you keep your error handling robust without letting it dominate your application’s architecture. It keeps your functions concise, readable and focused entirely on the data manipulation at hand.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Find more updates on the Rust ecosystem and modern software architecture at &lt;a href=&quot;&#x2F;&quot;&gt;Rust-Stack&lt;&#x2F;a&gt;&lt;a href=&quot;about:blank&quot;&gt;..&lt;&#x2F;a&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Native `cargo-nextest` IDE Integration</title>
        <published>2026-06-03T00:00:00+00:00</published>
        <updated>2026-06-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Jose Garcia
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://rust-stack.com/articles/posts/20260602-native-cargo-nextest-ide-integration/"/>
        <id>https://rust-stack.com/articles/posts/20260602-native-cargo-nextest-ide-integration/</id>
        
        <content type="html" xml:base="https://rust-stack.com/articles/posts/20260602-native-cargo-nextest-ide-integration/">&lt;p&gt;If you have spent enough time working in large Rust workspaces, you know the feeling. You write a feature, kick off your test suite, and the you wait.&lt;&#x2F;p&gt;
&lt;p&gt;The default &lt;code&gt;cargo test&lt;&#x2F;code&gt; runner is fantastic when you’re just starting a project. But as your code scales, its shared thread pool model starts to show cracks. A single heavy integration test blocks the queue. Tests that accidentally share global state or hit the same database cause mysterious, intermittent failures.&lt;&#x2F;p&gt;
&lt;p&gt;That is exactly why &lt;code&gt;cargo-nextest&lt;&#x2F;code&gt; has quietly become the standard runner for heavy-duty Rust development. And with the recent IDE updates natively supporting it, the last bit of friction for adopting it has disappeared.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;process-per-test-vs-thread-pools&quot;&gt;Process-per-Test vs. Thread Pools&lt;&#x2F;h2&gt;
&lt;p&gt;The reason &lt;code&gt;cargo test&lt;&#x2F;code&gt; slows down on large projects is architectural. It runs tests in a single process across multiple threads. If one test crashes hard enough, it can take down the whole runner.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;cargo-nextest&lt;&#x2F;code&gt; drops the thread pool entirely in favor of a process-per-test model. Every single test gets isolated in its own lightweight process.&lt;&#x2F;p&gt;
&lt;p&gt;This fixes a few major headaches immediately:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Raw Speed&lt;&#x2F;strong&gt;: Because processes are isolated, &lt;code&gt;nextest&lt;&#x2F;code&gt; can parallelize execution across your CPU cores without worrying about lock contention. On large workspaces, test times frequently drop by 50%  or more (see &lt;a class=&quot;&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;nexte.st&#x2F;docs&#x2F;benchmarks&#x2F;&quot;&gt;benchmarks&lt;&#x2F;a&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;No more flaky tests&lt;&#x2F;strong&gt;: Tests no longer share memory space. They can’t leak state and poison each other.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Better output&lt;&#x2F;strong&gt;: If a test hangs or segfaults, &lt;code&gt;nextest&lt;&#x2F;code&gt; isolates the failure, kills the hanging process, and reports exactly what went wrong without the rest of the test suit collapsing into a wall of red text.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;escaping-the-terminal&quot;&gt;Escaping the Terminal&lt;&#x2F;h2&gt;
&lt;p&gt;For a long time, the only real downside to &lt;code&gt;cargo-nextest&lt;&#x2F;code&gt; was developer ergonomics. Because it was a standalone CLI tool, you had to drop into your terminal to use it.&lt;&#x2F;p&gt;
&lt;p&gt;That meant losing the convenience of clicking the icon in your editor to run a specific test. You lost the visual pass&#x2F;fail tree.&lt;&#x2F;p&gt;
&lt;p&gt;Tooling has finally caught up. With the release of RustRover 2026.1, native &lt;code&gt;cargo-nextest&lt;&#x2F;code&gt; support works out of the box. Instead of routing through the default runner, the IDE seamlessly hooks into the &lt;code&gt;nextest&lt;&#x2F;code&gt; CLI. You just click the standard test icon, and the IDE handles the execution, parsing the fast results right back into the visual test tool window you are used to.&lt;&#x2F;p&gt;
&lt;p&gt;With Visual Studio Code and other editors moving in the same direction, &lt;code&gt;nextest&lt;&#x2F;code&gt; isn’t just a CI utility anymore. It is how you should be writing and testing your Rust code locally.&lt;&#x2F;p&gt;
&lt;p&gt;If your workspace consists of more than couple of crates, sticking with &lt;code&gt;cargo test&lt;&#x2F;code&gt; is just bruning CPU time.&lt;&#x2F;p&gt;
&lt;p&gt;Run &lt;code&gt;cargo install cargo-nextest -- locked&lt;&#x2F;code&gt;. Toggle the setting in your IDE. You’ll get your time back immediately.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Find more updates on the Rust ecosystem and modern software architecture at &lt;a href=&quot;&#x2F;&quot;&gt;Rust-Stack&lt;&#x2F;a&gt;&lt;a href=&quot;about:blank&quot;&gt;.&lt;&#x2F;a&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Rust is officially Core Infrastructure in the Linux kernel</title>
        <published>2026-05-31T00:00:00+00:00</published>
        <updated>2026-05-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Jose Garcia
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://rust-stack.com/articles/posts/20260531-rust-linux-kernel-core-infrastructure/"/>
        <id>https://rust-stack.com/articles/posts/20260531-rust-linux-kernel-core-infrastructure/</id>
        
        <content type="html" xml:base="https://rust-stack.com/articles/posts/20260531-rust-linux-kernel-core-infrastructure/">&lt;p&gt;For a long time, the introduction of Rust into the Linux kernel was treated as a highly publicized experiment. It was a pragmatic proof of concept to see if a modern, memory-safe language could actually survive inside the most demanding, battle-tested C codebase on the planet.&lt;&#x2F;p&gt;
&lt;p&gt;As of the recent consensus among kernel maintainers, that trial period is over. Rust is no longer an experiment. It is officially cemented as a core part of the Linux kernel infrastructure.&lt;&#x2F;p&gt;
&lt;p&gt;For developers and engineering managers tracking industry adoption, this is a massive milestone. Here is a look at how we got here and what it means for the broader engineering landscape.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;moving-past-the-experimental-phase&quot;&gt;Moving past the Experimental phase.&lt;&#x2F;h2&gt;
&lt;p&gt;When Rust was first merged into the Linux kernel, the approach was cautious. The kernel has over 30 years of history, and introducing a second language into this monolithic C project brings significant friction —from toolchain complications to the steep learning curve for veteran C-developers.&lt;&#x2F;p&gt;
&lt;p&gt;However, the experiment proved its own worth. The initial focus on writing device drivers and specific subsystems in Rust highlighted exactly what the language promised: the elimination of entire classes of memory safety bugs without sacrificing low-level control or performance.&lt;&#x2F;p&gt;
&lt;p&gt;The recent concensus among mantainers acknowledges that the abstractions built over the last few years are stable, the tooling is mature enough, and the benefits to system stability far outweigh the integration overhead. Rust is now expected to be a permanent, growing fixture in kernel development.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;engineering-risk-mitigation&quot;&gt;&lt;strong&gt;Engineering Risk Mitigation&lt;&#x2F;strong&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;From a high-level engineering perspective, this decision is fundamentally about risk mitigation. Historically, memory safety vulnerabilities (like buffer overflows and use-after-free bugs) account for roughly &lt;strong&gt;70%&lt;&#x2F;strong&gt; of high-severity security flaws in major systems. By allowing new components —particularly hardware drivers, which are notoriously bug-prone— to be written in Rust, the kernel inherenttly reduces its attack surface.&lt;&#x2F;p&gt;
&lt;p&gt;The compiler catches data races and memory leaks before the code ever compiles. For a project that runs everything from enterprise cloud servers to embedded industrial hardware, shifting that cognitive load from the developer to the compiler is a massive operational win.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;impact-on-system-development&quot;&gt;Impact on System Development&lt;&#x2F;h2&gt;
&lt;p&gt;The significance of this milestone extends far beyond the Linux kernel itself.&lt;&#x2F;p&gt;
&lt;p&gt;Linux is arguably the most conservative software project in the world when it comes to adopting new paradigms. If the Linux kernel community has officially vetted and adopted Rust for critical, low-level infrastructure, the debate over Rust’s viability for enterprise use is effectively over.&lt;&#x2F;p&gt;
&lt;p&gt;For technical teams, this serves as the ultimate validation. The language’s position in the industry is growing and entirely secure. Rust is no longer just a trending language for early adopters. It is a foundational infrastructure.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Find more updates on the Rust ecosystem and modern software architecture at &lt;a href=&quot;&#x2F;&quot;&gt;Rust-Stack&lt;&#x2F;a&gt;&lt;a href=&quot;about:blank&quot;&gt;.&lt;&#x2F;a&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Native cfg_select! and Match Guards in Rust 1.95</title>
        <published>2026-05-28T00:00:00+00:00</published>
        <updated>2026-05-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Jose Garcia
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://rust-stack.com/articles/posts/20260528-native-cfg-select-and-match-guards-in-rust-1-95/"/>
        <id>https://rust-stack.com/articles/posts/20260528-native-cfg-select-and-match-guards-in-rust-1-95/</id>
        
        <content type="html" xml:base="https://rust-stack.com/articles/posts/20260528-native-cfg-select-and-match-guards-in-rust-1-95/">&lt;p&gt;If you maintain cross-platform Rust applications, you already know the pain of configuration attributes. Dealing with OS-specific file paths or hardware integrations usually turns codebases into a scatterd mess of &lt;code&gt;#[cfg(...)]&lt;&#x2F;code&gt; blocks.&lt;&#x2F;p&gt;
&lt;p&gt;Rust 1.95 (released in April 2026) shipped two major improvements that directly address a better developer-experience when working on cross-platform apps: the stabilization of the &lt;code&gt;cfg_select!&lt;&#x2F;code&gt; macro and &lt;code&gt;if let&lt;&#x2F;code&gt; guards in match expressions.&lt;&#x2F;p&gt;
&lt;p&gt;Here is a practical look at how these two additions can immediately eliminate boilerplate and flatten your logic.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-end-of-cfg-if-and-the-new-cfg-select&quot;&gt;The End of &lt;code&gt;cfg-if&lt;&#x2F;code&gt; and the new &lt;code&gt;cfg_select!&lt;&#x2F;code&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;For years, handling OS-specific logic meant either pulling in the popular &lt;code&gt;cfg-if&lt;&#x2F;code&gt; crate or repeating massive blocks of configuration attributes &lt;code&gt;#[cfg(...)]&lt;&#x2F;code&gt;. Rust 1.95 brings this capability natively into the standard library via &lt;code&gt;cfg_select!&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This macro acts like a compile-time match statement for configuration predicates. It evaluates a list of conditions, picks the first one that evaluates to true, and compiles only that specific block.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-old-approach&quot;&gt;The old approach&lt;&#x2F;h3&gt;
&lt;p&gt;Before 1.95, branching logic for something like a local configuration directory required multiple function signatures:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#[cfg(target_os &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt; &amp;quot;windows&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt; get_config_dir&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; -&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; String&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;    &amp;quot;C:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;AppData&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;Local&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;MyApp&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;to_string&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#[cfg(target_os &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt; &amp;quot;macos&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt; get_config_dir&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; -&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; String&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;    &amp;quot;~&#x2F;Library&#x2F;Application Support&#x2F;MyApp&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;to_string&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#[cfg(not(any(target_os &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt; &amp;quot;windows&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, target_os &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt; &amp;quot;macos&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)))]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt; get_config_dir&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; -&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; String&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;    &amp;quot;~&#x2F;.config&#x2F;myapp&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;to_string&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;the-new-approach&quot;&gt;The new approach&lt;&#x2F;h3&gt;
&lt;p&gt;With &lt;code&gt;cfg_select!&lt;&#x2F;code&gt;, you can consolidate the logic into a single function. Because it evaluates as an expression, you can return values directly from it:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt; get_config_dir&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; -&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; String&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;    cfg_select!&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        target_os&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt; &amp;quot;windows&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt; &amp;quot;C:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;AppData&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;Local&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;MyApp&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;to_string&lt;&#x2F;span&gt;&lt;span&gt;(),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        target_os&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt; &amp;quot;macos&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt; &amp;quot;~&#x2F;Library&#x2F;Application Support&#x2F;MyApp&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;to_string&lt;&#x2F;span&gt;&lt;span&gt;(),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        _&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt; &amp;quot;~&#x2F;.cofig&#x2F;myapp&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;to_string&lt;&#x2F;span&gt;&lt;span&gt;(),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This single macro eliminates the visual clutter of multiple function signatures and ensures you always have a fallback &lt;code&gt;_&lt;&#x2F;code&gt; arm, preventing those frustrating “function not found” compiler errors if someone tries to build your project for an unexpected target architecture.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;flattening-logic-with-if-let-match-guards&quot;&gt;Flattening logic with &lt;code&gt;if let&lt;&#x2F;code&gt; match guards&lt;&#x2F;h2&gt;
&lt;p&gt;The second major cleanup in version 1.95 applies to &lt;code&gt;match&lt;&#x2F;code&gt; expressions.&lt;&#x2F;p&gt;
&lt;p&gt;If you have ever needed to match on an enum, extract its payload, and the run a fallable operation on that payload, you were forced into writing nested &lt;code&gt;if let&lt;&#x2F;code&gt; statements. It worked, but it caused unnecessary rightward drift in your code. Now, you can bind variables directly inside the match guard.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-nested-way-before-1-95&quot;&gt;The nested way before 1.95&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;match&lt;&#x2F;span&gt;&lt;span&gt; message {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;    Message&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;ProcessData&lt;&#x2F;span&gt;&lt;span&gt;(payload)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;        if let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt; Ok&lt;&#x2F;span&gt;&lt;span&gt;(parsed)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt; parse_heavy_computation&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;payload) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;            println!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;&amp;quot;Processed: {}&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, parsed);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6272A4;&quot;&gt;            &#x2F;&#x2F; Handle error or do nothing&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    _&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;the-new-way-after-1-95&quot;&gt;The new way after 1.95&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;rust&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;match&lt;&#x2F;span&gt;&lt;span&gt; message {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8BE9FD;font-style: italic;&quot;&gt;    Message&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;ProcessData&lt;&#x2F;span&gt;&lt;span&gt;(payload)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; if let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BD93F9;&quot;&gt; OK&lt;&#x2F;span&gt;&lt;span&gt;(parsed)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt; parse_heavy_computation&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;payload)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6272A4;&quot;&gt;        &#x2F;&#x2F; Both `payload` and `parsed` are available right here&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;        println!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;&amp;quot;Processed: {}&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, parsed);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    _&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6272A4;&quot;&gt; &#x2F;&#x2F; Handles everything else, including the Err case from parse_heavy_computation&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This keeps your match arms completely flat. Note that the compiler treats the &lt;code&gt;if let&lt;&#x2F;code&gt; guard exactly like a standard &lt;code&gt;if&lt;&#x2F;code&gt; guard —meaning it is ignored for exhaustiveness checking. You still need your catch-all &lt;code&gt;_&lt;&#x2F;code&gt; arm, but the resulting function is significantly more linear and readable.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;&#x2F;h2&gt;
&lt;p&gt;Rust 1.95 is less about massive shifts and more about everyday maintainability. By refactoring your old configuration blocks &lt;code&gt;#[cfg(...)]&lt;&#x2F;code&gt; to use &lt;code&gt;cfg_select!&lt;&#x2F;code&gt; and flattening your error handling with &lt;code&gt;if let&lt;&#x2F;code&gt; guards, you can strip out unnecessary boilerplate and keep your cross-platform code clean.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Find more updates on the Rust ecosystem and modern software architecture at &lt;a href=&quot;about:blank&quot;&gt;&lt;del&gt;rust-stack.com&lt;&#x2F;del&gt;.&lt;&#x2F;a&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Architecting the Modern Desktop: A Lean Stack for Engineering Teams</title>
        <published>2026-05-25T00:00:00+00:00</published>
        <updated>2026-05-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Jose Garcia
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://rust-stack.com/articles/featured/20260525-modern-desktop-stack-rust-tauri-vue/"/>
        <id>https://rust-stack.com/articles/featured/20260525-modern-desktop-stack-rust-tauri-vue/</id>
        
        <content type="html" xml:base="https://rust-stack.com/articles/featured/20260525-modern-desktop-stack-rust-tauri-vue/">&lt;p&gt;It’s a weird time for desktop software. With web-native solutions dominating the current landscape, it’s easy to question the relevance of desktop applications in 2026. Our machines are absurdly fast right now, yet somehow, clicking between channels in a chat app or opening a note-taking tool still manages to stutter.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-modern-apps-feel-so-heavy&quot;&gt;Why modern apps feel so heavy&lt;&#x2F;h2&gt;
&lt;p&gt;We all know who to blame: Electron. Don’t get me wrong, it was a completely understandable compromise. Building native apps for Mac, Windows and Linux separately is a nightmare, especially for solo developers. That is why everyone defaulted to the exact same cross-platform desktop framework shortcut: &lt;strong&gt;Electron&lt;&#x2F;strong&gt;. You could just write your UI in HTML, CSS and JavaScript, and deploy it everywhere.&lt;&#x2F;p&gt;
&lt;p&gt;But that shortcut passed a massive, hidden cost directly to the user. Every time someone downloads a simple, lightweight utility built on Electron, they are silently downloading an entire bundled Chromium browser. If you have a team chat, a music player, and a password manager open right now, your are effectively running three separate web browsers in the background. It absolutely devours RAM.&lt;&#x2F;p&gt;
&lt;p&gt;Developers are finally getting tired of this bloat, and you can see the pushback happening in real-time. Look at &lt;a class=&quot;&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zed.dev&quot;&gt;Zed Industries&lt;&#x2F;a&gt;. When they set out to build a modern code editor, they didn’t just avoid Electron —they went so far as to build their own entire &lt;a class=&quot;&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;zed.dev&#x2F;blog&#x2F;videogame&quot;&gt;GPU-accelerated UI framework&lt;&#x2F;a&gt; from scratch in Rust just to make sure the app was incredibly fast. They proved that users are desperate for tools that actually feel native and respect their hardware.&lt;&#x2F;p&gt;
&lt;p&gt;But let’s be real, if you are a solo developer or a small team, you probably don’t have the time or resources to write a custom rendering engine from the ground up like Zed did. You still want the speed and ease of building UIs with web technologies, but dont want to ship a 150 MB Chromium tax to your users.&lt;&#x2F;p&gt;
&lt;p&gt;You don’t have to make that compromise anymore. By pairing &lt;a class=&quot;&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rust-lang.org&quot;&gt;&lt;strong&gt;Rust&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; for the heavy lifting with &lt;a class=&quot;&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;v2.tauri.app&quot;&gt;&lt;strong&gt;Tauri&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; as the lightweight bridge and &lt;a class=&quot;&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;vuejs.org&quot;&gt;Vue&lt;&#x2F;a&gt; or &lt;a class=&quot;&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;react.dev&quot;&gt;React&lt;&#x2F;a&gt; for the interface, we finally have a stack that gives us the best of both worlds.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;writing-the-backend-in-rust&quot;&gt;Writing the backend in Rust&lt;&#x2F;h2&gt;
&lt;p&gt;So why Rust as the core engine? If you’ve spent any time on developer forums lately, you’ve probably heard enough Rust hype to last a lifetime. But when it comes to local desktop applications, that hype translates into practical benefits.&lt;&#x2F;p&gt;
&lt;p&gt;When you build a desktop tool, the backend engine —the part reading from the file system, handling databases, or processing data— needs to be invisible to the user. It has to be fast, but more importantly, it needs to be predictable and secure.&lt;&#x2F;p&gt;
&lt;p&gt;Here is where Rust shines. Languages like JavaScript, Python or C# rely on a garbage collector, which occasionally has to pause your program to clean up unused memory. On the desktop, those pauses manifest as micro-stutters —that annoying moment when you click a dropdown and the UI hangs for a split second. Rust doesn’t have a garbage collector. It knows exactly when memory is no longer needed and drops it instantly. The result is an application that just glides, maintaining an incredibly low memory footprint, even when left running for weeks.&lt;&#x2F;p&gt;
&lt;p&gt;Historically, if you wanted that kind of bare-metal performance, your only real option was C++. But C++ is notoriously unforgiving, one tiny mistake with memory management, and your app throws a segmentation fault and crashes completely. Rust gives you the speed of C++, but its wildly strict compiler acts like a safety net. It practically eliminates those random memory crashes before the code will even compile.&lt;&#x2F;p&gt;
&lt;p&gt;It also lowers the anxiety of doing heavy lifting in the background. If your application needs to parse a massive file or run a complex background sync, you want to move that work off the main thread so the user interface doesn’t freeze. Rust’s concurrency makes this surprisingly approachable. The compiler ensures that multiple threads can’t accidentally overwrite the same data at the same time. You can spin up background workers to handle the heavy logic with the confidence that you aren’t introducing random, impossible-to-reproduce bugs.&lt;&#x2F;p&gt;
&lt;p&gt;For a solo developer, that is a superpower. You get to build a highly complex, multithreaded local engine without needing an entire QA department to catch race conditions. You write the logic in Rust, compile it to a tiny binary, and then you don’t have to us Rust to build the actual buttons and menus.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;connecting-the-ui-with-tauri&quot;&gt;Connecting the UI with Tauri&lt;&#x2F;h2&gt;
&lt;p&gt;For the user interface we could try writing the UI purely in Rust using native libraries, but honestly, styling complex layouts without CSS is miserable. We still want the massive ecosystem and flexibility of modern web tech.&lt;&#x2F;p&gt;
&lt;p&gt;This is exactly where Tauri steps in. As a true Electron alternative, it acts as the bridge between your Rust backend and literally any JavaScript framework you want to use. But unlike Electron, Tauri doesn’t force you to bundle an entire browser engine into your app. Instead, it takes a much more pragmatic approach by simply hooking into the native webview already sitting on the user’s machine, like WebView2 on Windows or WebKit on macOS.&lt;&#x2F;p&gt;
&lt;p&gt;The immediate payoff is your file size. Instead of shipping a 150 MB monster, the entire app compiles down to a standalone binary that’s maybe 5 or 10MB. It downloads in seconds, launches instantly, and doesn’t consume system RAM just to draw a window on the screen.&lt;&#x2F;p&gt;
&lt;p&gt;But the coolest part is how smoothly Tauri wires these two worlds together using its &lt;strong&gt;Inter-Process-Communication (IPC)&lt;&#x2F;strong&gt;. If you need to parse a massive file, run a heavy background calculation, or hit a local database, you just write a standard Rust function. Drop a single Tauri macro on top of it, and suddenly, you can await that Rust code directly inside your JavaScript or TypeScript frontend just like a normal web API.&lt;&#x2F;p&gt;
&lt;p&gt;The frontend remains a lightweight presentation layer, focused entirely on looking sharp and handling user clicks. The moment it needs to do real work, it fires a message off to Rust. Rust crunches the data on a separate background thread and passes the result back to the UI. The Interface never freezes up, no matter how hard the backend is working.&lt;&#x2F;p&gt;
&lt;p&gt;As a bonus, Tauri solves a massive security headache. By default, the web interface in Tauri is completely locked down. JavaScript can’t just randomly access the user’s file system or run arbitrary commands. You have to explicitly allow exactly which Rust functions and system resources the frontend is allowed to touch.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;building-the-interface-without-the-tax&quot;&gt;Building the interface without the tax&lt;&#x2F;h2&gt;
&lt;p&gt;This provides a secure, memory-safe backend that integrates easily with your favorite web framework. A big advantage of using a JS framework is the time saving. If you try to build a high-utility desktop app using a pure native UI toolkit, you will spend weeks just trying to handle basic layouts, animations or styling. Using a JS frontend framework, we instantly inherit the entire web ecosystem and get access to to mature, robust tools like Tailwind CSS for well-tested UI componets that have been optimized for years. If you need complex data grids, interactive graphs, or responsive forms, you don’t have to code them from scratch. You just need to install a package and focus on the business logic.&lt;&#x2F;p&gt;
&lt;p&gt;The real benefit of frameworks like Vue 3 or React is their declarative reactivity. In a complex desktop app, managing state manually is a nightmare. If a background process in Rust finishes a heavy calculation and sends a piece of data across the Tauri bridge, you don’t want to write tedious, imperative code to find a specific element in the UI and force it to update. With reactive framework, you just update the state variable. The framework detects the change and updates the exact parts of the interface that need it, seamlessly and instantly.&lt;&#x2F;p&gt;
&lt;p&gt;Vue 3, in particular, feels like a perfect match for this stack because ot its &lt;strong&gt;Composition API&lt;&#x2F;strong&gt;. It allows you to group the UI logic cleanly into reusable composables. For example, you write a simple, custom JavaScript function that wraps a Tauri IPC call to the Rust backend, hooks into a reactive state variable, and handles any loading or error states automatically.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-trade-offs-you-should-know-about&quot;&gt;The trade-offs you should know about&lt;&#x2F;h2&gt;
&lt;p&gt;Before you throw out your current architecture, let’s talk about the trade-offs. As much as a I love this stack, it is not a silver bullet, and you need to know what you are signing up for.&lt;&#x2F;p&gt;
&lt;p&gt;The most immediate hurdle is Rust itself. If you are coming from a language like JavaScript or Python, the borrow checker requires a complete rewiring of how you think about memory. It is famously strict, and you are going to spend your first few weeks fighting the compiler just to get simple things to run. Your development velocity will take a hit before it eventually speeds back up.&lt;&#x2F;p&gt;
&lt;p&gt;Once you get the hang of the language, you still have to respect the bridge. Tauri passes data between your Rust backend and your UI using Inter-Process-Communication, which means the data gets serialized —usually to JSON. That serialization isn’t free. If you try to dump a massive, raw dataset straight to the frontend, that overhead will cause the exact UI stutter we are trying to avoid You have to architect your app to do the heavy data-crunching in Rust and only pass the UI exactly what it needs to render.&lt;&#x2F;p&gt;
&lt;p&gt;You also have to say goodbye to universal rendering. Because we are ditching the bundled Chromium browser to use the operating system’s native webview, you don’t control the rendering engine anymore. You might build an interface that looks incredibly sharp on a Mac and find a weird CSS quirk on Linux or Windows. You actually have to spend time testing across different operating systems.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, keep in mind that the ecosystem is younger. Electron has been around forever, so there is an npm package for almost everything. Tauri’s plugin ecosystem is growing fast, but if you need to tap into a highly specific, obscure OS-level API, there is a chance a plugin doesn’t exist yet. You have to be comfortable rolling up your sleeves and writing the native Rust bindings yourself.&lt;&#x2F;p&gt;
&lt;p&gt;It is definitely a steeper climb. But honestly, for the performance, security, and incredibly tiny app sizes you get in return, it is a trade-off I am willing to make every single time.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Find more updates on the Rust ecosystem and modern software architecture at &lt;a href=&quot;&#x2F;&quot;&gt;Rust-Stack&lt;&#x2F;a&gt;&lt;a href=&quot;about:blank&quot;&gt;.&lt;&#x2F;a&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Style Guide</title>
        <published>2023-01-15T09:00:00-07:00</published>
        <updated>2023-01-15T09:00:00-07:00</updated>
        
        <author>
          <name>
            
              Jose Garcia
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://rust-stack.com/style-guide/"/>
        <id>https://rust-stack.com/style-guide/</id>
        
        <content type="html" xml:base="https://rust-stack.com/style-guide/">&lt;p&gt;Welcome to our Style Guide! This document is designed to ensure consistency, readability, and maintainability across all your projects. Whether you are a developer, designer, or content creator, adhering to these guidelines will help us create a cohesive and high-quality product.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;headings&quot;&gt;Headings&lt;&#x2F;h1&gt;
&lt;p&gt;Header tags are what keep your content away from absolute chaos in terms of visual organization. They help your readers understand your writing, they help search engines determine your content.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;heading-1&quot;&gt;Heading 1&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;heading-2&quot;&gt;Heading 2&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;heading-3&quot;&gt;Heading 3&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;heading-4&quot;&gt;Heading 4&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;heading-5&quot;&gt;Heading 5&lt;&#x2F;h5&gt;
&lt;h5 id=&quot;heading-6&quot;&gt;Heading 6&lt;&#x2F;h5&gt;
&lt;h1 id=&quot;horizontal-rule&quot;&gt;Horizontal Rule&lt;&#x2F;h1&gt;
&lt;hr &#x2F;&gt;
&lt;h1 id=&quot;text-level-semantics&quot;&gt;Text-Level Semantics&lt;&#x2F;h1&gt;
&lt;p&gt;In Markdown, text-level semantics refer to the HTML elements and syntax used to convey meaning and structure within a block of text. These elements help to enhance the readability and accessibility of the content by providing context and emphasis.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;italic&quot;&gt;Italic&lt;&#x2F;h3&gt;
&lt;p&gt;Surround text with single asterisks (&lt;code&gt;*&lt;&#x2F;code&gt;) or underscores (&lt;code&gt;_&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F1FA8C;font-style: italic;&quot;&gt;*Italic text*&lt;&#x2F;span&gt;&lt;span&gt; or &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;font-style: italic;&quot;&gt;_Italic text_&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;em&gt;Italic text&lt;&#x2F;em&gt; or &lt;em&gt;Italic text&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bold&quot;&gt;Bold&lt;&#x2F;h3&gt;
&lt;p&gt;Surround text with double asterisks (&lt;code&gt;**&lt;&#x2F;code&gt;) or underscores (&lt;code&gt;__&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB86C;font-weight: bold;&quot;&gt;**Bold text**&lt;&#x2F;span&gt;&lt;span&gt; or &lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB86C;font-weight: bold;&quot;&gt;__Bold text__&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Bold text&lt;&#x2F;strong&gt; or &lt;strong&gt;Bold text&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bold-and-italic&quot;&gt;Bold and Italic&lt;&#x2F;h3&gt;
&lt;p&gt;Surround text with triple asterisks (&lt;code&gt;***&lt;&#x2F;code&gt;) or underscores (&lt;code&gt;___&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB86C;font-weight: bold;&quot;&gt;**&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;font-style: italic;&quot;&gt;*Bold and Italic text*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB86C;font-weight: bold;&quot;&gt;**&lt;&#x2F;span&gt;&lt;span&gt; or &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;font-style: italic;&quot;&gt;___&lt;&#x2F;span&gt;&lt;span&gt;Bold and Italic text___&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Bold and Italic text&lt;&#x2F;strong&gt;&lt;&#x2F;em&gt; or &lt;em&gt;&lt;strong&gt;Bold and Italic text&lt;&#x2F;strong&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;strikethrough&quot;&gt;Strikethrough&lt;&#x2F;h3&gt;
&lt;p&gt;Surround text with double tildes (&lt;code&gt;~~&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;~~Strikethrough text~~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;del&gt;Strikethrough text&lt;&#x2F;del&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;inline-code&quot;&gt;Inline Code&lt;&#x2F;h3&gt;
&lt;p&gt;Surround text with backticks (&lt;code&gt;`&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;`Inline code`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;Inline code&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;links&quot;&gt;Links&lt;&#x2F;h3&gt;
&lt;p&gt;Use square brackets for the link text and parentheses for the URL.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;Link text&lt;&#x2F;span&gt;&lt;span&gt;](&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;text-decoration: underline;&quot;&gt;https:&#x2F;&#x2F;example.com&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;a class=&quot;&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;example.com&quot;&gt;Link text&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;lists&quot;&gt;Lists&lt;&#x2F;h1&gt;
&lt;p&gt;Markdown supports both &lt;strong&gt;unordered&lt;&#x2F;strong&gt; and &lt;strong&gt;ordered&lt;&#x2F;strong&gt; lists, as well as &lt;strong&gt;nested lists&lt;&#x2F;strong&gt;. Below is a comprehensive style guide.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;1-unordered-lists&quot;&gt;1. Unordered Lists&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;white-check-mark-syntax&quot;&gt;✅ Syntax&lt;&#x2F;h4&gt;
&lt;p&gt;Use a hyphen (&lt;code&gt;-&lt;&#x2F;code&gt;), asterisk (&lt;code&gt;*&lt;&#x2F;code&gt;), or plus (&lt;code&gt;+&lt;&#x2F;code&gt;) followed by a space:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Item one&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Item two&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Item three&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;✅ &lt;strong&gt;Preferred:&lt;&#x2F;strong&gt; Use &lt;code&gt;-&lt;&#x2F;code&gt; consistently for simplicity and readability.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Apples&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Oranges&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Bananas&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;Apples&lt;&#x2F;li&gt;
&lt;li&gt;Oranges&lt;&#x2F;li&gt;
&lt;li&gt;Bananas&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h4 id=&quot;no-entry-sign-avoid&quot;&gt;🚫 Avoid&lt;&#x2F;h4&gt;
&lt;p&gt;Inconsistent bullet characters:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Apples&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;* Oranges&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;+ Bananas&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;2-ordered-lists&quot;&gt;2. Ordered Lists&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;white-check-mark-syntax-1&quot;&gt;✅ Syntax&lt;&#x2F;h4&gt;
&lt;p&gt;Use numbers followed by a period and a space:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1. First item&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2. Second item&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3. Third item&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;&#x2F;strong&gt; Markdown auto-corrects numbering, but it’s best to keep numbers accurate for clarity when editing.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1. Wake up&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2. Make coffee&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3. Start work&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol&gt;
&lt;li&gt;Wake up&lt;&#x2F;li&gt;
&lt;li&gt;Make coffee&lt;&#x2F;li&gt;
&lt;li&gt;Start work&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h4 id=&quot;no-entry-sign-avoid-1&quot;&gt;🚫 Avoid&lt;&#x2F;h4&gt;
&lt;p&gt;Skipping numbers or mixing bullets:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1. Wake up&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3. Make coffee&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Start work&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;3-nested-lists&quot;&gt;3. Nested Lists&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;white-check-mark-syntax-2&quot;&gt;✅ Syntax&lt;&#x2F;h4&gt;
&lt;p&gt;Indent sub-items with &lt;strong&gt;two spaces&lt;&#x2F;strong&gt; (or four if your renderer requires it):&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Fruit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  - Apple&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  - Banana&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Vegetables&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  - Carrot&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  - Lettuce&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;Fruit
&lt;ul&gt;
&lt;li&gt;Apple&lt;&#x2F;li&gt;
&lt;li&gt;Banana&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Vegetables
&lt;ul&gt;
&lt;li&gt;Carrot&lt;&#x2F;li&gt;
&lt;li&gt;Lettuce&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1. Morning routine&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   - Brush teeth&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   - Shower&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2. Work tasks&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   - Check emails&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   - Attend meetings&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ol&gt;
&lt;li&gt;Morning routine
&lt;ul&gt;
&lt;li&gt;Brush teeth&lt;&#x2F;li&gt;
&lt;li&gt;Shower&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Work tasks
&lt;ul&gt;
&lt;li&gt;Check emails&lt;&#x2F;li&gt;
&lt;li&gt;Attend meetings&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h4 id=&quot;no-entry-sign-avoid-2&quot;&gt;🚫 Avoid&lt;&#x2F;h4&gt;
&lt;p&gt;Inconsistent indentation:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- Fruit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    - Apple&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  - Banana&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;4-task-lists-github-flavored-markdown&quot;&gt;4. Task Lists (GitHub Flavored Markdown)&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;white-check-mark-syntax-3&quot;&gt;✅ Syntax&lt;&#x2F;h4&gt;
&lt;p&gt;Use &lt;code&gt;- [ ]&lt;&#x2F;code&gt; for incomplete and &lt;code&gt;- [x]&lt;&#x2F;code&gt; for completed tasks:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span&gt;] Write proposal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- [ ] Review notes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- [ ] Submit draft&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #BD93F9;font-weight: bold;&quot;&gt;#### To-Do List&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span&gt;] Finish Markdown guide&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- [ ] Upload to repository&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- [ ] Share with team&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;to-do-list&quot;&gt;To-Do List&lt;&#x2F;h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot; checked=&quot;&quot;&#x2F;&gt;
Finish Markdown guide&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
Upload to repository&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
Share with team&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;5-styling-inside-lists&quot;&gt;5. Styling Inside Lists&lt;&#x2F;h3&gt;
&lt;p&gt;You can combine other Markdown syntax inside list items.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB86C;font-weight: bold;&quot;&gt; **Bold item**&lt;&#x2F;span&gt;&lt;span&gt; for emphasis&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;font-style: italic;&quot;&gt; *Italic item*&lt;&#x2F;span&gt;&lt;span&gt; for subtle emphasis&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt; `Code item`&lt;&#x2F;span&gt;&lt;span&gt; for commands or code&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;Linked item&lt;&#x2F;span&gt;&lt;span&gt;](&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;text-decoration: underline;&quot;&gt;https:&#x2F;&#x2F;example.com&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bold item&lt;&#x2F;strong&gt; for emphasis&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Italic item&lt;&#x2F;em&gt; for subtle emphasis&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;Code item&lt;&#x2F;code&gt; for commands or code&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a class=&quot;&quot; rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;example.com&quot;&gt;Linked item&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;definitions&quot;&gt;Definitions&lt;&#x2F;h1&gt;
&lt;p&gt;Markdown does not have a native syntax for definitions like HTML’s &lt;code&gt;&amp;lt;dl&amp;gt;&lt;&#x2F;code&gt;, &lt;code&gt;&amp;lt;dt&amp;gt;&lt;&#x2F;code&gt;, and &lt;code&gt;&amp;lt;dd&amp;gt;&lt;&#x2F;code&gt;. However, there are &lt;strong&gt;common conventions and workarounds&lt;&#x2F;strong&gt; used in various Markdown renderers (like GitHub or Markdown processors with plugin support).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;1-basic-definition-format-plain-markdown&quot;&gt;1. Basic Definition Format (Plain Markdown)&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;white-check-mark-syntax-4&quot;&gt;✅ Syntax&lt;&#x2F;h4&gt;
&lt;p&gt;Use &lt;strong&gt;bold&lt;&#x2F;strong&gt; or &lt;strong&gt;italic&lt;&#x2F;strong&gt; for the term, followed by a colon and its definition:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB86C;font-weight: bold;&quot;&gt;**Term**&lt;&#x2F;span&gt;&lt;span&gt;: Definition of the term.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB86C;font-weight: bold;&quot;&gt;**Markdown**&lt;&#x2F;span&gt;&lt;span&gt;: A lightweight markup language for formatting text.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFB86C;font-weight: bold;&quot;&gt;**GitHub**&lt;&#x2F;span&gt;&lt;span&gt;: A platform for hosting and collaborating on code.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Markdown&lt;&#x2F;strong&gt;: A lightweight markup language for formatting text.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;GitHub&lt;&#x2F;strong&gt;: A platform for hosting and collaborating on code.&lt;&#x2F;p&gt;
&lt;p&gt;✅ This is readable and compatible with all Markdown renderers.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;2-bullet-list-format-for-definitions&quot;&gt;2. Bullet List Format for Definitions&lt;&#x2F;h3&gt;
&lt;p&gt;Use a bullet point with bolded terms and indented definitions:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB86C;font-weight: bold;&quot;&gt; **Term**&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  Definition goes here.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB86C;font-weight: bold;&quot;&gt; **Open Source**&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  Software that is freely available and can be modified by anyone.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB86C;font-weight: bold;&quot;&gt; **Repository**&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  A storage location for software packages or source code.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Open Source&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
Software that is freely available and can be modified by anyone.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Repository&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
A storage location for software packages or source code.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;✅ This approach improves visual separation and readability.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;callouts&quot;&gt;Callouts&lt;&#x2F;h1&gt;
&lt;p&gt;Ever find yourself wanting to add extra styling to important information in your posts? Well, now you can with callout cards. Each callout card can include an emoji, any length of text with styles and links, and a custom background color.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;ℹ️
Create your own platform on the web. Ghost is a powerful app for new-media creators to publish, share, and grow a business around their content.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;✅
Create your own platform on the web. Ghost is a powerful app for new-media creators to publish, share, and grow a business around their content.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️
Create your own platform on the web. Ghost is a powerful app for new-media creators to publish, share, and grow a business around their content.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;🚫
Create your own platform on the web. Ghost is a powerful app for new-media creators to publish, share, and grow a business around their content.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h1 id=&quot;quotes&quot;&gt;Quotes&lt;&#x2F;h1&gt;
&lt;p&gt;You can make quotes stand out with two types of blockquote styles that can be applied directly in the editor.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ghost is a fully open source, adaptable platform for building and running a modern online publication. We power blogs, magazines and journalists from Zappos to Sky News.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h1 id=&quot;details-toggle&quot;&gt;Details (Toggle)&lt;&#x2F;h1&gt;
&lt;p&gt;Markdown doesn&#x27;t support HTML &lt;code&gt;&amp;lt;details&amp;gt;&lt;&#x2F;code&gt; directly — we need to use a shortcode. Toggle elements are useful for FAQs, spoilers, code explanations, or optional sections in documents. To display one include this in your Markdown:&lt;&#x2F;p&gt;
&lt;p&gt;✅ Syntax: wrap up the opening &lt;code&gt;&amp;lt;detail&amp;gt;&lt;&#x2F;code&gt; and closing &lt;code&gt;&amp;lt;&#x2F;detail&amp;gt;&lt;&#x2F;code&gt; element withing &lt;code&gt;{{ }}&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt; details summary=&amp;quot;See the details&amp;quot; &amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    1. Open the **file**  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    2. Edit the configuration  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    3. Save and close&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&#x2F;details&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;📝 Example:&lt;&#x2F;p&gt;
&lt;p&gt;{{&amp;lt; details summary=&quot;See the details&quot; &amp;gt;}}&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Open the &lt;strong&gt;file&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Edit the configuration&lt;&#x2F;li&gt;
&lt;li&gt;Save and close
{{&amp;lt; &#x2F;details &amp;gt;}}&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h1 id=&quot;code-blocks&quot;&gt;Code Blocks&lt;&#x2F;h1&gt;
&lt;p&gt;Markdown supports inline code and fenced code blocks, allowing you to format and highlight source code clearly. This guide explains how to use them properly with examples in various programming languages.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;1-inline-code&quot;&gt;1. Inline code&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;white-check-mark-syntax-5&quot;&gt;✅ Syntax&lt;&#x2F;h4&gt;
&lt;p&gt;Use backticks (`) to enclose short code snippets within a sentence:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Use the &lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;`print()`&lt;&#x2F;span&gt;&lt;span&gt; function to display output in Python.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Use the &lt;code&gt;print()&lt;&#x2F;code&gt; function to display output in Python.&lt;&#x2F;p&gt;
&lt;p&gt;✅ Ideal for short commands, filenames, or variable names.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;2-code-blocks&quot;&gt;2. Code Blocks&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;white-check-mark-syntax-6&quot;&gt;✅ Syntax&lt;&#x2F;h4&gt;
&lt;p&gt;Use triple backticks (```) to create a code block. Specify the language for syntax highlighting:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;    ```python &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8BE9FD;&quot;&gt;        print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E9F284;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;Hello, world!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E9F284;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;    ```&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;🧠 Tip: Always specify the language to improve readability.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;examples&quot;&gt;Examples&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;python&quot;&gt;Python&lt;&#x2F;h5&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt; greet&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB86C;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8BE9FD;&quot;&gt;    print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;&amp;quot;Hello, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #BD93F9;&quot;&gt;{&lt;&#x2F;span&gt;&lt;span&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BD93F9;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;!&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h5 id=&quot;javascript&quot;&gt;JavaScript&lt;&#x2F;h5&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;  function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt; greet&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFB86C;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E9F284;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;Hello, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E9F284;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E9F284;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F1FA8C;&quot;&gt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E9F284;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h5 id=&quot;html&quot;&gt;HTML&lt;&#x2F;h5&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;html&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;DOCTYPE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #50FA7B;font-style: italic;&quot;&gt; html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;head&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;title&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;My Page&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;title&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;head&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;Hello World!&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h5 id=&quot;css&quot;&gt;CSS&lt;&#x2F;h5&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;css&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;  body&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8BE9FD;&quot;&gt;    font-family&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BD93F9;&quot;&gt; sans-serif&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #8BE9FD;&quot;&gt;    color&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #BD93F9;&quot;&gt; #333&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h1 id=&quot;tables&quot;&gt;Tables&lt;&#x2F;h1&gt;
&lt;p&gt;Markdown allows you to create simple, readable tables using a pipe (|) and dash (-) syntax. This guide explains the structure, alignment options, and advanced tips.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;1-basic-table-structure&quot;&gt;1. Basic Table Structure&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;white-check-mark-syntax-7&quot;&gt;✅ Syntax&lt;&#x2F;h4&gt;
&lt;p&gt;Use | to separate columns and - to define the header:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  | Column 1 | Column 2 | Column 3 |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  |----------|----------|----------|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  | Value 1  | Value 2  | Value 3  |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  | Value 4  | Value 5  | Value 6  |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Column 1&lt;&#x2F;th&gt;&lt;th&gt;Column 2&lt;&#x2F;th&gt;&lt;th&gt;Column 3&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Value 1&lt;&#x2F;td&gt;&lt;td&gt;Value 2&lt;&#x2F;td&gt;&lt;td&gt;Value 3&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Value 4&lt;&#x2F;td&gt;&lt;td&gt;Value 5&lt;&#x2F;td&gt;&lt;td&gt;Value 6&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;2-aligning-text&quot;&gt;2. Aligning Text&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;white-check-mark-syntax-8&quot;&gt;✅ Syntax&lt;&#x2F;h4&gt;
&lt;p&gt;You can control column alignment by placing colons (:) in the separator row:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  | Left Align | Center Align | Right Align |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  |:-----------|:------------:|------------:|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  | A          | B            | C           |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Left Align&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;Center Align&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: right&quot;&gt;Right Align&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;A&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;B&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;C&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;D&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;E&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;F&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h3 id=&quot;3-escaping-pipes&quot;&gt;3. Escaping Pipes (|)&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;white-check-mark-syntax-9&quot;&gt;✅ Syntax&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  | Language | Example             |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  |----------|---------------------|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  | Markdown | A \| B \| C         |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Language&lt;&#x2F;th&gt;&lt;th&gt;Example&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Markdown&lt;&#x2F;td&gt;&lt;td&gt;A | B | C&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h1 id=&quot;media&quot;&gt;Media&lt;&#x2F;h1&gt;
&lt;h3 id=&quot;1-images&quot;&gt;1. Images&lt;&#x2F;h3&gt;
&lt;p&gt;✅ Syntax (Standard Markdown)&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  ![&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;Alt text&lt;&#x2F;span&gt;&lt;span&gt;](&lt;&#x2F;span&gt;&lt;span style=&quot;color: #8BE9FD;text-decoration: underline;&quot;&gt;image-url.jpg&lt;&#x2F;span&gt;&lt;span&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FF79C6;&quot;&gt;Optional Title&lt;&#x2F;span&gt;&lt;span&gt;&amp;quot;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;📝 Example:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;images&#x2F;image-example.jpg&quot; alt=&quot;Alt text&quot; title=&quot;Optional Title&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;🧠 Tip:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Alt text improves accessibility.&lt;&#x2F;li&gt;
&lt;li&gt;The optional &quot;Title&quot; appears as a tooltip.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;2-image-with-html-attributes&quot;&gt;2. Image with HTML Attributes&lt;&#x2F;h3&gt;
&lt;p&gt;Use HTML figure shortcode to specify size, style, or alignment:&lt;&#x2F;p&gt;
&lt;p&gt;✅ Syntax: wrap up the folowing HTML withing &lt;code&gt;{{ }}&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt; figure&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    src=&amp;quot;&#x2F;images&#x2F;image-example02.jpg&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    alt=&amp;quot;A photograph the Volcan Landscape Tenerife Spain&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    caption=&amp;quot;Volcan Landscape Tenerife Spain&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    class=&amp;quot;mx-auto max-w-md&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;{{&amp;lt; figure
src=&quot;&#x2F;images&#x2F;image-example02.jpg&quot;
alt=&quot;A photograph the Volcan Landscape Tenerife Spain&quot;
caption=&quot;Volcan Landscape Tenerife Spain&quot;
class=&quot;mx-auto max-w-md&quot;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;}}&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;3-embedding-youtube-videos&quot;&gt;3. Embedding Youtube Videos&lt;&#x2F;h3&gt;
&lt;p&gt;Markdown does not support videos natively, so use a shortcode instead. To display a YouTube video with this URL: &lt;code&gt;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=0RKpf3rK57I&lt;&#x2F;code&gt; include this in your Markdown:&lt;&#x2F;p&gt;
&lt;p&gt;✅ Syntax: wrap up the folowing shortcode withing &lt;code&gt;{{ }}&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt; youtube 0RKpf3rK57I &amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;{{&amp;lt; youtube 0RKpf3rK57I &amp;gt;}}&lt;&#x2F;p&gt;
&lt;h3 id=&quot;4-embedding-youtube-with-html-attributes&quot;&gt;4. Embedding Youtube with HTML Attributes&lt;&#x2F;h3&gt;
&lt;p&gt;✅ Syntax: wrap up the folowing shortcode withing &lt;code&gt;{{ }}&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt; youtube id=0RKpf3rK57I start=30 end=60 loading=lazy &amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;{{&amp;lt; youtube id=0RKpf3rK57I class=&quot;mx-auto max-w-lg h-96&quot; loading=lazy &amp;gt;}}&lt;&#x2F;p&gt;
&lt;h3 id=&quot;5-embedding-audio&quot;&gt;5. Embedding Audio&lt;&#x2F;h3&gt;
&lt;p&gt;Markdown doesn&#x27;t support audio directly — we need to use a shortcode. To display an Audio player with include this in your Markdown:&lt;&#x2F;p&gt;
&lt;p&gt;✅ Syntax: wrap up the folowing shortcode withing &lt;code&gt;{{ }}&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #282A36;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt; audio src=&amp;quot;&#x2F;audio&#x2F;audio-example.mp3&amp;quot; &amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;{{&amp;lt; audio src=&quot;&#x2F;audio&#x2F;audio-example.mp3&quot; &amp;gt;}}&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
