<?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: Sharifuzzaman Nakib</title>
    <description>The latest articles on DEV Community by Sharifuzzaman Nakib (@nakib).</description>
    <link>https://dev.to/nakib</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%2F587906%2F7714f5bf-3a45-4837-9d5f-7be88e27167e.jpg</url>
      <title>DEV Community: Sharifuzzaman Nakib</title>
      <link>https://dev.to/nakib</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nakib"/>
    <language>en</language>
    <item>
      <title>Introducing OpenTransit: A Free, Open-Source Fork of MassTransit v8</title>
      <dc:creator>Sharifuzzaman Nakib</dc:creator>
      <pubDate>Fri, 05 Dec 2025 14:25:06 +0000</pubDate>
      <link>https://dev.to/nakib/introducing-opentransit-a-free-open-source-fork-of-masstransit-v8-2eb3</link>
      <guid>https://dev.to/nakib/introducing-opentransit-a-free-open-source-fork-of-masstransit-v8-2eb3</guid>
      <description>&lt;p&gt;MassTransit has been the most trusted and most popular messaging framework in the .NET world for years. But with &lt;strong&gt;MassTransit v9 moving to a commercial model&lt;/strong&gt;, many developers suddenly face uncertainty about the future of open, community-friendly messaging infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://opentransitlab.github.io/OpenTransit/" rel="noopener noreferrer"&gt;OpenTransit&lt;/a&gt; is our answer to that shift: a fully &lt;strong&gt;open-source, community-led **&lt;a href="https://github.com/OpenTransitLab/OpenTransit" rel="noopener noreferrer"&gt;fork&lt;/a&gt; of MassTransit v8 — built to keep the ecosystem **free, stable&lt;/strong&gt;, and &lt;strong&gt;moving forward&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Supported .NET Versions?
&lt;/h2&gt;

&lt;p&gt;OpenTransit will target &lt;strong&gt;.NET 10 and above&lt;/strong&gt;. For most MassTransit v8 users, this shouldn’t create any friction — nearly all of them are already on .NET 5 or later, so moving forward will be straightforward.&lt;/p&gt;

&lt;h2&gt;
  
  
  For Current MassTransit V8 Users
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MassTransit v8 will remain supported until the end of 2026&lt;/strong&gt;, so there’s no pressure to make any immediate decisions. Keep using v8 confidently.&lt;/p&gt;

&lt;p&gt;In the meantime, we’re actively working on OpenTransit — digging deep into the codebase, documenting everything properly, and laying the groundwork for a smooth transition. The documentation has already begun, and you can start exploring it now from &lt;a href="https://opentransitlab.github.io/OpenTransit/docs/documentation.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When MassTransit v8 reaches the end of support, we’ll release the first production-ready version of OpenTransit.&lt;/p&gt;

&lt;p&gt;You may stay connected with us on &lt;a href="https://discord.gg/ghJsM9j6Dr" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;. Your feedback and suggestions during this phase will help shape the framework’s future.&lt;/p&gt;

&lt;h2&gt;
  
  
  Last but not the least:
&lt;/h2&gt;

&lt;p&gt;Please share this &lt;a href="https://opentransitlab.github.io/OpenTransit/index.html" rel="noopener noreferrer"&gt;project&lt;/a&gt; with your teammates and other .NET developers. The more voices we hear, the stronger OpenTransit becomes.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>csharp</category>
      <category>distributedsystems</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Using HTTPS on Next.js local development server</title>
      <dc:creator>Sharifuzzaman Nakib</dc:creator>
      <pubDate>Wed, 03 Mar 2021 12:04:14 +0000</pubDate>
      <link>https://dev.to/nakib/using-https-on-next-js-local-development-server-bcd</link>
      <guid>https://dev.to/nakib/using-https-on-next-js-local-development-server-bcd</guid>
      <description>&lt;p&gt;In today's world, HTTPS is everywhere.&lt;br&gt;
So we should keep our development environment the same as the production environment. Because some things may not work in HTTP but work in HTTPS and vice versa. &lt;/p&gt;

&lt;p&gt;The Next.js development server runs on HTTP by default. In this post, we will discuss how to run the Next.js development server on HTTPS. &lt;/p&gt;
&lt;h3&gt;
  
  
  Prerequisite:
&lt;/h3&gt;

&lt;p&gt;First, we need to get an SSL certificate. &lt;a href="https://github.com/FiloSottile/mkcert" rel="noopener noreferrer"&gt;Mkcert&lt;/a&gt; is the recommended option here which is simpler than the alternatives.&lt;br&gt;
&lt;strong&gt;mkcert&lt;/strong&gt; will create a &lt;strong&gt;CA&lt;/strong&gt; and &lt;strong&gt;SSL Certificate&lt;/strong&gt; for the servers for us. We will explain later how they work.&lt;/p&gt;

&lt;p&gt;So first we need to &lt;strong&gt;install&lt;/strong&gt; &lt;a href="https://github.com/FiloSottile/mkcert#installation" rel="noopener noreferrer"&gt;mkcert&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;After installing, we will &lt;strong&gt;generate a CA&lt;/strong&gt; i.e Certificate Authority first. &lt;br&gt;
&lt;code&gt;mkcert -install&lt;/code&gt; will do this. &lt;/p&gt;

&lt;p&gt;Then, &lt;strong&gt;we have to generate a certificate for specific servers&lt;/strong&gt;. &lt;br&gt;
let we want to generate a certificate for &lt;code&gt;localhost&lt;/code&gt; since most of the time we use this as a server. &lt;br&gt;
Here, &lt;code&gt;mkcert localhost&lt;/code&gt; will do this. &lt;br&gt;
This will generate a &lt;strong&gt;certificate&lt;/strong&gt; and a &lt;strong&gt;key&lt;/strong&gt; named as *.pem and *-key.pem respectively. &lt;/p&gt;
&lt;h3&gt;
  
  
  The CA and Certificate(with the key)
&lt;/h3&gt;

&lt;p&gt;The client( Browser or tools like postman) uses the CA certificate to authenticate the CA signature on the server certificate, as part of the authorizations before launching a secure connection. [Courtesy: &lt;a href="https://en.wikipedia.org/wiki/Certificate_authority" rel="noopener noreferrer"&gt;Wikipedia&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;So on next.js, we will create a custom server with the &lt;strong&gt;certificate( *.pem )&lt;/strong&gt; and &lt;strong&gt;key( *-key.pem )&lt;/strong&gt;. This server will run on &lt;strong&gt;HTTPS!&lt;/strong&gt;.&lt;br&gt;
We have explained how to create the server with code in the next section.&lt;/p&gt;

&lt;p&gt;The client such as Browser(Chrome, Firefox) or tools like Postman will use the CA to verify the Certificate of the server. The CA's are stored on Browser's &lt;strong&gt;trusted root store&lt;/strong&gt;. Fortunately, we may not need to add the CA to the &lt;strong&gt;trusted root store&lt;/strong&gt; for Chrome or Firefox. The &lt;strong&gt;mkcert&lt;/strong&gt; does this. We just need to restart the browser. If for some reason it doesn't work then we need to add the certificate to the &lt;strong&gt;trusted root store&lt;/strong&gt; manually. Hope we don't need this extra task :) :)&lt;/p&gt;

&lt;p&gt;But in case we need to add the CA file manually to a browser or tool, first, we need to locate the CA file. &lt;br&gt;
This can be done by &lt;code&gt;mkcert -CAROOT&lt;/code&gt; command.&lt;br&gt;
It will show the directory location where the CA is stored. There will be a certificate with a key. This key shouldn't be shared with others. The directory may be hidden. In that case, we may need to copy the files to another directory so that browser or other tools can locate the files. &lt;/p&gt;

&lt;p&gt;To add the CA on &lt;strong&gt;postman&lt;/strong&gt; you only need to add the certificate, not the key. See it &lt;a href="https://blog.postman.com/encryption-ssl-tls-and-managing-your-certificates-in-postman/#:~:text=You%20can%20manage%20CA%20certificates,domain%2C%20you%20can%20upload%20the%20." rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  Creating the Next.js Custom Server(which runs on HTTPS!)
&lt;/h3&gt;

&lt;p&gt;First copy the &lt;strong&gt;certificate( *.pem )&lt;/strong&gt; and &lt;strong&gt;key( *-key.pem )&lt;/strong&gt; to a directory on the next.js project. Let the directory is on the project root and named as &lt;strong&gt;https_cert&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now create a file named &lt;strong&gt;server.js&lt;/strong&gt; on the project root and paste the following configuration. &lt;strong&gt;Don't forget to change the certificate and key name according to your certificate and key on httpsOptions&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createServer&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;parse&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;url&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NODE_ENV&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;production&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;dev&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getRequestHandler&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;httpsOptions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./https_cert/localhost+1-key.pem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;cert&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./https_cert/localhost+1.pem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;prepare&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;createServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;httpsOptions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;parsedUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;parsedUrl&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ready - started server on url: https://localhost:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Now on the terminal, run &lt;code&gt;node server.js&lt;/code&gt;. &lt;br&gt;
This will start a server on &lt;a href="https://localhost:3000" rel="noopener noreferrer"&gt;https://localhost:3000&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;If there are &lt;a href="https://nextjs.org/docs/api-routes/introduction" rel="noopener noreferrer"&gt;API routes&lt;/a&gt;, then these will be available on &lt;a href="https://localhost:3000/api/*" rel="noopener noreferrer"&gt;https://localhost:3000/api/*&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>https</category>
      <category>local</category>
      <category>development</category>
    </item>
  </channel>
</rss>
