<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Thomi Jasir</title>
    <description>The latest articles on DEV Community by Thomi Jasir (@thomijasir).</description>
    <link>https://dev.to/thomijasir</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F756836%2Fe9938a73-bc7e-4280-a2f6-190a729cf342.webp</url>
      <title>DEV Community: Thomi Jasir</title>
      <link>https://dev.to/thomijasir</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thomijasir"/>
    <language>en</language>
    <item>
      <title>I Built a Production-Ready Rust Web API Starter Kit (axum-starter)</title>
      <dc:creator>Thomi Jasir</dc:creator>
      <pubDate>Sat, 07 Mar 2026 01:49:46 +0000</pubDate>
      <link>https://dev.to/thomijasir/i-built-a-production-ready-rust-web-api-starter-kit-axum-starter-f43</link>
      <guid>https://dev.to/thomijasir/i-built-a-production-ready-rust-web-api-starter-kit-axum-starter-f43</guid>
      <description>&lt;p&gt;After 2 years of learning Rust, I finally shipped my first public project.&lt;/p&gt;

&lt;p&gt;It's a boilerplate starter kit for building &lt;strong&gt;Web API with Rust&lt;/strong&gt;. The architecture is inspired by NestJS, Spring Boot, and Laravel. I took the best patterns from those and adapted them to work properly in Rust.&lt;/p&gt;

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

&lt;p&gt;GitHub: &lt;a href="https://github.com/thomijasir/axum-starter" rel="noopener noreferrer"&gt;https://github.com/thomijasir/axum-starter&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Web Framework&lt;/td&gt;
&lt;td&gt;Axum 0.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ORM&lt;/td&gt;
&lt;td&gt;Diesel 2.3 (SQLite dev / PostgreSQL prod)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth&lt;/td&gt;
&lt;td&gt;JWT + Argon2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docs&lt;/td&gt;
&lt;td&gt;OpenAPI / Swagger (dev only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Logging&lt;/td&gt;
&lt;td&gt;Tracing (structured JSON)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IDs&lt;/td&gt;
&lt;td&gt;Snowflake (distributed-safe)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Architecture pattern: &lt;strong&gt;Controller → Service → Repository&lt;/strong&gt;. Strict unidirectional. Nothing leaks between layers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Running in 30 Seconds
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/thomijasir/axum-starter
&lt;span class="nb"&gt;cd &lt;/span&gt;axum-starter
./run.sh dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Server starts at &lt;code&gt;http://localhost:3099&lt;/code&gt;. Swagger UI at &lt;code&gt;http://localhost:3099/spec&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: &lt;code&gt;run.sh&lt;/code&gt; is the task runner. It auto-loads the correct &lt;code&gt;.env&lt;/code&gt; file per environment so you don't set variables manually.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Sample Endpoints Already Wired Up
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST /auth/register
POST /auth/login
POST /auth/refresh
GET  /user/profile
POST /attachment   (file upload with MIME validation)
GET  /spec         (Swagger UI, dev only)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are sample endpoints. Remove what you don't need, add what you do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Built This
&lt;/h2&gt;

&lt;p&gt;When I started learning Rust for web API development, there was no solid reference I could follow. Most tutorials stop at "hello world." Nobody shows you how to structure a real project with auth, file uploads, migrations, and proper layering all working together.&lt;/p&gt;

&lt;p&gt;So I built the reference I wish I had.&lt;/p&gt;

&lt;p&gt;This project is not perfect. I'm sharing it because I need feedback from real developers. If you spot something wrong or something that could be better, please open an issue or PR. I'll be happy to review it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full Article
&lt;/h2&gt;

&lt;p&gt;The full breakdown with architecture deep dive, project structure explanation, environment setup, and documentation guide is on my website.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="[https://venobi.com/blog/rust-starter-kit-for-web-api-development]"&gt;Read the full article here&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If this is useful, a on GitHub would help a lot. Once it hits 100 stars I'll submit it to &lt;strong&gt;Awesome Rust&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>webdev</category>
      <category>backend</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Nobody Taught You the Function Philosophy. Let Me Fix That.</title>
      <dc:creator>Thomi Jasir</dc:creator>
      <pubDate>Thu, 05 Mar 2026 15:15:29 +0000</pubDate>
      <link>https://dev.to/thomijasir/nobody-taught-you-the-function-philosophy-let-me-fix-that-293i</link>
      <guid>https://dev.to/thomijasir/nobody-taught-you-the-function-philosophy-let-me-fix-that-293i</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faw5wjsu1m7dyhvmuze7r.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faw5wjsu1m7dyhvmuze7r.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've been writing code for a long time, and the one thing that still separates great developers from average ones isn't the language they use. It's how they think about functions.&lt;/p&gt;

&lt;p&gt;Most tutorials give you steps. Nobody talks about the why.&lt;br&gt;
Here is the short version of what I know.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A function is a mini machine with one job&lt;/strong&gt;. You feed it input, it runs its hidden process, and hands you back a result. That's it. If your function is doing three jobs, you don't have a function. You have chaos with a name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The argument rule nobody follows: Zero arguments is the ideal&lt;/strong&gt;. One is clear. Two is acceptable. Three or more? Just trash your function and rethink the design. When arguments pile up, they are telling you something: they want to become a struct or an object.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Stop doing this&lt;/span&gt;
&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;create_user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;country&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Start doing this&lt;/span&gt;
&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;create_user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;NewUserParams&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Single responsibility&lt;/strong&gt; is not single line. I hear developers repeat this principle like a magic spell and get it completely wrong. One responsibility means one job, not one line of code. &lt;/p&gt;

&lt;p&gt;A make_juice function that washes, cuts, and squeezes is still one function. Its job is to make juice. That's fine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And know when to actually define a function&lt;/strong&gt;. Not everywhere. Only when you have repetitive code, complex logic that needs a name, or a business concept that deserves to be documented as its own unit.&lt;br&gt;
That's the whole philosophy. &lt;/p&gt;

&lt;p&gt;You don't need 10 rules. You need to understand the idea behind the function, and the rules follow naturally.&lt;/p&gt;

&lt;p&gt;Check any other sample on how i define function on my original story How to &lt;a href="https://venobi.com/blog/how-to-write-a-clean-function-in-any-programming-language" rel="noopener noreferrer"&gt;Write a Clean Function&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thats all from my side, hope you enjoy my simple tips and ill bring more tips later Thanks&lt;/p&gt;

</description>
      <category>programming</category>
      <category>functional</category>
      <category>cleancode</category>
    </item>
    <item>
      <title>Stop Shipping Bugs: How Bun + Hono Gave Me Rust-Level Confidence</title>
      <dc:creator>Thomi Jasir</dc:creator>
      <pubDate>Tue, 03 Feb 2026 15:11:12 +0000</pubDate>
      <link>https://dev.to/thomijasir/stop-shipping-bugs-how-bun-hono-gave-me-rust-level-confidence-2nf0</link>
      <guid>https://dev.to/thomijasir/stop-shipping-bugs-how-bun-hono-gave-me-rust-level-confidence-2nf0</guid>
      <description>&lt;p&gt;It’s been a long time since I last wrote an article like this. Since I’m working in a bank as a software engineer, being in a bank environment often makes me feel bored and sometimes, it feels like my skills are slowly becoming outdated.&lt;/p&gt;

&lt;p&gt;I have expertise in &lt;strong&gt;Rust&lt;/strong&gt;, and I have used Rust for over &lt;strong&gt;2 years&lt;/strong&gt; on my personal projects. Working with Rust was a great experience. I never felt this level of discipline in code before, because previously I used JavaScript.&lt;/p&gt;

&lt;p&gt;As we know, &lt;strong&gt;JavaScript&lt;/strong&gt; is easy and lives everywhere. One thing that I don’t like about JavaScript is that you can do one thing in many ways. It’s like the &lt;strong&gt;paradox of choice&lt;/strong&gt;, when you have too many options, you get confused.&lt;/p&gt;

&lt;p&gt;That’s why I started looking for another programming option, from JavaScript to TypeScript, and from &lt;strong&gt;TypeScript to Rust&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;The result was amazing. In Rust, everything must be &lt;strong&gt;type-safe&lt;/strong&gt; and super strict. The tooling in Rust for development is very good.&lt;/p&gt;

&lt;p&gt;But being too strict makes development slow, because you need to define everything properly. &lt;/p&gt;

&lt;p&gt;For critical applications like finance, it’s okay, but what about when we want to develop simple applications like chat apps or simple CRUD systems? I think it’s too much.&lt;/p&gt;

&lt;p&gt;Then I started to think, why don’t we combine the strictness rules from Rust but apply them in TypeScript? That way, we can get better code &lt;strong&gt;discipline&lt;/strong&gt; and better code quality, while still being flexible. This idea came to my mind for one week and never left my head.&lt;/p&gt;

&lt;p&gt;After some research, I found a solution by combining &lt;strong&gt;Bun&lt;/strong&gt; + &lt;strong&gt;Hono&lt;/strong&gt; + the &lt;strong&gt;Rust&lt;/strong&gt; Configuration Pattern (from my past experience).&lt;/p&gt;

&lt;p&gt;Bun is a runtime environment like Node.js, but written in &lt;strong&gt;Zig&lt;/strong&gt;. It has head-to-head performance comparable to Rust and C. For those of you who don’t know, Bun is like a JavaScript/TypeScript runtime that translates your JS code into a native binary.&lt;/p&gt;

&lt;p&gt;After development, I built a backend service with predefined rules and strictness like Rust, but flexible like JavaScript. You can find it on my &lt;strong&gt;GitHub&lt;/strong&gt; &lt;a href="https://github.com/thomijasir/hono-starter" rel="noopener noreferrer"&gt;https://github.com/thomijasir/hono-starter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flfjz9hdpaiwak34evyp0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flfjz9hdpaiwak34evyp0.png" alt="Bun Hono Starter Kit" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specification Project&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bun as main environment&lt;/li&gt;
&lt;li&gt;Hono API Framework&lt;/li&gt;
&lt;li&gt;Typescript as main language&lt;/li&gt;
&lt;li&gt;Zod for validation in runtime&lt;/li&gt;
&lt;li&gt;Barrel Pattern Implementation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Project Structure&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;src/
├── middlewares/        # Hono middlewares (e.g., auth, logger)
├── modules/            # Feature modules (Domain Driven Design)
│   ├── users/          # Example module: Users
│   │   ├── controller.ts # Request handlers
│   │   ├── service.ts    # Business logic
│   │   ├── model.ts      # Data models/types
│   │   └── index.ts      # Routes definition
│   └── index.ts        # Exports all module routes
├── public/             # Static files (JSON mocks, assets) served by catch-all route
├── utils/              # Shared utilities (helpers, response formats)
├── index.ts            # Entry point
├── routes.ts           # Main application router
├── state.ts            # App state initialization (Config, DB)
└── types.ts            # Global type definition
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This Hono starter pack is a work in progress, and I am committed to its continuous improvement. If you have suggestions, please feel free to open an issue. If you would like to contribute to the codebase, your input is highly welcome.&lt;/p&gt;

&lt;p&gt;I created this project because I enjoy streamlining workflows and helping fellow developers elevate their code quality. I hope this tool enables you to build high performance, high quality applications with minimal friction.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>typescript</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
