<?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: Lucas Guimarães</title>
    <description>The latest articles on DEV Community by Lucas Guimarães (@lucas_guimaraes).</description>
    <link>https://dev.to/lucas_guimaraes</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%2F3875449%2Ffed606f8-1775-45d8-b621-72e9d2385b64.PNG</url>
      <title>DEV Community: Lucas Guimarães</title>
      <link>https://dev.to/lucas_guimaraes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lucas_guimaraes"/>
    <language>en</language>
    <item>
      <title>How to Render Web Pages with JavaScript and Caddy using AxonASP: Step-by-Step</title>
      <dc:creator>Lucas Guimarães</dc:creator>
      <pubDate>Sun, 26 Jul 2026 23:10:52 +0000</pubDate>
      <link>https://dev.to/lucas_guimaraes/how-to-render-web-pages-with-javascript-and-caddy-using-axonasp-step-by-step-4i2d</link>
      <guid>https://dev.to/lucas_guimaraes/how-to-render-web-pages-with-javascript-and-caddy-using-axonasp-step-by-step-4i2d</guid>
      <description>&lt;p&gt;Web development is constantly evolving, and sometimes the best way to move forward is to rethink how we serve our applications. If you are looking for a lightning-fast, zero-friction way to render server-side JavaScript pages natively within your web server, it is time to look at &lt;strong&gt;AxonASP&lt;/strong&gt; integrated with the &lt;strong&gt;Caddy web server&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We are rewriting the future of server-side page rendering. By embedding the AxonASP runtime directly into Caddy, you get a powerful environment that executes server-side JavaScript right inside your HTTP handlers. Add Caddy's automatic HTTPS, and you can launch secure, dynamic services in seconds.&lt;/p&gt;

&lt;p&gt;Here is a step-by-step guide on how to create a JavaScript-powered web page and launch it immediately using Caddy and AxonASP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Grab the Web Server
&lt;/h2&gt;

&lt;p&gt;AxonASP provides a custom Caddy module that handles everything internally. This &lt;strong&gt;Zero-Process Architecture&lt;/strong&gt; means you don't have to configure FastCGI workers, reverse proxies, or external daemons. &lt;/p&gt;

&lt;p&gt;You have two simple options to get the server:&lt;/p&gt;

&lt;h3&gt;
  
  
  Option A: Download the Pre-Compiled Binary
&lt;/h3&gt;

&lt;p&gt;The fastest way to start is to download a pre-compiled Caddy executable containing the embedded AxonASP module directly from the AxonASP repository release channel. Grab the version for your OS (Windows, Linux, or macOS) and place it in your system's binary path.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option B: Build it from Source
&lt;/h3&gt;

&lt;p&gt;If you prefer compiling it yourself or want to add other Caddy plugins, you can use &lt;code&gt;xcaddy&lt;/code&gt; (the official Caddy builder tool).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install xcaddy&lt;/span&gt;
go &lt;span class="nb"&gt;install &lt;/span&gt;github.com/caddyserver/xcaddy/cmd/xcaddy@latest

&lt;span class="c"&gt;# Build Caddy with the AxonASP module&lt;/span&gt;
xcaddy build &lt;span class="nt"&gt;--with&lt;/span&gt; g3pix.com.br/axonasp/caddy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Configure the Caddyfile
&lt;/h2&gt;

&lt;p&gt;Caddy's configuration is famously simple. To enable AxonASP processing, you just need to add the &lt;code&gt;axonasp&lt;/code&gt; directive inside a &lt;code&gt;route&lt;/code&gt; block alongside the standard &lt;code&gt;file_server&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Create a file named &lt;code&gt;Caddyfile&lt;/code&gt; in your project folder with the following configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;:8080 {
    root * ./www
    route {
        axonasp {
            site_name My_Web_site
            global_asa_path ./www/global.asa
        }
        file_server
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This tells Caddy to serve files from the &lt;code&gt;./www&lt;/code&gt; directory and route applicable pages through the AxonASP execution engine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Write Your Server-Side JavaScript Page
&lt;/h2&gt;

&lt;p&gt;Now for the fun part. Let's create a dynamic web page using server-side JavaScript. &lt;/p&gt;

&lt;p&gt;Create a folder named &lt;code&gt;www&lt;/code&gt; in the same directory as your Caddyfile. Inside that folder, create a file named &lt;code&gt;default.asp&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Add the following code to &lt;code&gt;default.asp&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%@&lt;/span&gt;&lt;span class="na"&gt;Language=&lt;/span&gt;&lt;span class="s"&gt;"JavaScript"&lt;/span&gt;&lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%&lt;/span&gt;
    &lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="na"&gt;Server-side&lt;/span&gt; &lt;span class="na"&gt;JavaScript&lt;/span&gt; &lt;span class="na"&gt;logic&lt;/span&gt;
    &lt;span class="na"&gt;var&lt;/span&gt; &lt;span class="na"&gt;serverTime = &lt;/span&gt;&lt;span class="s"&gt;new&lt;/span&gt; &lt;span class="na"&gt;Date&lt;/span&gt;&lt;span class="err"&gt;();&lt;/span&gt;
    &lt;span class="na"&gt;var&lt;/span&gt; &lt;span class="na"&gt;engine = &lt;/span&gt;&lt;span class="s"&gt;Request.ServerVariables("SERVER_SOFTWARE");&lt;/span&gt;
    &lt;span class="na"&gt;var&lt;/span&gt; &lt;span class="na"&gt;visitorIP = &lt;/span&gt;&lt;span class="s"&gt;Request.ServerVariables("REMOTE_ADDR");&lt;/span&gt;
&lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;!doctype html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"utf-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;AxonASP JavaScript Rendering&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;system-ui&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f4f4f9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#fff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt; &lt;span class="m"&gt;6px&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;600px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#0056b3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nc"&gt;.metric&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#e83e8c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Rendered Natively with JS! 🚀&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This page was generated completely server-side using JavaScript inside Caddy.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;hr&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Current Server Time:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"metric"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%=&lt;/span&gt;&lt;span class="na"&gt;serverTime.toUTCString&lt;/span&gt;&lt;span class="err"&gt;()%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Powered by:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"metric"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%=&lt;/span&gt;&lt;span class="na"&gt;engine&lt;/span&gt;&lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Your IP:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"metric"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%=&lt;/span&gt;&lt;span class="na"&gt;visitorIP&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By declaring &lt;code&gt;&amp;lt;%@Language="JavaScript"%&amp;gt;&lt;/code&gt; at the top, AxonASP knows to evaluate the server-side blocks using its JavaScript engine before sending the final HTML to the client.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Launch the Service Immediately
&lt;/h2&gt;

&lt;p&gt;With your &lt;code&gt;Caddyfile&lt;/code&gt; and your &lt;code&gt;default.asp&lt;/code&gt; page ready, it is time to go live.&lt;/p&gt;

&lt;p&gt;Open your terminal, navigate to the folder containing your &lt;code&gt;Caddyfile&lt;/code&gt;, and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;caddy run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open your browser and navigate to &lt;code&gt;http://localhost:8080&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;You will immediately see your page, dynamically rendered by JavaScript on the server. Because AxonASP integrates deeply with Caddy, it natively respects standard index files (like &lt;code&gt;default.asp&lt;/code&gt;), meaning you don't even need to type the file name in the URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;You just spun up a fully functional server-side JavaScript rendering engine in less than a minute. This setup scales beautifully, natively supports Caddy's automatic HTTPS for production domains, and gives you a rapid, highly performant environment for building the next generation of web services.&lt;/p&gt;

&lt;p&gt;Have you built any dynamic services with Caddy recently? Drop your thoughts in the comments below!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>caddy</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Run a Full JavaScript Website with AxonASP — No Node.js Required</title>
      <dc:creator>Lucas Guimarães</dc:creator>
      <pubDate>Sat, 18 Jul 2026 21:36:45 +0000</pubDate>
      <link>https://dev.to/lucas_guimaraes/run-a-full-javascript-website-with-axonasp-no-nodejs-required-102g</link>
      <guid>https://dev.to/lucas_guimaraes/run-a-full-javascript-website-with-axonasp-no-nodejs-required-102g</guid>
      <description>&lt;p&gt;&lt;strong&gt;AxonASP&lt;/strong&gt; is a high-performance Classic ASP engine written in Go — but here's the twist: it runs JavaScript (JScript) natively on the server side. You get a synchronous, predictable execution model, full ECMAScript 5/6+ support, and zero dependency on Node.js or any third-party JavaScript runtime.&lt;/p&gt;

&lt;p&gt;And yes — you can build an entire production website with it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why AxonASP Changes the Game for Server-Side JS
&lt;/h2&gt;

&lt;p&gt;Most developers associate server-side JavaScript exclusively with Node.js. And Node.js is great — until you're drowning in &lt;code&gt;async/await&lt;/code&gt; chains, &lt;code&gt;package.json&lt;/code&gt; conflicts, and the 47th minor version bump of a dependency that broke your build.&lt;/p&gt;

&lt;p&gt;AxonASP takes a fundamentally different approach.&lt;/p&gt;

&lt;p&gt;Instead of wrapping everything in an event loop and forcing asynchronous patterns everywhere, AxonASP's JavaScript engine executes code &lt;strong&gt;synchronously by default&lt;/strong&gt;. You write your server logic the same way you write your frontend logic — line by line, top to bottom. It compiles through a high-performance AST parser and runs directly on a custom Go-based virtual machine.&lt;/p&gt;

&lt;p&gt;The result? Cleaner code, simpler debugging, and a massive reduction in cognitive overhead.&lt;/p&gt;

&lt;h3&gt;
  
  
  What You Get Out of the Box
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full ES5 + ES6 support&lt;/strong&gt; (classes, arrow functions, template literals, destructuring, proxies, &lt;code&gt;for...of&lt;/code&gt;, &lt;code&gt;Map&lt;/code&gt;, &lt;code&gt;Set&lt;/code&gt;, &lt;code&gt;Symbol&lt;/code&gt;, typed arrays — 37+ modern features documented)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Synchronous execution&lt;/strong&gt; — no callback pyramid, no promise chains for basic I/O&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ASP intrinsic objects&lt;/strong&gt; — &lt;code&gt;Request&lt;/code&gt;, &lt;code&gt;Response&lt;/code&gt;, &lt;code&gt;Session&lt;/code&gt;, &lt;code&gt;Application&lt;/code&gt;, &lt;code&gt;Server&lt;/code&gt; — all accessible directly from your JS code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No &lt;code&gt;npm install&lt;/code&gt; required&lt;/strong&gt; — just write &lt;code&gt;.asp&lt;/code&gt; or &lt;code&gt;.js&lt;/code&gt; files and point the server at them&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI execution&lt;/strong&gt; — run JavaScript files from the command line for automation, batch processing, or testing&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Philosophy: Simplicity Over Complexity
&lt;/h2&gt;

&lt;p&gt;Here's a hard truth: &lt;strong&gt;most web applications don't need 2,000 npm modules.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;They need to read a database, render HTML, handle form submissions, and maybe serve a JSON API. That's it.&lt;/p&gt;

&lt;p&gt;The modern JavaScript ecosystem has convinced people that every project requires a build pipeline, a bundler, a linter, a type checker, and a module graph resolver. But the reality is that a well-structured server-rendered application — where you can see the actual HTML structure of your pages and inject backend logic only where you need it — is often simpler, faster, and more maintainable than a single-page application backed by a microservice mesh.&lt;/p&gt;

&lt;p&gt;With AxonASP, you write plain HTML with embedded server-side JavaScript. The &lt;code&gt;&amp;lt;% %&amp;gt;&lt;/code&gt; delimiters mark exactly where the backend logic lives. You can see the entire page structure in one file. No hidden abstraction layers. No magic.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bridging Frontend and Backend with G3TEMPLATE
&lt;/h2&gt;

&lt;p&gt;One of the hidden gems in the AxonASP ecosystem is the &lt;strong&gt;G3TEMPLATE&lt;/strong&gt; library — a high-performance template rendering engine powered by Go's &lt;code&gt;html/template&lt;/code&gt; underneath.&lt;/p&gt;

&lt;p&gt;Here's why it matters for teams:&lt;/p&gt;

&lt;h3&gt;
  
  
  The Designer-Developer Gap
&lt;/h3&gt;

&lt;p&gt;If you've ever worked on a project where a frontend designer hands off HTML to a backend developer, you know the pain. The designer builds a beautiful page. The developer cuts it apart into templates, sprinkles in logic, and suddenly the design breaks because someone closed a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; in the wrong partial.&lt;/p&gt;

&lt;p&gt;G3TEMPLATE solves this by keeping your template files &lt;strong&gt;pure HTML&lt;/strong&gt; with Go-style template syntax. The designer can open the template file directly in any browser and see exactly what the page will look like. The backend developer binds data through a clean &lt;code&gt;Render(path, data)&lt;/code&gt; API.&lt;/p&gt;

&lt;p&gt;No stepping on each other's toes. No broken layouts.&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="c1"&gt;// Server-side JavaScript using G3TEMPLATE&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;%&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt; &lt;span class="nx"&gt;Language&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;javascript&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;%&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;template&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CreateObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;G3TEMPLATE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;CreateObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Scripting.Dictionary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;My JavaScript-Powered Site&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Lucas&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/views/index.html&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The template file (&lt;code&gt;/views/index.html&lt;/code&gt;) is a plain HTML file that your designer can open, edit, and preview without ever touching the server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;{{.title}}&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Welcome, {{.user}}!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. No template inheritance hierarchies. No custom DSL to learn. Just clean separation of concerns.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step-by-Step: Building a JavaScript Website on AxonASP
&lt;/h2&gt;

&lt;p&gt;Let's walk through creating an actual website. The entire thing, from scratch.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Get AxonASP Running
&lt;/h3&gt;

&lt;p&gt;Clone the repository and build the server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;clone&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://github.com/guimaraeslucas/axonasp.git&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;axonasp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;/build.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives you three executables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;axonasp-http.exe&lt;/code&gt; — standalone HTTP server&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;axonasp-fastcgi.exe&lt;/code&gt; — FastCGI server (for IIS/nginx integration)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;axonasp-cli.exe&lt;/code&gt; — CLI runner for batch scripts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Start the HTTP server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;/axonasp-http.exe&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By default, it serves files from the &lt;code&gt;www/&lt;/code&gt; directory on &lt;code&gt;http://localhost:8801/&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Create Your First JavaScript Page
&lt;/h3&gt;

&lt;p&gt;Create &lt;code&gt;www/index.html&lt;/code&gt; (yes, AxonASP serves static files too) or &lt;code&gt;www/index.asp&lt;/code&gt; for a dynamic page:&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="o"&gt;&amp;lt;%&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt; &lt;span class="nx"&gt;Language&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;javascript&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="nx"&gt;DOCTYPE&lt;/span&gt; &lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt; &lt;span class="nx"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;en&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;head&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt; &lt;span class="nx"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;UTF-8&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;%=&lt;/span&gt; &lt;span class="nx"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;HTMLEncode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pageTitle&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/title&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt; &lt;span class="nx"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;stylesheet&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/css/style.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/head&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;header&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Welcome&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;My&lt;/span&gt; &lt;span class="nx"&gt;JS&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;Powered&lt;/span&gt; &lt;span class="nx"&gt;Site&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;nav&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Home&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/a&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/about.asp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;About&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/a&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/products.asp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Products&lt;/span&gt; &lt;span class="nx"&gt;API&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/a&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/nav&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/header&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;%&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;features&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Server-side JavaScript with ES6 support&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Zero npm dependencies&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Synchronous execution model&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Full ASP intrinsic object access&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;G3TEMPLATE for clean template separation&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;features&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;feature-card&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h3&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Feature&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h3&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;%=&lt;/span&gt; &lt;span class="nx"&gt;features&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;%&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/main&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;footer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Page&lt;/span&gt; &lt;span class="nx"&gt;generated&lt;/span&gt; &lt;span class="nx"&gt;at&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/footer&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/body&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/html&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Build a JSON API
&lt;/h3&gt;

&lt;p&gt;One of my favorite use cases — a REST API endpoint with zero dependencies:&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="o"&gt;&amp;lt;%&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt; &lt;span class="nx"&gt;Language&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;javascript&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;%&lt;/span&gt;
&lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ContentType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Wireless Mouse&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;29.99&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;inStock&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="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Mechanical Keyboard&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;89.99&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;inStock&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="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;USB-C Hub&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;49.99&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;inStock&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;idParam&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;QueryString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&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;idParam&lt;/span&gt; &lt;span class="o"&gt;!==&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="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;idParam&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;found&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&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;products&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;found&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
            &lt;span class="k"&gt;break&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;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;success&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="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;found&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;
    &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;success&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="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;
    &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No Express, no router, no body-parser, no cors middleware. Five lines of setup, then just JavaScript.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Use Modern ES6 Features
&lt;/h3&gt;

&lt;p&gt;Yes, you can use arrow functions, template literals, destructuring, &lt;code&gt;Map&lt;/code&gt;, &lt;code&gt;Set&lt;/code&gt;, &lt;code&gt;for...of&lt;/code&gt;, and even &lt;code&gt;Proxy&lt;/code&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="o"&gt;&amp;lt;%&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt; &lt;span class="nx"&gt;Language&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;javascript&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;%&lt;/span&gt;
&lt;span class="c1"&gt;// Classes&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Product&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nf"&gt;formatted&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; — $&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&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;span class="c1"&gt;// Arrow functions + template literals&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Widget A&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;9.99&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Widget B&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;14.99&lt;/span&gt;&lt;span class="p"&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;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;li&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;formatted&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/li&amp;gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ul&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;%=&lt;/span&gt; &lt;span class="nx"&gt;html&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/ul&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Run from the CLI
&lt;/h3&gt;

&lt;p&gt;Need to automate something? Write a JavaScript file and run it directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;/axonasp-cli.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;scripts/generate-report.js&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;javascript&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your scripts have full access to &lt;code&gt;Response&lt;/code&gt;, &lt;code&gt;Server&lt;/code&gt;, custom libraries (G3JSON, G3FILES, G3CRYPTO, and more), and the &lt;code&gt;console&lt;/code&gt; object for logging. Perfect for scheduled tasks, data transformations, or batch processing.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Full Architecture Picture
&lt;/h2&gt;

&lt;p&gt;Here's what the project structure looks like for a typical AxonASP JS website:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;axonasp/
├── axonasp-http.exe       # HTTP server binary
├── axonasp-cli.exe        # CLI runner binary
├── global.asa             # App/session lifecycle (JS or VBScript)
├── config/
│   └── axonasp.toml       # Server configuration
├── www/                   # Web root
│   ├── index.asp          # JavaScript-powered homepage
│   ├── about.asp
│   ├── css/
│   │   └── style.css
│   ├── js/                # Client-side JS files (static)
│   ├── views/             # G3TEMPLATE template files
│   │   ├── header.html
│   │   ├── footer.html
│   │   └── layout.html
│   └── api/               # REST API endpoints
│       └── products.asp
└── scripts/               # CLI automation scripts
    └── cleanup.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No &lt;code&gt;node_modules/&lt;/code&gt;. No &lt;code&gt;package.json&lt;/code&gt;. No &lt;code&gt;webpack.config.js&lt;/code&gt;. No &lt;code&gt;.babelrc&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Just your code, your templates, and a server that runs them.&lt;/p&gt;




&lt;h2&gt;
  
  
  When Should You Use This?
&lt;/h2&gt;

&lt;p&gt;AxonASP with server-side JavaScript is a strong fit when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You want full-stack JS&lt;/strong&gt; without the Node.js ecosystem overhead&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You're building server-rendered websites&lt;/strong&gt; where clean HTML matters&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You need a simple API layer&lt;/strong&gt; without framework boilerplate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You work with designers&lt;/strong&gt; who need to see and edit HTML templates directly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You value synchronous, predictable code flow&lt;/strong&gt; over async abstractions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You're migrating legacy Classic ASP applications&lt;/strong&gt; and want to modernize gradually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's not a replacement for Node.js in every scenario — if you need WebSockets, streaming, or event-driven microservices, stick with what works. But for the vast majority of web applications — content sites, dashboards, API backends, CMS platforms — this stack is remarkably efficient.&lt;/p&gt;




&lt;h2&gt;
  
  
  Dive Deeper
&lt;/h2&gt;

&lt;p&gt;The official AxonASP documentation has an entire section dedicated to JavaScript support, with detailed pages for every ES6 feature, the G3TEMPLATE library, and the ASP intrinsic objects:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://g3pix.com.br/axonasp/manual/?page=md%2Fjavascript%2Fjscript-support.md" rel="noopener noreferrer"&gt;JavaScript Support in AxonASP&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can also explore the full source code, download binaries for Mac, Linux, FreeBSD and Windows or contribute on GitHub:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/guimaraeslucas/axonasp" rel="noopener noreferrer"&gt;AxonASP on GitHub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have you tried running server-side JavaScript without Node.js? I'd love to hear about your experience in the comments. If you found this useful, follow me for more deep dives into practical, no-nonsense web development.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Modernizando o Classic ASP: Um guia prático para hospedar o AxonASP usando o IIS</title>
      <dc:creator>Lucas Guimarães</dc:creator>
      <pubDate>Fri, 03 Jul 2026 11:00:00 +0000</pubDate>
      <link>https://dev.to/lucas_guimaraes/modernizando-o-classic-asp-um-guia-pratico-para-hospedar-o-axonasp-usando-o-iis-2f9f</link>
      <guid>https://dev.to/lucas_guimaraes/modernizando-o-classic-asp-um-guia-pratico-para-hospedar-o-axonasp-usando-o-iis-2f9f</guid>
      <description>&lt;p&gt;Sejamos honestos: quando a maioria dos desenvolvedores ouve falar em "Classic ASP", logo imaginam servidores Windows legados, registros complexos de objetos COM e uma arquitetura profundamente atrelada ao &lt;code&gt;asp.dll&lt;/code&gt; e ao processo de trabalho do IIS (&lt;code&gt;w3wp.exe&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Mas o código em si — muitas vezes milhares de linhas de lógica de negócios crítica escritas em VBScript ou JavaScript no lado do servidor — ainda cumpre exatamente o seu papel. O problema não é necessariamente a linguagem; é a arquitetura de hospedagem monolítica e envelhecida.&lt;/p&gt;

&lt;p&gt;É aqui que o &lt;strong&gt;AxonASP&lt;/strong&gt; muda o jogo. Construído em Go, ele desvincula completamente o ASP do sistema operacional Windows, executando o código nativamente e reduzindo o uso de memória em modo ocioso para cerca de 18MB.&lt;/p&gt;

&lt;p&gt;No entanto, mudar para esse motor exige uma virada de chave fundamental na forma como você pensa sobre a hospedagem das suas aplicações.&lt;/p&gt;

&lt;h3&gt;
  
  
  A mudança de paradigma: Arquitetura centrada na aplicação
&lt;/h3&gt;

&lt;p&gt;Em relação à arquitetura de hospedagem: o AxonASP não é um substituto direto para o IIS; ele é um ambiente de execução (&lt;em&gt;runtime&lt;/em&gt;) de Classic ASP. Ele opera em uma arquitetura moderna e centrada na aplicação — estruturalmente idêntica à forma como aplicações modernas em .NET Core ou Docker são implantadas.&lt;/p&gt;

&lt;p&gt;Isso significa que todas as suas configurações existentes do IIS continuam totalmente válidas. Para orquestrar o AxonASP adequadamente dentro do IIS, você deve usar o módulo &lt;code&gt;HttpPlatformHandler&lt;/code&gt; v1.2+. Você pode ler mais sobre essa configuração no manual oficial aqui:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://g3pix.com.br/axonasp/manual/?page=md%2Fruntime%2Fiis-support.md" rel="noopener noreferrer"&gt;Manual do AxonASP - Suporte ao IIS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://g3pix.com.br/axonasp/manual/?page=md%2Fruntime%2Fmigrating-from-iis-classic-asp.md" rel="noopener noreferrer"&gt;Manual do AxonASP - Migrando do IIS &amp;amp; Classic ASP para o AxonASP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por exemplo, no arquivo &lt;code&gt;axonasp.toml&lt;/code&gt;, você pode definir o diretório raiz para coincidir com o diretório padrão do seu site no IIS. Isso permite que você sirva seus arquivos estáticos (CSS, JS, imagens) nativamente pelo IIS, enquanto o AxonASP cuida da lógica da aplicação e das requisições dinâmicas &lt;code&gt;.asp&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A ideia principal é universalizar e implementar práticas modernas de administração para o ASP, permitindo que ele rode em qualquer plataforma ou servidor. Dessa forma, se um site sair do controle ou esgotar a memória, ele não derrubará as outras aplicações nem o servidor principal, porque cada aplicação roda sua própria instância isolada e distinta do &lt;code&gt;axonasp-http.exe&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Essa estrutura também permite que você rode o ASP dentro de containers Docker, reduzindo significativamente os custos associados a servidores Windows. Pode parecer um pouco complexo no início, mas com certeza vale a pena migrar para essa abordagem — ela é mais segura, altamente distribuível, mais barata e, no fim das contas, mais fácil de gerenciar.&lt;/p&gt;




&lt;h3&gt;
  
  
  Passo a passo: Implementando o AxonASP no IIS
&lt;/h3&gt;

&lt;p&gt;Como o IIS gerencia o FastCGI via &lt;em&gt;named pipes&lt;/em&gt; do Windows (que são incompatíveis com os protocolos FastCGI padrão baseados em TCP), não podemos simplesmente plugar o AxonASP como um módulo legado. Em vez disso, o IIS agirá como um proxy reverso, ficando na borda da sua rede (Portas 80/443) e encaminhando as requisições dinâmicas para instâncias isoladas do AxonASP que rodam em portas locais de loopback (ex: &lt;code&gt;8801&lt;/code&gt;, &lt;code&gt;8802&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Veja como configurar:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Pré-requisitos
&lt;/h4&gt;

&lt;p&gt;Você precisará do &lt;strong&gt;IIS HttpPlatformHandler v1.2+&lt;/strong&gt;. Este é o exato mesmo módulo que a Microsoft recomenda para gerenciar aplicações Python ou Java atrás do IIS. Ele cuida do gerenciamento de processos, atribui portas dinamicamente e garante que o executável do AxonASP continue rodando.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Diretórios e permissões
&lt;/h4&gt;

&lt;p&gt;Digamos que o seu site esteja localizado em &lt;code&gt;C:\Sites\App1\&lt;/code&gt;.&lt;br&gt;
Dentro desta pasta, você deve ter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O binário &lt;code&gt;axonasp-http.exe&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;O arquivo de configuração &lt;code&gt;axonasp.toml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;O script de inicialização &lt;code&gt;iis-http.cmd&lt;/code&gt; (fornecido com o AxonASP).&lt;/li&gt;
&lt;li&gt;A sua pasta &lt;code&gt;www&lt;/code&gt; contendo os arquivos &lt;code&gt;.asp&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Passo crucial:&lt;/strong&gt; A identidade de usuário do IIS (geralmente &lt;code&gt;IIS_IUSRS&lt;/code&gt; ou a &lt;code&gt;ApplicationPoolIdentity&lt;/code&gt; específica) deve ter permissões de leitura e escrita nesta pasta. O AxonASP precisa gravar em seu diretório temporário (&lt;code&gt;temp&lt;/code&gt;) e executar os binários. Se faltarem permissões, o IIS falhará silenciosamente e retornará um erro &lt;em&gt;500 Internal Server Error&lt;/em&gt;.&lt;/p&gt;
&lt;h4&gt;
  
  
  3. A configuração do &lt;code&gt;web.config&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Insira um arquivo &lt;code&gt;web.config&lt;/code&gt; na raiz do seu site no IIS. Isso instrui o IIS a interromper a tentativa de processar o código nativamente e, em vez disso, passá-lo para o processo do AxonASP.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;system.webServer&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;handlers&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;add&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"httpPlatformHandler"&lt;/span&gt; &lt;span class="na"&gt;path=&lt;/span&gt;&lt;span class="s"&gt;"*"&lt;/span&gt; &lt;span class="na"&gt;verb=&lt;/span&gt;&lt;span class="s"&gt;"*"&lt;/span&gt; &lt;span class="na"&gt;modules=&lt;/span&gt;&lt;span class="s"&gt;"httpPlatformHandler"&lt;/span&gt; &lt;span class="na"&gt;resourceType=&lt;/span&gt;&lt;span class="s"&gt;"Unspecified"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/handlers&amp;gt;&lt;/span&gt;

        &lt;span class="nt"&gt;&amp;lt;httpPlatform&lt;/span&gt; &lt;span class="na"&gt;processPath=&lt;/span&gt;&lt;span class="s"&gt;"C:\Sites\App1\iis-http.cmd"&lt;/span&gt;
                      &lt;span class="na"&gt;arguments=&lt;/span&gt;&lt;span class="s"&gt;"--server.server_port %HTTP_PLATFORM_PORT%"&lt;/span&gt;
                      &lt;span class="na"&gt;stdoutLogEnabled=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
                      &lt;span class="na"&gt;stdoutLogFile=&lt;/span&gt;&lt;span class="s"&gt;"C:\Sites\App1\temp\axonasp.log"&lt;/span&gt;
                      &lt;span class="na"&gt;startupTimeLimit=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt;
                      &lt;span class="na"&gt;processesPerApplication=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;environmentVariables&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;environmentVariable&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"SERVER_PORT"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"%HTTP_PLATFORM_PORT%"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/environmentVariables&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/httpPlatform&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/system.webServer&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;

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

&lt;/div&gt;



&lt;h4&gt;
  
  
  Entendendo a mecânica da configuração
&lt;/h4&gt;

&lt;p&gt;Existem dois detalhes críticos no XML acima que ditam como a sua aplicação vai se comportar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;%HTTP_PLATFORM_PORT%&lt;/code&gt;&lt;/strong&gt;: Você não precisa atribuir manualmente a porta &lt;code&gt;8801&lt;/code&gt; para o Site A e &lt;code&gt;8802&lt;/code&gt; para o Site B. O IIS gera uma porta disponível de forma dinâmica, injeta-a na variável de ambiente, inicializa o processo do AxonASP e direciona o tráfego para ela automaticamente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;processesPerApplication="1"&lt;/code&gt;&lt;/strong&gt;: Não altere este valor para um número maior. O Classic ASP depende muito de estado em memória (variáveis de &lt;code&gt;Session&lt;/code&gt; e o ciclo de vida do &lt;code&gt;global.asa&lt;/code&gt;). Se o IIS gerar múltiplos processos de trabalho (&lt;em&gt;worker processes&lt;/em&gt;) para um único site, as sessões dos usuários ficarão fragmentadas entre eles. O AxonASP gerencia a concorrência internamente por meio de goroutines; ele precisa de apenas um processo do sistema operacional por site.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Por que esta arquitetura é o futuro do ASP
&lt;/h3&gt;

&lt;p&gt;Ao desacoplar o motor de execução do sistema operacional, você não fica mais preso à infraestrutura legada do Windows.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A era pós-COM:&lt;/strong&gt; O AxonASP intercepta chamadas de &lt;code&gt;Server.CreateObject("ProgID")&lt;/code&gt; nativamente. Em vez de depender do frágil Registro do Windows para carregar uma DLL antiga, o AxonASP mapeia essa chamada para um código GoLang moderno de alta velocidade pré-compilado dentro da VM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infraestrutura como código:&lt;/strong&gt; Suas regras de roteamento, configurações e variáveis de ambiente agora são arquivos de texto simples (&lt;code&gt;.toml&lt;/code&gt; e &lt;code&gt;.config&lt;/code&gt;) que acompanham o repositório da sua aplicação.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;O horizonte com Docker:&lt;/strong&gt; Depois de migrar com sucesso um site para este modelo de proxy no IIS, migrar esse mesmo site para um container Docker em Linux atrás do Nginx ou Caddy exigirá praticamente zero alterações na lógica da aplicação.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;O Classic ASP pode ter décadas de idade, mas com um motor construído em Go e uma arquitetura que reflete os microsserviços modernos, não há razão para que ele não possa rodar na vanguarda da infraestrutura web atual.&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>iis</category>
      <category>asp</category>
      <category>microsoft</category>
    </item>
    <item>
      <title>🛑 Why You Shouldn't Migrate from Classic ASP to ASP.NET (If You Have AxonASP)</title>
      <dc:creator>Lucas Guimarães</dc:creator>
      <pubDate>Thu, 02 Jul 2026 14:31:49 +0000</pubDate>
      <link>https://dev.to/lucas_guimaraes/why-you-shouldnt-migrate-from-classic-asp-to-aspnet-if-you-have-axonasp-1i5i</link>
      <guid>https://dev.to/lucas_guimaraes/why-you-shouldnt-migrate-from-classic-asp-to-aspnet-if-you-have-axonasp-1i5i</guid>
      <description>&lt;p&gt;For over two decades, the standard advice for any team maintaining a Classic ASP application has been identical: &lt;em&gt;"You need to migrate to ASP.NET."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The arguments are always the same. Classic ASP is dated, VBScript is a relic, and modern development requires modern frameworks. For a long time, rewriting your entire application in ASP.NET seemed like the only logical path forward, despite the astronomical costs and the high risk of breaking core business logic.&lt;/p&gt;

&lt;p&gt;But what if the industry's default advice is no longer the best option?&lt;/p&gt;

&lt;p&gt;Let’s be clear: ASP.NET is an incredibly powerful, feature-rich ecosystem. We aren't here to bash it. But when it comes to &lt;strong&gt;modernizing existing legacy applications&lt;/strong&gt;, forcing a migration might actually do more harm than good.&lt;/p&gt;

&lt;p&gt;Here is why staying with Classic ASP—powered by &lt;strong&gt;AxonASP&lt;/strong&gt;—is not only viable but often the smarter engineering choice for the modern web.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 The Memory Tax of ASP.NET
&lt;/h2&gt;

&lt;p&gt;When you migrate a lightweight, procedural Classic ASP application to the ASP.NET ecosystem, you are fundamentally changing the architectural footprint of your software.&lt;/p&gt;

&lt;p&gt;ASP.NET is robust, but that robustness comes with a significant overhead. The framework is notorious for its intensive memory usage, spinning up complex application pools, managing heavy object lifecycles, and relying on a massive runtime environment. If your application currently serves dynamic pages with minimal server strain, moving to ASP.NET can drastically inflate your infrastructure costs and hardware requirements. You end up paying for a massive enterprise toolset when all you needed was to render a page and query a database.&lt;/p&gt;

&lt;p&gt;Because AxonASP is built under the hood as a cross-platform runtime server written in &lt;strong&gt;GoLang&lt;/strong&gt;, it turns this dynamic on its head. You get the blistering speed, concurrency, and minimal memory footprint of Go, while executing your existing legacy code. It sips memory where heavy frameworks gulp it.&lt;/p&gt;

&lt;h2&gt;
  
  
  📦 "But What About Modern Libraries?"
&lt;/h2&gt;

&lt;p&gt;The strongest argument against Classic ASP has always been the ecosystem. Developers migrate because they want access to modern cryptographic functions, API integrations, and JSON handling, which native VBScript struggles to provide.&lt;/p&gt;

&lt;p&gt;This is where the paradigm shifts. AxonASP bridges this exact gap by exposing modern libraries directly to the legacy environment. You don't need a heavy framework to parse modern data structures or communicate with RESTful microservices. The runtime injects the capabilities you expect from a 2026 tech stack right into your existing pages. You retain the simplicity of your original architecture without being cut off from modern web standards.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤝 VBScript + JavaScript: The Ultimate Polyglot Harmony
&lt;/h2&gt;

&lt;p&gt;Perhaps the most daunting part of any migration is the human element. Maybe nobody wants to write or maintain thousands of lines of VBScript anymore, and finding developers who can is getting harder every day.&lt;/p&gt;

&lt;p&gt;But what if you didn't have to choose between rewriting it all or forcing new devs to learn VBScript?&lt;/p&gt;

&lt;p&gt;AxonASP allows VBScript and JavaScript to run simultaneously &lt;strong&gt;on the exact same page&lt;/strong&gt;. This is the secret weapon for modernizing without migrating:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Keep the Foundation:&lt;/strong&gt; Leave your complex, battle-tested VBScript business rules and database queries exactly as they are. They work. Don't touch them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write the Future in JS:&lt;/strong&gt; When a new requirement comes in, your new hires can simply open a &lt;code&gt;&amp;lt;script runat="server" language="javascript"&amp;gt;&lt;/code&gt; tag and write the new features using the modern JavaScript syntax they already know.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By combining VBScript and JavaScript seamlessly, you instantly modernize the developer experience. Your team can utilize arrays, modern loops, and JS logic while interacting directly with the legacy state.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Stop Migrating, Start Evolving
&lt;/h2&gt;

&lt;p&gt;Rewriting a system to ASP.NET just to escape VBScript is like knocking down a structurally sound house because you don't like the wallpaper.&lt;/p&gt;

&lt;p&gt;By leveraging a lightweight GoLang-powered runtime, bringing in modern library support, and mixing JS with VBScript, AxonASP proves that Classic ASP still belongs in the modern world. You bypass the massive memory overhead of heavy frameworks, save thousands of hours of development time, and eliminate the risk of a "big bang" rewrite.&lt;/p&gt;

&lt;p&gt;Sometimes, the best migration strategy is realizing you don't need to migrate at all.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>legacy</category>
      <category>asp</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Rodando ASP Classic no Linux, macOS, BSD e Windows em 2026</title>
      <dc:creator>Lucas Guimarães</dc:creator>
      <pubDate>Thu, 02 Jul 2026 11:00:00 +0000</pubDate>
      <link>https://dev.to/lucas_guimaraes/rodando-asp-classic-no-linux-macos-bsd-e-windows-em-2026-11dc</link>
      <guid>https://dev.to/lucas_guimaraes/rodando-asp-classic-no-linux-macos-bsd-e-windows-em-2026-11dc</guid>
      <description>&lt;p&gt;Se você já se pegou pesquisando como &lt;strong&gt;rodar ASP no Linux&lt;/strong&gt; ou tentando descobrir como colocar no Docker uma aplicação antiga dependente do IIS, você já conhece o tamanho do desafio. Por anos, o Classic ASP e o VBScript ficaram totalmente presos ao ecossistema Windows. Tudo bem que temos o ASP.NET, mas mais de centenas de megabytes de memória e de executáveis para rodar uma simples página? Não, obrigado. &lt;/p&gt;

&lt;p&gt;Seja para a manutenção de um sistema corporativo legado ou para buscar um motor de scripts leve no lado do servidor para um novo projeto, migrar para fora do Windows Server historicamente significava uma reescrita completa do código.&lt;/p&gt;

&lt;p&gt;É aí que entra o &lt;strong&gt;AxonASP&lt;/strong&gt;, um runtime de código aberto e alta performance escrito em GoLang que permite &lt;strong&gt;rodar o ASP Classic nativamente no Linux, macOS, BSD e Windows&lt;/strong&gt; e o melhor, com suporte a VBScript mas também a JavaScript.&lt;/p&gt;

&lt;p&gt;Mas o AxonASP não é apenas um emulador para códigos antigos — ele é um motor modernizado e projetado para o futuro do desenvolvimento web. Abaixo, mostramos uma visão técnica de como ele funciona, o que ele suporta e por que ele pode ser a ferramenta certa para a sua próxima mudança arquitetônica.&lt;/p&gt;

&lt;h2&gt;
  
  
  Uma arquitetura moderna para uma stack clássica
&lt;/h2&gt;

&lt;p&gt;Em sua essência, o AxonASP foi construído com foco em velocidade, baixo consumo de memória e infraestrutura moderna. Ele conta com uma arquitetura de Máquina Virtual com alocação zero (&lt;em&gt;zero-allocation&lt;/em&gt;) que processa requisições de forma incrivelmente rápida.&lt;/p&gt;

&lt;p&gt;Quando você decide rodar ASP Classic no Linux usando o AxonASP, você não está executando uma camada de compatibilidade pesada. O motor compila o VBScript por meio de um compilador de passagem única (&lt;em&gt;single-pass&lt;/em&gt;), emitindo bytecode diretamente para uma VM baseada em pilha. Isso resulta em velocidades extremas de processamento com um consumo mínimo de memória. Uma configuração padrão consegue lidar com 2000 requisições por minuto consumindo apenas cerca de 100MB de RAM. Uma API pura em VBScript rodando no AxonASP consome apenas 17MB em modo ocioso (em comparação com os 30MB do Node.js).&lt;/p&gt;

&lt;h3&gt;
  
  
  Flexibilidade de implantação: Do Docker ao WASM
&lt;/h3&gt;

&lt;p&gt;O DevOps moderno exige flexibilidade. O AxonASP foi desenvolvido para se encaixar em pipelines de CI/CD atuais sem esforço, oferecendo múltiplas estratégias de implantação prontas para uso:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Servidor Proxy Autônomo:&lt;/strong&gt; Rode diretamente com seu servidor HTTP embutido. Trazemos o conceito de aplicações para seu desenvolvimento, você não depende mais do servidor. Faça o envio do pacote do AxonASP, redirecione seu servidor via proxy para o endereço local e tudo funciona como deve.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastCGI:&lt;/strong&gt; Integre perfeitamente com Nginx ou Apache (&lt;code&gt;axonasp-fastcgi&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker:&lt;/strong&gt; "Conteinerize" suas aplicações Classic ASP nativamente para Kubernetes ou Docker Swarm.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interface de Linha de Comando (CLI):&lt;/strong&gt; Execute scripts ASP diretamente do seu terminal. E quer um detalhe? Você pode programar e até executar scripts Javascript podendo administrar seu sistema sem grandes complicações. Faça a manutenção do Linux ou do Windows usando a suíte do AxonASP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebAssembly (WASM):&lt;/strong&gt; Você pode até compilar e rodar VBScript de alta performance diretamente no navegador.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Além do VBScript: Suporte de primeira classe para JavaScript (ES6+)
&lt;/h2&gt;

&lt;p&gt;Um dos recursos mais poderosos do AxonASP é o seu motor JavaScript. Ao contrário dos ambientes ASP tradicionais que tinham um suporte limitado ao JScript, o AxonASP traz suporte totalmente compatível com o ECMAScript 6+.&lt;/p&gt;

&lt;p&gt;E o melhor de tudo: &lt;strong&gt;você pode misturar VBScript e JavaScript na mesmíssima aplicação.&lt;/strong&gt; Isso muda completamente o jogo na hora de modernizar sistemas. Em vez de uma reescrita do tipo "arrancar e substituir" — que é cara e de alto risco —, você pode manter sua lógica de negócios principal em VBScript rodando perfeitamente enquanto escreve novos módulos, integrações de API e utilitários em JavaScript moderno. Você pode organizar seu código JS facilmente usando a sintaxe de módulos CommonJS/ES6 diretamente ao lado dos seus arquivos &lt;code&gt;.asp&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Como o motor JavaScript utiliza um modelo de execução direta baseado em AST (em vez de forçar um paradigma baseado em Promises para cada operação simples), ele é extremamente eficiente em termos de memória. Uma API pura em JS rodando no AxonASP consome cerca de ~18MB de memória em modo ocioso.&lt;/p&gt;

&lt;h2&gt;
  
  
  Feito para a era da IA: O servidor MCP
&lt;/h2&gt;

&lt;p&gt;Desenvolver em 2026 exige ferramentas modernas. O AxonASP já vem integrado com um &lt;strong&gt;servidor MCP (Model Context Protocol)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Isso permite que agentes de programação baseados em IA e IDEs alimentadas por LLMs (como Cursor ou Claude) se conectem diretamente ao seu ambiente de execução. A IA consegue analisar o ambiente do seu servidor, entender as bibliotecas nativas &lt;code&gt;G3&lt;/code&gt; disponíveis (como &lt;code&gt;G3JSON&lt;/code&gt;, &lt;code&gt;G3DB&lt;/code&gt; e &lt;code&gt;G3CRYPTO&lt;/code&gt;) e criar ou depurar páginas ASP de forma autônoma.&lt;/p&gt;

&lt;p&gt;Ele também traz uma suíte de testes completa (&lt;strong&gt;testsuite&lt;/strong&gt;) para garantir que sua base de código permaneça estável à medida que você avança.&lt;/p&gt;

&lt;h2&gt;
  
  
  Não apenas para legados: Construindo o futuro com o AxonLive
&lt;/h2&gt;

&lt;p&gt;Embora o AxonASP seja a solução perfeita para rodar ASP Classic no Linux ou Mac, ele também serve como um framework para a construção de novas aplicações modernas.&lt;/p&gt;

&lt;p&gt;O motor inclui o &lt;strong&gt;AxonLive&lt;/strong&gt;, um framework de componentes reativos de alta performance integrado diretamente na VM. Se você já tem familiaridade com ferramentas como HTMX, Livewire ou Blazor, o AxonLive oferece um paradigma semelhante, mas nativo no ASP.&lt;/p&gt;

&lt;p&gt;Com o AxonLive, as interações da interface do usuário (cliques, formulários, temporizadores) são enviadas ao servidor de forma assíncrona. Toda a lógica de negócios e validação acontecem de forma segura no backend, e o servidor responde com patches JSON direcionados que atualizam o DOM de forma limpa — sem exigir recarregamentos completos da página. O cliente age simplesmente como um terminal leve de renderização, entregando interatividade de Single Page Application (SPA) com a performance bruta do servidor direto no metal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como começar
&lt;/h2&gt;

&lt;p&gt;Você pode fazer o download no repositório dos releases, que já conta com as versões empacotadas para sistemas baseados em Debian, RedHat, Alpine e Windows (versão ZIP e com instalador), essa é a forma mais fácil e direta.&lt;/p&gt;

&lt;p&gt;Agora por ser escrito em Go, se você quiser compilar a partir do código-fonte (requer GoLang 1.26+), basta utilizar os scripts de compilação inclusos:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linux / macOS:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./build.sh &lt;span class="nt"&gt;--platform&lt;/span&gt; &lt;span class="s2"&gt;"linux"&lt;/span&gt; &lt;span class="nt"&gt;--architecture&lt;/span&gt; &lt;span class="s2"&gt;"amd64"&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\build.ps1&lt;/span&gt;&lt;span class="w"&gt;

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

&lt;/div&gt;



&lt;p&gt;O AxonASP também vem acompanhado de mais de 60 bibliotecas nativas (manipulação de JSON, conectores de banco de dados para PostgreSQL/MySQL/Oracle, SMTP, processamento de imagem e pacotes de compressão), o que significa que você pode construir aplicações corporativas robustas com zero overhead e sem depender de DLLs de terceiros. E distribuir é simples, apenas faça o deploy do executável, da pasta de configuração e do diretório ./www/. Pronto.&lt;/p&gt;

&lt;h3&gt;
  
  
  Junte-se à comunidade Open Source
&lt;/h3&gt;

&lt;p&gt;O AxonASP é orgulhosamente de código aberto. Se você é um desenvolvedor querendo libertar suas aplicações legadas do IIS, ou se quer explorar um motor server-side altamente eficiente que une a simplicidade do ASP com recursos modernos da web, conheça o projeto.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repositório no GitHub:&lt;/strong&gt; &lt;a href="https://github.com/guimaraeslucas/axonasp" rel="noopener noreferrer"&gt;https://github.com/guimaraeslucas/axonasp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual Oficial &amp;amp; Documentação:&lt;/strong&gt; &lt;a href="https://g3pix.com.br/axonasp/manual/" rel="noopener noreferrer"&gt;https://g3pix.com.br/axonasp/manual/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Playground &amp;amp; Exemplos Online:&lt;/strong&gt; Explore páginas rodando nativamente no AxonASP 2.2 e teste nosso Playground em WASM em &lt;a href="https://g3pix.com.br/axonasp/wasm/" rel="noopener noreferrer"&gt;https://g3pix.com.br/axonasp/wasm/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Não deixe que a infraestrutura legada segure o seu código. Conteinerize, rode no Linux, misture com JavaScript moderno e comece a construir.&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>webdev</category>
      <category>linux</category>
      <category>asp</category>
    </item>
    <item>
      <title>Como rodar Classic ASP no Linux: Um guia passo a passo para instalar o AxonASP no Ubuntu ou Debian</title>
      <dc:creator>Lucas Guimarães</dc:creator>
      <pubDate>Wed, 01 Jul 2026 11:00:00 +0000</pubDate>
      <link>https://dev.to/lucas_guimaraes/como-rodar-classic-asp-no-linux-um-guia-passo-a-passo-para-instalar-o-axonasp-no-ubuntu-ou-debian-2dna</link>
      <guid>https://dev.to/lucas_guimaraes/como-rodar-classic-asp-no-linux-um-guia-passo-a-passo-para-instalar-o-axonasp-no-ubuntu-ou-debian-2dna</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introdução&lt;/strong&gt;&lt;br&gt;
Hospedar aplicações Classic ASP (Active Server Pages) tradicionalmente significava estar acorrentado ao Windows Server e ao IIS. Para desenvolvedores que dão manutenção em aplicações legadas ou que buscam migrar sistemas VBScript antigos para uma infraestrutura moderna e de melhor custo-benefício, encontrar uma alternativa nativa para Linux sempre foi um grande desafio. E para nós no Brasil mais ainda, frente aos altos valores de licenciamento do Windows Server.&lt;/p&gt;

&lt;p&gt;É aí que entra o &lt;strong&gt;AxonASP&lt;/strong&gt;, um ambiente de execução (&lt;em&gt;runtime&lt;/em&gt;) de código aberto e multiplataforma construído em GoLang. Ele foi projetado especificamente para hospedar aplicações Classic ASP nativamente em sistemas modernos como Linux, BSD e macOS. Em vez de depender de máquinas virtuais pesadas, emuladores ou gambiarras complexas, o AxonASP oferece um ambiente enxuto para rodar seus arquivos VBScript/JavaScript diretamente.&lt;/p&gt;

&lt;p&gt;Neste tutorial, vamos passar pelo processo de instalação do runtime AxonASP em um servidor Ubuntu ou Debian usando o pacote &lt;code&gt;.deb&lt;/code&gt; pré-compilado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pré-requisitos&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Um servidor rodando uma distribuição Linux baseada em Ubuntu ou Debian.&lt;/li&gt;
&lt;li&gt;Acesso à linha de comando com privilégios de &lt;code&gt;sudo&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;wget&lt;/code&gt; ou &lt;code&gt;curl&lt;/code&gt; instalado para baixar o pacote.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Passo 1: Baixar o pacote de codificação&lt;/strong&gt;&lt;br&gt;
A maneira mais fácil de instalar o AxonASP em sistemas baseados em Debian é através dos pacotes &lt;code&gt;.deb&lt;/code&gt; oficiais disponibilizados no repositório do projeto no GitHub.&lt;/p&gt;

&lt;p&gt;Abra o seu terminal e use o &lt;code&gt;wget&lt;/code&gt; para baixar a versão desejada. &lt;em&gt;(Nota: A URL abaixo usa a versão 2.1.7 como exemplo. Sempre verifique o repositório para obter a versão mais recente).&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://github.com/guimaraeslucas/axonasp/releases/download/v2.2.8/axonasp_2.2.8_amd64.deb

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Passo 2: Instalar o pacote `.deb&lt;/strong&gt;&lt;code&gt;&lt;br&gt;
Assim que o download for concluído, use o comando &lt;/code&gt;dpkg` para instalar o pacote no seu sistema.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dpkg &lt;span class="nt"&gt;-i&lt;/span&gt; axonasp_2.2.8_amd64.deb

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

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Dica: Se você encontrar qualquer erro de dependência durante a instalação, basta rodar &lt;code&gt;sudo apt-get install -f&lt;/code&gt; para resolvê-los facilmente.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Passo 3: Entender a estrutura de diretórios&lt;/strong&gt;&lt;br&gt;
Após o sucesso da instalação, o runtime é descompactado de forma organizada no diretório &lt;code&gt;/opt/axonasp/&lt;/code&gt;. É útil conhecer os componentes principais incluídos nesse caminho:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/opt/axonasp/&lt;/code&gt; - O diretório principal da instalação.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/opt/axonasp/axonasp-http&lt;/code&gt; - O binário do servidor web HTTP autônomo, perfeito para implantações rápidas, testes ou desenvolvimento.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/opt/axonasp/axonasp-fastcgi&lt;/code&gt; - O binário do servidor de aplicação FastCGI, ideal para ambientes de produção ao integrá-lo com proxies reversos como Nginx ou Apache.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Passo 4: Instalar e ativar o serviço em segundo plano&lt;/strong&gt;&lt;br&gt;
Para garantir que o runtime do AxonASP rode continuamente e inicialize de forma automática sempre que o seu servidor for reiniciado, você precisa configurá-lo como um serviço do systemd. O pacote de instalação inclui um script em bash bem prático para automatizar exatamente esse processo.&lt;/p&gt;

&lt;p&gt;Navegue até o diretório de instalação e execute o script de instalação do serviço:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /opt/axonasp
&lt;span class="nb"&gt;sudo &lt;/span&gt;bash install-service.sh

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

&lt;/div&gt;



&lt;p&gt;Em seguida, inicialize o serviço e ative-o para que ele persista após as reinicializações do sistema:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start axonasp
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;axonasp

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Passo 5: Verificar a instalação&lt;/strong&gt;&lt;br&gt;
Análise se está tudo rodando perfeitamente checando o status do serviço com o systemctl:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status axonasp

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

&lt;/div&gt;



&lt;p&gt;Você deverá ver uma saída indicando que o serviço está "active (running)" (ativo/em execução). A partir de agora, seu servidor Linux está oficialmente pronto para processar arquivos &lt;code&gt;.asp&lt;/code&gt; e executar VBScript/JavaScript nativamente!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;br&gt;
Rodar Classic ASP não significa que sua infraestrutura precisa ficar presa para sempre a sistemas operacionais antigos e que o sistema precise ser recriado do zero. Ao utilizar um runtime moderno como o AxonASP, você consegue dar uma nova vida a aplicações web antigas, aproveitando a estabilidade, a segurança e a performance dos ambientes Linux. E criar aplicações compatíveis com o ambiente moderno Web.&lt;/p&gt;

&lt;p&gt;Para configurações mais avançadas — incluindo a definição do Nginx como proxy reverso, configuração de hosts virtuais ou exploração da implementação FastCGI — confira a &lt;a href="https://g3pix.com.br/axonasp/manual/?page=md%2Fruntime%2Flinux-packages.md" rel="noopener noreferrer"&gt;documentação oficial do AxonASP&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>braziliandevs</category>
      <category>ubuntu</category>
      <category>asp</category>
    </item>
    <item>
      <title>Além da IA: Por que a colaboração humana é o verdadeiro motor do Open Source</title>
      <dc:creator>Lucas Guimarães</dc:creator>
      <pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/lucas_guimaraes/alem-da-ia-por-que-a-colaboracao-humana-e-o-verdadeiro-motor-do-open-source-504h</link>
      <guid>https://dev.to/lucas_guimaraes/alem-da-ia-por-que-a-colaboracao-humana-e-o-verdadeiro-motor-do-open-source-504h</guid>
      <description>&lt;p&gt;A narrativa atual da tecnologia está fortemente inclinada para a automação. Com agentes de IA escrevendo &lt;em&gt;boilerplate&lt;/em&gt;, gerando componentes e até estruturando projetos inteiros, é fácil olhar para o futuro do desenvolvimento de software e assumir que o elemento humano está diminuindo.&lt;/p&gt;

&lt;p&gt;Mas se você mantém ou contribui ativamente para um projeto &lt;em&gt;open source&lt;/em&gt;, sabe que a realidade é bem diferente. A IA pode escrever código, mas não consegue validá-lo contextualmente contra décadas de &lt;em&gt;edge cases&lt;/em&gt; obscuros. Ela não sabe dizer &lt;em&gt;por que&lt;/em&gt; uma regra de negócio específica falha em produção.&lt;/p&gt;

&lt;p&gt;Mais importante ainda: a IA não constrói comunidade. A evolução de um software robusto ainda depende inteiramente de pessoas colaborando, quebrando código, reportando bugs e validando se o código realmente funciona no mundo real.&lt;/p&gt;

&lt;p&gt;Para ver isso na prática, precisamos olhar para projetos que tentam fechar lacunas geracionais gigantescas na tecnologia. Um exemplo perfeito disso é o &lt;strong&gt;&lt;a href="https://github.com/guimaraeslucas/axonasp" rel="noopener noreferrer"&gt;AxonASP&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Filosofia do AxonASP: Modernizando o Legado
&lt;/h3&gt;

&lt;p&gt;Por muito tempo, o ASP Clássico e o VBScript foram considerados presos a um modelo de servidor obsoleto — amarrados ao IIS e deixados para trás pelas práticas modernas de &lt;em&gt;deploy&lt;/em&gt;. O AxonASP muda esse cenário. É um &lt;em&gt;runtime open source&lt;/em&gt; e &lt;em&gt;cross-platform&lt;/em&gt; que trata o ASP Clássico como uma &lt;em&gt;Aplicação&lt;/em&gt; moderna, em vez de uma relíquia do passado. Ele traz o VBScript, o ASP e, principalmente, o suporte ao &lt;strong&gt;JavaScript Síncrono&lt;/strong&gt; para o futuro.&lt;/p&gt;

&lt;p&gt;Construir um &lt;em&gt;runtime&lt;/em&gt; que lida com código legado enquanto opera em um ecossistema moderno e multiplataforma não é algo que você consegue simplesmente pedindo para um LLM. Exige um ciclo de feedback agressivo.&lt;/p&gt;

&lt;p&gt;O AxonASP está em franca evolução e apresenta altíssima compatibilidade com o ASP Clássico. Mas essa compatibilidade não é mágica — ela é o resultado direto de usuários pegando seus scripts legados de 15 a 20 anos atrás, rodando no motor, vendo onde falham e reportando exatamente o que aconteceu. Cada &lt;em&gt;issue&lt;/em&gt; aberta e cada bug reportado por um desenvolvedor testando seu código do mundo real é o que fortalece a plataforma.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Métrica Silenciosa do Open Source: Apoio Financeiro
&lt;/h3&gt;

&lt;p&gt;Falamos muito sobre &lt;em&gt;pull requests&lt;/em&gt; e &lt;em&gt;issue tracking&lt;/em&gt;, mas há outro pilar da colaboração humana sobre o qual costumamos falar baixo: o suporte financeiro.&lt;/p&gt;

&lt;p&gt;Mantenedores de projetos abertos são desenvolvedores com contas a pagar. Quando uma comunidade apoia financeiramente um projeto, ele deixa de ser um hobby de fim de semana e passa a ter foco dedicado. Contribuições monetárias compram o tempo de foco profundo necessário para resolver desafios arquitetônicos complexos que PRs casuais raramente resolvem.&lt;/p&gt;

&lt;p&gt;Neste mês, por exemplo, o aporte financeiro da comunidade permitiu que a equipe do AxonASP dedicasse horas sérias para expandir significativamente a compatibilidade com bibliotecas legadas. Graças a esse apoio direto, o projeto conseguiu entregar uma atualização técnica massiva:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A Biblioteca &lt;code&gt;G3DATE&lt;/code&gt;:&lt;/strong&gt; Uma nova biblioteca nativa que finalmente permite ao AxonASP calcular diferenças entre datas e lidar com &lt;em&gt;timezones&lt;/em&gt; de forma fluida.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implementação de STA (Single-Threaded Apartment):&lt;/strong&gt; Um &lt;em&gt;upgrade&lt;/em&gt; arquitetônico vital que garante muito mais estabilidade e segurança ao servidor durante a execução de componentes OLE legados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Objeto Math Aprimorado:&lt;/strong&gt; Lançado com métodos e propriedades adicionais para lidar nativamente com cálculos mais complexos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Motor JScript Fortalecido:&lt;/strong&gt; Adição de testes abrangentes para a funcionalidade do JScript, cobrindo explicitamente &lt;code&gt;Date&lt;/code&gt;, &lt;code&gt;typeof&lt;/code&gt; e os notórios comportamentos de coerção de tipos (&lt;em&gt;coercion&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Melhoria na Manipulação de Tipos:&lt;/strong&gt; Uma implementação fortemente refinada do &lt;code&gt;Object.prototype.toString&lt;/code&gt; para lidar adequadamente com Arrays e outros tipos nativos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nada disso seria possível sem uma abordagem de três frentes para a colaboração: desenvolvedores enviando código, usuários caçando bugs implacavelmente e apoiadores fornecendo o fôlego financeiro para que o trabalho pesado seja feito.&lt;/p&gt;

&lt;h3&gt;
  
  
  O Toque Humano Segue Invicto
&lt;/h3&gt;

&lt;p&gt;A IA é uma ferramenta fantástica para acelerar a sintaxe, mas o &lt;em&gt;open source&lt;/em&gt; é fundamentalmente um ecossistema humano. Ele se baseia no atrito compartilhado por desenvolvedores tentando resolver problemas reais.&lt;/p&gt;

&lt;p&gt;Projetos como o AxonASP provam que, quando você combina uma visão técnica ousada — como ressuscitar o JS Síncrono e o ASP Clássico para ambientes modernos e multiplataforma — com uma comunidade ativa, que testa e apoia, os resultados são incríveis.&lt;/p&gt;

&lt;p&gt;O código pode ser o que executa na máquina, mas as pessoas fazem o sistema funcionar.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Se você quiser ver como estamos trazendo o ASP Clássico para a era moderna, dê uma olhada no &lt;a href="https://github.com/guimaraeslucas/axonasp" rel="noopener noreferrer"&gt;repositório do AxonASP&lt;/a&gt;. Traga o seu código legado mais antigo e complexo, tente quebrar o runtime e nos diga o que acontece.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>ai</category>
      <category>developer</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Modernização de Sistemas Legados: Reduzindo o Débito Técnico com AxonASP</title>
      <dc:creator>Lucas Guimarães</dc:creator>
      <pubDate>Tue, 30 Jun 2026 14:00:33 +0000</pubDate>
      <link>https://dev.to/lucas_guimaraes/modernizacao-de-sistemas-legados-reduzindo-o-debito-tecnico-com-axonasp-5cb9</link>
      <guid>https://dev.to/lucas_guimaraes/modernizacao-de-sistemas-legados-reduzindo-o-debito-tecnico-com-axonasp-5cb9</guid>
      <description>&lt;p&gt;O mercado de modernização de software está crescendo em ritmo acelerado, com projeções indicando que o setor atingirá mais de US$ 66 bilhões nos próximos anos, segundo relatórios recentes da Keyhole Software. À medida que o débito técnico se acumula e a adoção da nuvem se torna padrão, as empresas percebem que reescrever sistemas inteiros do zero é uma estratégia cara, demorada e com altas taxas de falha. A tendência dominante hoje é a &lt;strong&gt;modernização incremental&lt;/strong&gt;, focada em reduzir riscos sem interromper as operações do negócio.&lt;br&gt;
É nesse cenário de transição que ambientes de execução cross-platform desenvolvidos em GoLang, como o &lt;strong&gt;AxonASP&lt;/strong&gt;, ganham protagonismo. Projetado para revolucionar a forma como mantemos e escalamos aplicações Classic ASP, o AxonASP entrega a ponte perfeita entre a estabilidade do código legado e a agilidade das arquiteturas modernas, com mínimo esforço de adaptação.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adaptação Sem Atrito: De Objetos COM a Objetos G3
&lt;/h2&gt;

&lt;p&gt;Um dos maiores gargalos na modernização de aplicações antigas é o profundo acoplamento com objetos COM nativos. Em métodos tradicionais, migrar essas dependências significa reescrever vastas camadas de regras de negócios, paralisando outras entregas de TI.&lt;br&gt;
O AxonASP contorna essa barreira de forma direta e eficiente. A plataforma permite que a base do código original permaneça intacta, exigindo apenas o mínimo esforço para adaptar as configurações existentes. Ao redirecionar velhas chamadas de objetos COM para &lt;strong&gt;objetos G3&lt;/strong&gt;, o desenvolvedor consegue integrar o sistema legado às bibliotecas e serviços da nova infraestrutura. Esse processo mantém as engrenagens vitais da aplicação rodando com alta performance e isolamento adequado, dispensando os riscos de um "big bang" (reescrita total).&lt;/p&gt;

&lt;h2&gt;
  
  
  A Inovação da Interoperabilidade: VBScript e JavaScript Lado a Lado
&lt;/h2&gt;

&lt;p&gt;O envelhecimento da força de trabalho especializada e a dificuldade de encontrar profissionais fluentes em linguagens antigas inflacionam drasticamente os custos de manutenção corporativa.&lt;br&gt;
Para combater essa dor do mercado, o AxonASP introduz sua funcionalidade mais transformadora: &lt;strong&gt;o suporte combinado e nativo de JavaScript e VBScript dentro da mesma página&lt;/strong&gt;.&lt;br&gt;
Em vez de forçar a equipe a traduzir linhas e mais linhas de VBScript para linguagens modernas antes de adicionar novas funcionalidades, o AxonASP permite que o código antigo continue existindo perfeitamente ao lado de novos blocos de lógica escritos em JavaScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Capacitando a Nova Geração de Desenvolvedores
&lt;/h2&gt;

&lt;p&gt;Essa coexistência de linguagens muda radicalmente o perfil das equipes que podem atuar no projeto, resolvendo de vez o problema da escassez de talentos para sistemas legados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Integração Imediata de Novos Programadores:&lt;/strong&gt; Desenvolvedores recém-contratados, que dominam ecossistemas modernos (como Node, JavaScript puro e frameworks como Vue.js), não precisam enfrentar a curva de aprendizado do VBScript. Eles podem abrir um arquivo .asp, compreender a estrutura e começar a codificar atualizações diretamente em JavaScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modernização Módulo a Módulo:&lt;/strong&gt; A equipe de engenharia pode refatorar a aplicação progressivamente. Funções críticas em VBScript podem ser substituídas aos poucos por funções em JavaScript, diluindo o risco técnico em sprints menores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manutenção Descomplicada:&lt;/strong&gt; Como as regras antigas ainda funcionam e as novas podem ser escritas na linguagem mais popular do mundo, a manutenção deixa de ser um peso morto e passa a fluir de maneira natural no ciclo de desenvolvimento contínuo.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;As tendências de mercado deixam claro que modernizar não precisa ser sinônimo de descartar. Estratégias inteligentes de transição são aquelas que valorizam o capital intelectual já investido no software.&lt;br&gt;
Ao viabilizar a transição suave de componentes para objetos G3 e promover a interoperabilidade revolucionária entre VBScript e JavaScript, o AxonASP prova que é possível modernizar com precisão e baixo custo. É a solução definitiva para estender a vida útil das suas aplicações, garantindo que qualquer desenvolvedor moderno possa manter e escalar seu código rumo ao futuro.&lt;/p&gt;

</description>
      <category>asp</category>
      <category>braziliandevs</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Modernizing Legacy Systems: How to Slay Technical Debt with AxonASP</title>
      <dc:creator>Lucas Guimarães</dc:creator>
      <pubDate>Tue, 30 Jun 2026 13:57:01 +0000</pubDate>
      <link>https://dev.to/lucas_guimaraes/modernizing-legacy-systems-how-to-slay-technical-debt-with-axonasp-3952</link>
      <guid>https://dev.to/lucas_guimaraes/modernizing-legacy-systems-how-to-slay-technical-debt-with-axonasp-3952</guid>
      <description>&lt;p&gt;If you've been following the software engineering space recently, you've probably noticed a massive shift. According to recent market analysis on legacy modernization trends, the sector is skyrocketing, projected to reach over $66 billion in the coming years. Why? Because technical debt is compounding, and enterprises are realizing that tearing down decades of business logic for a "big bang" rewrite is simply too expensive, risky, and slow.&lt;br&gt;
The new standard is &lt;strong&gt;incremental modernization&lt;/strong&gt;. And if you are dealing with Classic ASP environments, this is where &lt;strong&gt;AxonASP&lt;/strong&gt;—an open-source, cross-platform runtime server written in GoLang—completely changes the game.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Frictionless Shift: From COM to G3 Objects
&lt;/h2&gt;

&lt;p&gt;One of the biggest nightmares when modernizing legacy web apps is the deep entanglement with native COM objects. Traditionally, moving away from these dependencies meant completely rewriting complex business rules, stalling new feature delivery, and risking operational downtime.&lt;br&gt;
AxonASP takes a much smarter approach. It allows your original codebase to remain largely intact, requiring only minimal effort to adapt existing configurations. By simply transitioning legacy COM object calls to &lt;strong&gt;G3 objects&lt;/strong&gt;, developers can seamlessly bridge legacy logic with modern infrastructure. This keeps the application's vital components running with high performance and proper isolation, entirely bypassing the risks of a full rewrite.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Game-Changer: VBScript and JavaScript on the Same Page
&lt;/h2&gt;

&lt;p&gt;Let’s talk about the elephant in the room: the developer talent pool. The aging workforce specialized in older languages makes maintaining legacy code incredibly costly. Trying to find developers eager to write VBScript today is an uphill battle.&lt;br&gt;
To solve this, AxonASP introduces its most powerful feature: &lt;strong&gt;native, combined support for both JavaScript and VBScript within the exact same page&lt;/strong&gt;.&lt;br&gt;
Instead of forcing your engineering team to translate thousands of lines of VBScript into a modern language before they can add a single new feature, AxonASP lets the old code peacefully coexist with new logic written entirely in JavaScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Empowering the Next Generation of Devs
&lt;/h2&gt;

&lt;p&gt;This interoperability completely flips the script on legacy maintenance, making your codebase accessible to anyone:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Friction Onboarding:&lt;/strong&gt; New hires familiar with modern ecosystems (like Node.js, Vue, or vanilla JS) don't need to learn VBScript. They can open an .asp file, understand the structure, and start coding new updates and maintaining the system using JavaScript right away.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Module-by-Module Refactoring:&lt;/strong&gt; Engineering teams can refactor the application progressively. Critical VBScript functions can be swapped out for JavaScript functions one sprint at a time, drastically reducing technical risk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Painless Maintenance:&lt;/strong&gt; Because the old rules still work and new ones can be written in the world's most popular language, maintenance stops being a bottleneck and becomes a natural part of your development lifecycle.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The industry trends are clear: modernization doesn't have to mean throwing everything away. The smartest transition strategies leverage the intellectual capital already invested in your software.&lt;br&gt;
By enabling a smooth transition to G3 objects and offering groundbreaking VBScript/JavaScript interoperability, AxonASP proves that you can modernize legacy apps with precision and minimal cost. It’s the ultimate bridge to the future, ensuring any modern developer can jump in, maintain, and scale your code today.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>architecture</category>
      <category>asp</category>
      <category>productivity</category>
    </item>
    <item>
      <title>JavaScript no lado do servidor sem node.js? APIs no Linux com AxonASP</title>
      <dc:creator>Lucas Guimarães</dc:creator>
      <pubDate>Tue, 30 Jun 2026 11:00:00 +0000</pubDate>
      <link>https://dev.to/lucas_guimaraes/javascript-no-lado-do-servidor-sem-nodejs-apis-no-linux-com-axonasp-2jhh</link>
      <guid>https://dev.to/lucas_guimaraes/javascript-no-lado-do-servidor-sem-nodejs-apis-no-linux-com-axonasp-2jhh</guid>
      <description>&lt;p&gt;Quando falamos de Classic ASP, a primeira coisa que costuma vir à mente é o VBScript. É uma linguagem excelente e direta, mas sejamos honestos: no ecossistema da web moderna, tudo conversa em JSON. E gerar JSON manualmente concatenando strings no VBScript é um pesadelo que nenhum desenvolvedor deveria ter que suportar hoje em dia. Mesmo que tenhamos a G3JSON do AxonASP ao nosso lado, é chato pensar em ter de chamar uma biblioteca apenas para isso.&lt;/p&gt;

&lt;p&gt;Mas aqui está um fato esquecido: o Classic ASP no Windows sempre ofereceu suporte ao JScript, que nada mais é do que JavaScript. E esse, garanto que você sabe.&lt;/p&gt;

&lt;p&gt;Com o AxonASP (&lt;a href="https://github.com/guimaraeslucas/axonasp" rel="noopener noreferrer"&gt;https://github.com/guimaraeslucas/axonasp&lt;/a&gt;) — uma engine baseada em GoLang que roda Classic ASP nativamente no Linux, macOS, BSD e Windows — essa capacidade não foi apenas preservada; ela se tornou uma ferramenta poderosa. O AxonASP implementa um motor ECMAScript que suporta completamente a versão 6.0 e além, permitindo que você escreva JavaScript no lado do servidor perfeitamente integrado às suas páginas ASP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O melhor dos dois mundos&lt;/strong&gt;&lt;br&gt;
Ao adotar o JavaScript como sua linguagem principal em uma página ASP, você consegue misturar naturalmente conteúdo HTML com JavaScript renderizado no servidor. E o mais importante: isso elimina completamente o atrito na hora de construir APIs. Você ganha a sintaxe nativa do JavaScript (incluindo os métodos embutidos &lt;code&gt;JSON.stringify&lt;/code&gt; e &lt;code&gt;JSON.parse&lt;/code&gt;) combinada com os objetos padrão e já consagrados do ASP, como &lt;code&gt;Response&lt;/code&gt;, &lt;code&gt;Request&lt;/code&gt; e &lt;code&gt;Server&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Some a esse ecossistema bibliotecas como a &lt;code&gt;G3DB&lt;/code&gt; — que facilita absurdamente a conexão e a execução de consultas em múltiplos bancos de dados simultaneamente — e, de repente, você tem uma stack de backend extremamente leve e capaz, rodando direto em um servidor Linux ou dentro de um container Docker.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exemplo prático: Um endpoint de Micro-API&lt;/strong&gt;&lt;br&gt;
Para mostrar como isso funciona na prática, vamos construir um endpoint de API simples e seguro.&lt;/p&gt;

&lt;p&gt;Imagine que você precisa servir dados para um frontend moderno em Vue.js ou React. Em vez de configurar um framework pesado, você pode simplesmente jogar este arquivo &lt;code&gt;.asp&lt;/code&gt; na pasta &lt;code&gt;www&lt;/code&gt; do seu AxonASP. Ele lê um parâmetro da URL, faz uma consulta no banco de dados usando a biblioteca &lt;code&gt;G3DB&lt;/code&gt;, formata o resultado em JSON e serve a resposta com os cabeçalhos HTTP corretos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsp"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;%&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt; &lt;span class="nc"&gt;Language&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"JavaScript"&lt;/span&gt; &lt;span class="nt"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;%&lt;/span&gt;
&lt;span class="c1"&gt;// 1. Configuração dos cabeçalhos HTTP modernos para a nossa API&lt;/span&gt;
&lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ContentType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"application/json"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Charset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AddHeader&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Access-Control-Allow-Origin"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"*"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// 2. Definição da lógica de busca de dados&lt;/span&gt;
&lt;span class="n"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getRecordData&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;recordId&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Instancia a biblioteca usando o ProgID principal&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;CreateObject&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"G3DB"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Abre a conexão utilizando valores de configuração/ambiente&lt;/span&gt;
    &lt;span class="c1"&gt;// Retorna True se a abertura via config/env for bem-sucedida; False caso contrário&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;isConnected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;OpenFromEnv&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"mysql"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;isConnected&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Retorna a string do erro atual&lt;/span&gt;
        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Error&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Falha na conexão com o banco: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;GetError&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt; 
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Uso de consultas parametrizadas para garantir segurança contra SQL Injection&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;sql&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"SELECT id, status, created_at, assigned_user FROM workflow_queue WHERE id = ?"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Executa a consulta e retorna um result set do tipo forward-only&lt;/span&gt;
    &lt;span class="c1"&gt;// A reescrita de placeholders converte os marcadores '?' para o formato do driver ativo quando necessário&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;rs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Query&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sql&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recordId&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 

    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Verifica se o result set é válido (a G3DB retorna Empty em caso de falha)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rs&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;rs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EOF&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Mapeia o Recordset diretamente para um objeto nativo do JavaScript&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="nl"&gt;id:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rs&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;&lt;span class="o"&gt;)),&lt;/span&gt;
                &lt;span class="nl"&gt;status:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rs&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"status"&lt;/span&gt;&lt;span class="o"&gt;)),&lt;/span&gt;
                &lt;span class="nl"&gt;createdAt:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rs&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"created_at"&lt;/span&gt;&lt;span class="o"&gt;)),&lt;/span&gt;
                &lt;span class="nl"&gt;assignedTo:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rs&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"assigned_user"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
            &lt;span class="o"&gt;};&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="c1"&gt;// Sempre limpa e fecha o Recordset&lt;/span&gt;
        &lt;span class="n"&gt;rs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Close&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Captura falhas de execução usando a propriedade somente leitura LastError&lt;/span&gt;
        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Error&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Falha na execução da consulta: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;LastError&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Fecha o pool de conexões atual gerenciado pelo objeto G3DB&lt;/span&gt;
    &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Close&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt; 

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// 3. Processamento da requisição recebida&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Extrai o ID da URL (ex: api.asp?id=1042)&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;reqId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;QueryString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reqId&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s"&gt;"undefined"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;reqId&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"400 Bad Request"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Write&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;JSON&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stringify&lt;/span&gt;&lt;span class="o"&gt;({&lt;/span&gt; 
            &lt;span class="nl"&gt;success:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; 
            &lt;span class="nl"&gt;error:&lt;/span&gt; &lt;span class="s"&gt;"Parâmetro obrigatório ausente: id."&lt;/span&gt; 
        &lt;span class="o"&gt;}));&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;record&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;getRecordData&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reqId&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Sucesso: renderiza o JSON padrão usando o stringify nativo do ES5&lt;/span&gt;
            &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Write&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;JSON&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stringify&lt;/span&gt;&lt;span class="o"&gt;({&lt;/span&gt; 
                &lt;span class="nl"&gt;success:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; 
                &lt;span class="nl"&gt;data:&lt;/span&gt; &lt;span class="n"&gt;record&lt;/span&gt; 
            &lt;span class="o"&gt;}));&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"404 Not Found"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Write&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;JSON&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stringify&lt;/span&gt;&lt;span class="o"&gt;({&lt;/span&gt; 
                &lt;span class="nl"&gt;success:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; 
                &lt;span class="nl"&gt;error:&lt;/span&gt; &lt;span class="s"&gt;"Registro não encontrado no banco de dados."&lt;/span&gt; 
            &lt;span class="o"&gt;}));&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Tratamento global de erros&lt;/span&gt;
    &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"500 Internal Server Error"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Write&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;JSON&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stringify&lt;/span&gt;&lt;span class="o"&gt;({&lt;/span&gt; 
        &lt;span class="nl"&gt;success:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; 
        &lt;span class="nl"&gt;error:&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;message&lt;/span&gt; 
    &lt;span class="o"&gt;}));&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;%&amp;gt;&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Por que isso importa?&lt;/strong&gt;&lt;br&gt;
Olhe para o código acima. É JavaScript perfeitamente válido, roda com uma velocidade incrível e faz exatamente o que precisa fazer, sem camadas complexas de middleware ou configurações complicadas de roteamento.&lt;/p&gt;

&lt;p&gt;Como o AxonASP é construído em GoLang, todo esse ambiente fica completamente desacoplado do Windows Server. Na verdade, ele roda em qualquer servidor que você quiser. Você pode criar novos módulos usando a sintaxe que você já domina, aproveitando os objetos clássicos do ASP, consultando seus bancos com a &lt;code&gt;G3DB&lt;/code&gt; e implantando tudo em uma distribuição Linux mínima. E sabe o que é melhor? Com uma otimização de memória muito boa. Uma API Node.js muitas vezes utiliza 50mb a 80mb para ficar em espera, enquanto o AxonASP consegue manter a espera em 18mb. Isso é fantástico para economizar recursos, e cá entre nós, sabemos o quanto esses recursos são caros para nós que pagamos em reais convertidos em dólar.&lt;/p&gt;

&lt;p&gt;Se você gerencia aplicações em Classic ASP, migrá-las não significa necessariamente ter que reescrevê-las do zero em outra linguagem. Você pode modernizar a infraestrutura, mudar para JavaScript onde fizer mais sentido (como em endpoints de API), e até misturar VBScript com JavaScript na mesma página, e manter seus sistemas rodando tranquilamente. E sem pagar licenças.&lt;/p&gt;

&lt;p&gt;Nós fizemos o AxonASP para ser uma engine potente. E precisamos também de sua ajuda como desenvolvedor. Se você puder colaborar testando código JavaScript, VBScript ou até mesmo melhorando o código GoLang, isso será de grande ajuda.&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>asp</category>
      <category>api</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Uma linguagem de 30 anos otimizada para o futuro: Construindo uma Máquina Virtual Zero-AST em Go capaz de rodar ASP</title>
      <dc:creator>Lucas Guimarães</dc:creator>
      <pubDate>Mon, 29 Jun 2026 11:00:00 +0000</pubDate>
      <link>https://dev.to/lucas_guimaraes/uma-linguagem-de-30-anos-otimizada-para-o-futuro-construindo-uma-maquina-virtual-zero-ast-em-go-1639</link>
      <guid>https://dev.to/lucas_guimaraes/uma-linguagem-de-30-anos-otimizada-para-o-futuro-construindo-uma-maquina-virtual-zero-ast-em-go-1639</guid>
      <description>&lt;p&gt;Olá, comunidade DEV! 👋 Estou de volta.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Se você acha que o Classic ASP está morto, deixe-me dizer: ele agora está mais vivo do que nunca.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Recentemente, concluí uma refatoração total da base de código para a versão 2.2 do AxonASP, meu motor em Go de código aberto para VBScript e Classic ASP. O objetivo não era apenas manter o código legado respirando; eu queria expandir os limites do que essa linguagem dos anos 90 pode realmente alcançar em hardware moderno.&lt;/p&gt;

&lt;p&gt;Quero compartilhar com vocês algumas das otimizações profundas de engenharia que implementamos por baixo do capô para fazer isso acontecer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚡ Zero AST, Bytecode Puro&lt;/strong&gt;&lt;br&gt;
Nesta reescrita, demos um enorme salto arquitetônico: descartei a Árvore de Sintaxe Abstrata (AST).&lt;/p&gt;

&lt;p&gt;Em vez disso, o novo compilador de passagem única (&lt;em&gt;single-pass&lt;/em&gt;) emite bytecode diretamente para uma Máquina Virtual baseada em pilha. Ao eliminar a AST, o AxonASP executa scripts com overhead de alocação praticamente zero. O consumo de memória despenca drasticamente e a execução é rápida.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔄 Pool de VMs no Estilo IIS &amp;amp; Cache Avançado&lt;/strong&gt;&lt;br&gt;
Para lidar com alta concorrência, implementei um pool avançado de VMs perfeitamente modelado com base na arquitetura original do IIS, mas sustentado pelas goroutines nativas do Go. Além disso, combinei isso com um cache agressivo de scripts e até implementei cache de compilação para execuções dinâmicas (&lt;code&gt;eval&lt;/code&gt;, &lt;code&gt;execute&lt;/code&gt; e &lt;code&gt;executeglobal&lt;/code&gt;). O resultado é que o tempo de processamento de requisições é mais rápido se comparado ao ASP tradicional.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🛠️ Tornando o ASP um Prazer de Escrever Novamente&lt;/strong&gt;&lt;br&gt;
Velocidade pura é ótimo, mas a experiência do desenvolvedor importa tanto quanto. Não paramos apenas no suporte à biblioteca padrão legada. Injetamos mais de 60 funções personalizadas diretamente no runtime. Agora você tem acesso a manipulação avançada de arrays, manipulação nativa de JSON e ferramentas criptográficas prontas para uso. Isso realmente faz com que escrever ASP seja um prazer novamente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧪 Desenvolvimento Guiado por Testes em ASP (Sim, sério)&lt;/strong&gt;&lt;br&gt;
Diga adeus a scripts quebrados e regressões. Eu queria trazer práticas de desenvolvimento modernas para a linguagem, então construímos o novo executável &lt;code&gt;axonasp-testsuite&lt;/code&gt;. Ele permite que você escreva e rode suítes de testes automatizados nativamente, direto nos seus arquivos &lt;code&gt;.asp&lt;/code&gt;! O TDD no Classic ASP finalmente é uma realidade.&lt;/p&gt;

&lt;p&gt;Se você está curioso sobre como tudo isso funciona, ou se tem uma aplicação legada que deseja resgatar, preparamos um manual completo e abrangente bem dentro do repositório para te ajudar a começar.&lt;/p&gt;

&lt;p&gt;O Classic ASP pode ser um pedaço da história da computação retrô, mas com essas otimizações, ele está pronto para a web moderna. Adoraria saber o que vocês acham.&lt;/p&gt;

&lt;p&gt;👉 Confira o repositório e o código-fonte aqui: &lt;a href="https://github.com/guimaraeslucas/axonasp" rel="noopener noreferrer"&gt;https://github.com/guimaraeslucas/axonasp&lt;/a&gt;&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>portugues</category>
      <category>webdev</category>
      <category>asp</category>
    </item>
    <item>
      <title>Trouxemos o Classic ASP para o Linux: Assista ao vídeo do AxonASP e confira nosso novo manual online!</title>
      <dc:creator>Lucas Guimarães</dc:creator>
      <pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/lucas_guimaraes/trouxemos-o-classic-asp-para-o-linux-assista-ao-video-do-axonasp-e-confira-nosso-novo-manual-563p</link>
      <guid>https://dev.to/lucas_guimaraes/trouxemos-o-classic-asp-para-o-linux-assista-ao-video-do-axonasp-e-confira-nosso-novo-manual-563p</guid>
      <description>&lt;p&gt;Olá, comunidade DEV! 👋&lt;/p&gt;

&lt;p&gt;Recentemente, compartilhei como reescrevi completamente o motor do Classic ASP do zero em Go para salvar aplicações legadas da descontinuação do VBScript pela Microsoft. Hoje, estou super animado para compartilhar uma breve apresentação em vídeo que acabei de produzir, mostrando o AxonASP  em ação!&lt;/p&gt;

&lt;p&gt;Você pode assistir à análise detalhada de como alcançamos uma execução zero-AST, velocidades extremas e compatibilidade multiplataforma bem aqui:&lt;br&gt;
👉 &lt;a href="https://www.youtube.com/watch?v=2COGf_lfwSs" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=2COGf_lfwSs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📖 Mais do que apenas documentação: Um centro de aprendizado completo&lt;br&gt;
Um dos maiores desafios com tecnologias mais antigas é que os fóruns, tutoriais e documentações de antigamente estão desaparecendo lentamente da web. Para resolver isso, não construímos apenas um motor; nós criamos um manual moderno e abrangente.&lt;/p&gt;

&lt;p&gt;Seja você um veterano migrando uma aplicação empresarial legada ou um desenvolvedor moderno se perguntando o que diabos é ASP, o manual tem tudo o que você precisa. Ele traz:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;O Básico:&lt;/strong&gt; Uma recapitulação completa e amigável sobre os conceitos fundamentais do Classic ASP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;As Extensões Modernas:&lt;/strong&gt; Exemplos detalhados e prontos para copiar e colar de como usar nossos novos objetos nativos em Go diretamente dentro do seu VBScript. Você aprenderá como fazer o parse de APIs com o &lt;code&gt;G3JSON&lt;/code&gt;, buscar recursos externos com o &lt;code&gt;G3HTTP&lt;/code&gt; e até renderizar Markdown para HTML instantaneamente usando o &lt;code&gt;G3MD&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conteinerização:&lt;/strong&gt; Guias passo a passo sobre como usar nossos containers Docker para que você possa conteinerizar suas aplicações de 20 anos atrás em questão de segundos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI em Tempo Real:&lt;/strong&gt; Instruções de como usar nossa interface de linha de comando interativa. Você pode, de fato, escrever, testar e aprender trechos de ASP em tempo real, direto do seu terminal!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;O AxonASP é mais do que apenas VBScript — ele também traz suporte nativo a JavaScript&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;E o melhor: com total acesso aos objetos clássicos do ASP (Request, Response, Session, etc.). Se você é novo no ecossistema ASP, não se preocupe: é o mesmíssimo JavaScript que você já roda no navegador ou no Node.js. A grande vantagem aqui? No AxonASP, o JavaScript pode ser executado de forma totalmente síncrona. Chega de inferno de callbacks ou promises para operações simples; você escreve o código de forma direta e vê o resultado na hora, sem complicações.&lt;/p&gt;

&lt;p&gt;🤯 Provando que funciona&lt;br&gt;
Aqui está a minha parte favorita: o manual em si é uma aplicação em Classic ASP. Se você acessar o link abaixo, não estará apenas lendo arquivos estáticos. Todo aquele site de documentação está rodando ao vivo em produção agora, alimentado nativamente pelo motor do AxonASP, rodando de forma segura atrás de um proxy reverso Nginx em um servidor Linux. É rápido, estável e prova exatamente do que essa arquitetura é capaz de dar conta no mundo real.&lt;/p&gt;

&lt;p&gt;🔗 Explore você mesmo&lt;br&gt;
Eu adoraria que você assistisse ao vídeo, desse uma olhada na documentação e experimentasse. Deixe-me saber o que achou da arquitetura nos comentários!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Leia o manual online (rodando em AxonASP + Linux + Nginx):&lt;/strong&gt; &lt;a href="https://g3pix.com.br/axonasp/manual/default.asp" rel="noopener noreferrer"&gt;https://g3pix.com.br/axonasp/manual/default.asp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Confira o código-fonte e deixe uma estrela:&lt;/strong&gt; &lt;a href="https://github.com/guimaraeslucas/axonasp" rel="noopener noreferrer"&gt;https://github.com/guimaraeslucas/axonasp&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>cloud</category>
      <category>braziliandevs</category>
      <category>portugues</category>
    </item>
  </channel>
</rss>
