<?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/https:%2F%2Fdev-to-uploads.s3.us-east-2.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>If I Had Known Earlier, I Wouldn’t Have Struggled With .env</title>
      <dc:creator>Thomi Jasir</dc:creator>
      <pubDate>Thu, 17 Sep 2026 13:32:26 +0000</pubDate>
      <link>https://dev.to/thomijasir/if-i-had-known-earlier-i-wouldnt-have-struggled-with-env-5dcg</link>
      <guid>https://dev.to/thomijasir/if-i-had-known-earlier-i-wouldnt-have-struggled-with-env-5dcg</guid>
      <description>&lt;p&gt;You know the drill. Every project has one. Database passwords, API keys, secret tokens all the private stuff that shouldn’t live in your source code. On a single machine it works fine. You create the file, put the values in, and the app runs. No drama.&lt;/p&gt;

&lt;p&gt;The real pain starts the moment you move &lt;code&gt;.env&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;New laptop. New server. New teammate’s machine. Suddenly you’re copying files around, pasting secrets into Slack (then deleting the message), or worse, accidentally committing the &lt;code&gt;.env&lt;/code&gt; to Git and feeling that cold sweat when you realize what you just did.&lt;/p&gt;

&lt;p&gt;I lived in that cycle for about three years.&lt;/p&gt;

&lt;p&gt;I tried everything that felt “safe enough.”&lt;br&gt;&lt;br&gt;
Manual copy-paste between machines.&lt;br&gt;&lt;br&gt;
Keeping a private note somewhere.&lt;br&gt;&lt;br&gt;
Even committing the file and hoping no one would notice the sensitive values (spoiler: that never feels good).&lt;/p&gt;

&lt;p&gt;There was never a clean solution. Just workarounds that created new problems.&lt;/p&gt;

&lt;p&gt;Then one evening I was at a Google Developer Group event. Between talks I ended up chatting with a Google developer. We were talking about everyday programming frustrations when I mentioned my long-running battle with environment files.&lt;/p&gt;

&lt;p&gt;He laughed, not in a mean way, more like “oh, you’re still doing that?”&lt;/p&gt;

&lt;p&gt;He told me he had stopped relying on plain &lt;code&gt;.env&lt;/code&gt; files a long time ago. They are simply too fragile and too easy to mishandle when you work across multiple machines or with a team. He shared two main approaches people use instead:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Encrypt the environment file so it can safely live in the repository and get decrypted only when needed.
&lt;/li&gt;
&lt;li&gt;Use a proper secrets manager to store and retrieve credentials.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;He recommended the second option, especially if you’re still figuring things out. So I decided to stop scratching my head and actually learn it.&lt;/p&gt;

&lt;p&gt;It wasn’t instant. At the beginning it felt a bit abstract. I had to understand how secrets get stored, how applications pull them at runtime, and how to keep everything in sync across environments. &lt;/p&gt;

&lt;p&gt;But I treated it as an investment. I didn’t want to deal with the same headache for a fourth year.&lt;/p&gt;

&lt;p&gt;Once it clicked, everything got quieter.&lt;/p&gt;

&lt;p&gt;Moving between machines stopped being a ritual of copying files and double-checking values. Sharing credentials with a teammate no longer meant sending sensitive text through chat. &lt;/p&gt;

&lt;p&gt;Accidentally committing secrets became much harder to do. The system just worked in the background.&lt;/p&gt;

&lt;p&gt;Looking back, the biggest change wasn’t the tool itself. It was the mindset shift: secrets are not something you should manually ferry from place to place. They deserve a proper home and a reliable way to travel.&lt;/p&gt;

&lt;p&gt;I’m not saying &lt;code&gt;.env&lt;/code&gt; files are evil. For quick local experiments or solo throwaway projects they are still perfectly fine. But the moment your work starts moving between machines, servers, or people, the manual approach starts costing more time and mental energy than it saves.&lt;/p&gt;

&lt;p&gt;This is just a small story from one senior developer who spent too long doing things the hard way. If you’ve ever felt that same frustration, maybe it’s time to look at how you handle secrets too.&lt;/p&gt;

&lt;p&gt;if you ask me what tools for manage secrets manager? actually i tried many things on the internet but the best that i can recommend is Dopbase secrets manager.&lt;/p&gt;

&lt;p&gt;its easy to use and simple its like build for developer and beginner friendly.&lt;/p&gt;

&lt;p&gt;Github: &lt;a href="https://github.com/dopbase" rel="noopener noreferrer"&gt;https://github.com/dopbase&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’d love to hear what works for you.&lt;/p&gt;

</description>
      <category>devtool</category>
      <category>security</category>
      <category>secret</category>
      <category>programming</category>
    </item>
    <item>
      <title>I built a secrets manager because sharing .env files at work was painful!</title>
      <dc:creator>Thomi Jasir</dc:creator>
      <pubDate>Sun, 13 Sep 2026 15:51:03 +0000</pubDate>
      <link>https://dev.to/thomijasir/i-built-a-secrets-manager-because-sharing-env-files-at-work-was-painful-1eh9</link>
      <guid>https://dev.to/thomijasir/i-built-a-secrets-manager-because-sharing-env-files-at-work-was-painful-1eh9</guid>
      <description>&lt;p&gt;Working in the financial industry means dealing with strict security policies. That is understandable when the systems you work on handle sensitive information, but those policies can also make simple development tasks surprisingly difficult.&lt;/p&gt;

&lt;p&gt;One example was how we shared &lt;code&gt;.env&lt;/code&gt; files.&lt;/p&gt;

&lt;p&gt;Our policy required us to use an approved secure file-sharing channel. We could not send environment files through email or messaging apps. The process kept secrets away from insecure communication channels, so it did what it was supposed to do.&lt;/p&gt;

&lt;p&gt;The problem appeared whenever something changed.&lt;/p&gt;

&lt;p&gt;Updating one environment variable meant repeating the entire sharing process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Update the &lt;code&gt;.env&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;Upload the new version to the approved platform.&lt;/li&gt;
&lt;li&gt;Generate a new secure link.&lt;/li&gt;
&lt;li&gt;Notify everyone who needed the update.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A small configuration change became an administrative task. The security controls were necessary, but the developer experience was frustrating.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning the problem into a project
&lt;/h2&gt;

&lt;p&gt;After dealing with this process many times, I started building my own secrets manager.&lt;/p&gt;

&lt;p&gt;I called it &lt;strong&gt;Dopbase&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The idea was simple, secrets should remain encrypted and controlled, but developers should not have to keep passing updated files around manually. I wanted a system built specifically for managing secrets instead of treating them like ordinary files.&lt;/p&gt;

&lt;p&gt;Dopbase came from a problem I experienced at work. It was not an imaginary use case or an attempt to build another developer tool for the sake of it. I needed a better way to handle a repetitive task while still respecting strict security requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security and developer experience can coexist
&lt;/h2&gt;

&lt;p&gt;Working in finance taught me that security policies exist for good reasons. The problem is that a secure process can still be inconvenient.&lt;/p&gt;

&lt;p&gt;Good developer tools should help teams follow security rules without adding unnecessary work. When the secure option is also the practical option, developers are less likely to look for shortcuts.&lt;/p&gt;

&lt;p&gt;That is the problem I am trying to solve with Dopbase.&lt;/p&gt;

&lt;p&gt;Dopbase is free and open source. You can search for it on GitHub or Google if you would like to explore the project.&lt;/p&gt;

&lt;p&gt;I am sharing it because other developers may have faced the same &lt;code&gt;.env&lt;/code&gt; file-sharing problem. If you have, I would be interested to hear how your team handles it.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>security</category>
      <category>devtool</category>
    </item>
    <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=" "&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 http"&gt;&lt;code&gt;&lt;span class="err"&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;/span&gt;&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" rel="noopener noreferrer"&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>
