<?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: Orhan özşahin</title>
    <description>The latest articles on DEV Community by Orhan özşahin (@oozsahin).</description>
    <link>https://dev.to/oozsahin</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3138481%2Fc95eff02-e2c9-441d-a7c7-2e795673c686.png</url>
      <title>DEV Community: Orhan özşahin</title>
      <link>https://dev.to/oozsahin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/oozsahin"/>
    <language>en</language>
    <item>
      <title>Asdamir: Scaffold a working .NET 10 + Blazor enterprise app in 2 commands</title>
      <dc:creator>Orhan özşahin</dc:creator>
      <pubDate>Thu, 16 Jul 2026 18:18:31 +0000</pubDate>
      <link>https://dev.to/oozsahin/asdamir-scaffold-a-working-net-10-blazor-enterprise-app-in-2-commands-3ci3</link>
      <guid>https://dev.to/oozsahin/asdamir-scaffold-a-working-net-10-blazor-enterprise-app-in-2-commands-3ci3</guid>
      <description>&lt;p&gt;I've been building &lt;strong&gt;Asdamir&lt;/strong&gt; for the past several months — a CLI + framework that scaffolds production-shaped .NET apps. Just shipped 1.3, so I'm writing it up.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;asdamir new app MyApp --mode free&lt;/code&gt; gives you a working Blazor Server + API app with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication + RBAC&lt;/li&gt;
&lt;li&gt;Menus and navigation&lt;/li&gt;
&lt;li&gt;Localization (tr/en/ru)&lt;/li&gt;
&lt;li&gt;A journaled migration runner&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It creates the database, applies migrations, and writes the dev secrets — then &lt;code&gt;./restart-myapp.sh&lt;/code&gt; and you're logged in. No manual wiring.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding a feature is one command
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdamir new feature Product &lt;span class="nt"&gt;--fields&lt;/span&gt; &lt;span class="s2"&gt;"Name:string,Price:decimal,Stock:int"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That gives you: entity + CRUD page + menu entry + permissions + migration — applied automatically. Restart the app and the page is in the menu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full quick-start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# install the CLI (once)&lt;/span&gt;
dotnet tool &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; Asdamir.Tools

&lt;span class="c"&gt;# create an app in any empty directory&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;my-apps &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;my-apps
asdamir new app DemoApp &lt;span class="nt"&gt;--mode&lt;/span&gt; free

&lt;span class="c"&gt;# run it&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;DemoApp &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./restart-demoapp.sh
&lt;span class="c"&gt;# → https://localhost:7010, sign in with the starter admin&lt;/span&gt;

&lt;span class="c"&gt;# add a feature&lt;/span&gt;
asdamir new feature Product &lt;span class="nt"&gt;--fields&lt;/span&gt; &lt;span class="s2"&gt;"Name:string,Price:decimal,Stock:int"&lt;/span&gt;
./restart-demoapp.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prerequisites: .NET 10 SDK + SQL Server (localhost:1433).&lt;/p&gt;

&lt;h2&gt;
  
  
  Free mode is genuinely standalone
&lt;/h2&gt;

&lt;p&gt;No license check, no control plane, no phone-home. The generated app owns its own database and issues its own JWTs. It's open-core on NuGet:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Asdamir.Core&lt;/strong&gt; — models, multi-tenancy, JWT/AES-GCM, validation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asdamir.Data&lt;/strong&gt; — Dapper repositories, journaled migrations, outbox&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asdamir.Web&lt;/strong&gt; — Blazor components, security middleware (CSP nonce, rate-limit), localization&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asdamir.Payments&lt;/strong&gt; — Paddle (MoR) + crypto rails, webhook signature verification&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asdamir.Tools&lt;/strong&gt; — the CLI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's a commercial control plane (multi-app RBAC/config/monitoring) but you never need it for a single app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;I've been doing enterprise .NET for ~20 years, and this came out of rebuilding the same auth/RBAC/menu/i18n plumbing on project after project. Every new app started with the same two weeks of boilerplate. Asdamir is that boilerplate, generated in two commands.&lt;/p&gt;

&lt;h2&gt;
  
  
  I'd love feedback
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Does the free-mode flow actually work on your machine?&lt;/li&gt;
&lt;li&gt;Is the scaffolding opinionated in useful ways, or annoying ways?&lt;/li&gt;
&lt;li&gt;What would stop you from using it on a real project?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Site: &lt;a href="https://asdamir.com" rel="noopener noreferrer"&gt;asdamir.com&lt;/a&gt; · Docs: &lt;a href="https://docs.asdamir.com" rel="noopener noreferrer"&gt;docs.asdamir.com&lt;/a&gt; · GitHub: &lt;a href="https://github.com/asdamir-framework/asdamir" rel="noopener noreferrer"&gt;asdamir-framework/asdamir&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy to answer anything in the comments.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>blazor</category>
      <category>csharp</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
