<?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: Morgan Ney</title>
    <description>The latest articles on DEV Community by Morgan Ney (@morganney).</description>
    <link>https://dev.to/morganney</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1263184%2F0f786b1b-c6c9-4151-8da1-2b0ac361e5cf.jpeg</url>
      <title>DEV Community: Morgan Ney</title>
      <link>https://dev.to/morganney</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/morganney"/>
    <language>en</language>
    <item>
      <title>Introducing the @knighted/jsx + @knighted/css Stack: Standards-Based Flexibility for Modern Web Development</title>
      <dc:creator>Morgan Ney</dc:creator>
      <pubDate>Thu, 25 Dec 2025 03:52:26 +0000</pubDate>
      <link>https://dev.to/morganney/introducing-the-knightedjsx-knightedcss-stack-standards-based-flexibility-for-modern-web-ffd</link>
      <guid>https://dev.to/morganney/introducing-the-knightedjsx-knightedcss-stack-standards-based-flexibility-for-modern-web-ffd</guid>
      <description>&lt;p&gt;In the rapidly evolving landscape of web development, 2026 presents a clear divide: tools that abstract away native browser behavior and tools that accelerate it. The &lt;code&gt;@knighted&lt;/code&gt; stack — comprising &lt;code&gt;@knighted/jsx&lt;/code&gt; and &lt;code&gt;@knighted/css&lt;/code&gt; — sits firmly in the latter category, providing the developer experience (DX) of a modern framework while operating entirely on native web standards and Rust-powered infrastructure.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Demo App&lt;/strong&gt;: Experience the &lt;code&gt;@knighted&lt;/code&gt; stack in action by visiting the live demo at &lt;a href="https://github.com/morganney/css-jsx-app" rel="noopener noreferrer"&gt;morganney/css-jsx-app&lt;/a&gt;!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At the heart of &lt;code&gt;@knighted&lt;/code&gt; lies a transformative philosophy: accelerate &lt;strong&gt;native web standards&lt;/strong&gt; without layering on heavy abstractions. Central to this vision is its &lt;strong&gt;Shadow DOM-powered integration&lt;/strong&gt;, which guarantees true style encapsulation and predictable component behaviors. Combined with Rust-speed tooling, full TypeScript safety, and universal runtime compatibility, &lt;code&gt;@knighted&lt;/code&gt; offers a modern web development toolchain that’s both lightweight and powerful.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Shadow DOM Difference: Fully Encapsulated Components
&lt;/h2&gt;

&lt;p&gt;One of the core innovations of &lt;code&gt;@knighted/jsx&lt;/code&gt; + &lt;code&gt;@knighted/css&lt;/code&gt; is its &lt;strong&gt;first-class support for Shadow DOM&lt;/strong&gt;. By leveraging this browser-native feature, &lt;code&gt;@knighted&lt;/code&gt; provides true isolation for styles, ensuring that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CSS Conflicts are Eliminated&lt;/strong&gt;: Scoped Shadow DOM styles guarantee that components are fully sealed from external selectors or accidental style leakage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global CSS Pollution is Prevented&lt;/strong&gt;: Unlike traditional CSS or heavy CSS-in-JS solutions, every &lt;code&gt;@knighted&lt;/code&gt; component is wrapped in an encapsulated style boundary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance Benefits are Maximized&lt;/strong&gt;: Shadow DOM enables parallel DOM rendering and style application, leveraging browser optimizations for speed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This ensures that every component you build with &lt;code&gt;@knighted&lt;/code&gt; is predictably styled, portable, and reusable, without requiring additional runtime libraries or hacks.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why &lt;code&gt;@knighted&lt;/code&gt; is a Game-Changer in 2026
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. The "Native" Philosophy: Standards-First
&lt;/h3&gt;

&lt;p&gt;Unlike other Rust-based frameworks (e.g., Leptos, Dioxus) that replace web standards with Rust macros and WASM abstractions, &lt;code&gt;@knighted&lt;/code&gt; embraces the existing browser-native model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Standards as Authoring&lt;/strong&gt;: Write valid JavaScript, CSS, and DOM-based code. If you know MDN documentation, you’re already up to speed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shadow DOM as Default&lt;/strong&gt;: Components automatically use encapsulated styling and structure, aligning with the modern evolution of web component standards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Future-Proof&lt;/strong&gt;: Features like Constructable Stylesheets and Shadow DOM align with browser capabilities, ensuring compatibility with future browser optimizations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lightweight by Design&lt;/strong&gt;: There’s no heavy runtime abstraction or proprietary syntax—just modern tools that accelerate the standards you already use.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Rust-Powered, Not Rust-Required
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;@knighted&lt;/code&gt; stack uses the Oxc toolchain (Oxidation Compiler) to handle the "heavy lifting" of build time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Instant Builds&lt;/strong&gt;: Rust-powered parsing, scoping, and transpilation result in near-instant builds and minified file outputs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bridge Architecture&lt;/strong&gt;: Rust handles performance-critical tasks at build time (e.g., CSS scoping, selector mapping) and hands off clean, optimized JavaScript for runtime. No need to manage a WASM memory heap or recompile binaries.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Type Safety as a Core Feature
&lt;/h3&gt;

&lt;p&gt;At its heart, &lt;code&gt;@knighted&lt;/code&gt; integrates deeply with TypeScript to create a &lt;strong&gt;closed loop&lt;/strong&gt; system for static analysis and safety:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Virtual JSX Mapping&lt;/strong&gt;: With the TypeScript Language Service Plugin, tagged templates like &lt;code&gt;jsx&lt;/code&gt; and &lt;code&gt;reactJsx&lt;/code&gt; are seen by the compiler as real JSX, enabling in-template autocompletion, red-line errors, and refactoring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shadow DOM-Driven Selectors&lt;/strong&gt;: Type-safe CSS selectors derived directly from scoped Shadow DOM styles ensure no broken class references make it to runtime.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This combination of tools delivers unmatched confidence, productivity, and type safety while keeping workflows simple.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Universal Interoperability
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;@knighted&lt;/code&gt; stack is not a proprietary silo—it’s a highly interoperable ecosystem that integrates seamlessly with existing technologies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Switchable Runtimes&lt;/strong&gt;: Use &lt;code&gt;jsx&lt;/code&gt; for lightweight DOM manipulation and performance-critical Web Components or &lt;code&gt;reactJsx&lt;/code&gt; for React-based legacy systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSR via Shims&lt;/strong&gt;: The &lt;code&gt;@knighted/jsx/node&lt;/code&gt; environment enables native DOM code to function out-of-the-box on the server using high-performance shims (e.g., &lt;code&gt;linkedom&lt;/code&gt;, &lt;code&gt;jsdom&lt;/code&gt;). No specialized rendering engines are needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Multi-Dialect CSS, Stable Selectors, and Why It Matters
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;@knighted&lt;/code&gt; doesn't lock you into one styling paradigm—it works with CSS Modules, Sass Less, and Vanilla Extract, surfacing both hashed and stable classes when needed. This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One loader for all your web styling&lt;/strong&gt;: Move between paradigms as your project grows or legacy code is absorbed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Predictable, type-safe selectors&lt;/strong&gt;: Get complete autocompletion and error checking inside your &lt;code&gt;.js&lt;/code&gt; or &lt;code&gt;.ts&lt;/code&gt;/&lt;code&gt;.tsx&lt;/code&gt; code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encapsulation AND flexibility&lt;/strong&gt;: Styles work in global, shadow DOM, or any context without rewrite.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Core Features Reimagined
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Authoring on Standards
&lt;/h3&gt;

&lt;p&gt;Tag-based components and styles leverage browser-native syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;jsx&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@knighted/jsx/index.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;styles&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./theme.knighted-css.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="nx"&gt;jsx&lt;/span&gt;&lt;span class="s2"&gt;`
  &amp;lt;section class="&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;section&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&amp;gt;
    &amp;lt;h1&amp;gt;Encapsulated, Predictable Styles&amp;lt;/h1&amp;gt;
    &amp;lt;button class="&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;" onClick=&lt;/span&gt;&lt;span class="p"&gt;${()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tapped&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;
      tap me
    &amp;lt;/button&amp;gt;
  &amp;lt;/section&amp;gt;
`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tagged Template Literals&lt;/strong&gt;: Simple, readable, and interoperable with both DOM and React runtimes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scoped Shadow DOM Styles&lt;/strong&gt;: Achieve isolation and reusability without additional tooling.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Runtime on Standards
&lt;/h3&gt;

&lt;p&gt;Ultra-thin runtime layers map directly to browser APIs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Native DOM Objects&lt;/strong&gt;: Outputs real Nodes, &lt;code&gt;DocumentFragment&lt;/code&gt;, and &lt;code&gt;SVGElement&lt;/code&gt;, avoiding unnecessary abstraction layers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;True Shadow DOM Styling&lt;/strong&gt;: Ensures every component maintains its encapsulated state, eliminating global style conflicts and improving overall application reliability.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Full TypeScript Integration
&lt;/h3&gt;

&lt;p&gt;Development is made safer and faster via intelligent tooling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;In-Template Type Checking&lt;/strong&gt;: Catch errors in template literals at compile time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IDE Intelligence&lt;/strong&gt;: Enjoy refactoring, autocomplete, and go-to-definition support inside templates.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  CSS Selector Type Generation
&lt;/h3&gt;

&lt;p&gt;Solve the "mystery meat" problem of CSS-in-JS with automatically typed styles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;styles&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./theme.knighted-css.js&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;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Predictable&lt;/span&gt; &lt;span class="nx"&gt;and&lt;/span&gt; &lt;span class="nx"&gt;Scoped&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shadow DOM selectors stay type-safe&lt;/strong&gt;: Predictive autocompletion of Shadow DOM class names.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encapsulate styles&lt;/strong&gt;: Avoid global style bleeding between React and other app parts using Shadow DOM isolation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maximize component reusability&lt;/strong&gt;: Use React components both globally and in shadow DOM contexts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplify build tooling&lt;/strong&gt;: Bypass &lt;code&gt;.tsx&lt;/code&gt; quirks, TypeScript decorators, and complex loader setups.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Shadow DOM Embed
&lt;/h3&gt;

&lt;p&gt;Define a component with &lt;code&gt;jsx&lt;/code&gt;&lt;code&gt;&lt;/code&gt; and export its scoped styles, then consume both via a combined query import:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// components/native_button.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;jsx&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@knighted/jsx/index.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;styles&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./native_button.knighted-css.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onClick&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="nx"&gt;jsx&lt;/span&gt;&lt;span class="s2"&gt;`
    &amp;lt;button class="&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;" onClick=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;
      &amp;lt;span class="&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&amp;gt;native css&amp;lt;/span&amp;gt;
      &amp;lt;span class="&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/span&amp;gt;
    &amp;lt;/button&amp;gt;
  `&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;knightedCss&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;buttonCss&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./components/native_button.js?knighted-css&amp;amp;combined&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;div&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;shadow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;host&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;attachShadow&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;open&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sheet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;CSSStyleSheet&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nx"&gt;sheet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replaceSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;buttonCss&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;shadow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;adoptedStyleSheets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;sheet&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;handleClick&lt;/span&gt; &lt;span class="o"&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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;shadow button tapped&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;shadow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Shadow-scoped button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;handleClick&lt;/span&gt; &lt;span class="p"&gt;}))&lt;/span&gt;
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;host&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One import gives you both the DOM factory (&lt;code&gt;Button&lt;/code&gt;) and the Shadow DOM-ready stylesheet string (&lt;code&gt;knightedCss&lt;/code&gt;), so scoped styling stays with the component wherever you mount it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Build Configuration (Rspack/Webpack)
&lt;/h2&gt;

&lt;p&gt;A minimal module rule setup that wires both loaders together:&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="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;module&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;rules&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="na"&gt;test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\.[&lt;/span&gt;&lt;span class="sr"&gt;mc&lt;/span&gt;&lt;span class="se"&gt;]?&lt;/span&gt;&lt;span class="sr"&gt;jsx&lt;/span&gt;&lt;span class="se"&gt;?&lt;/span&gt;&lt;span class="sr"&gt;$/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;exclude&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sr"&gt;/node_modules/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;use&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="na"&gt;loader&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@knighted/jsx/loader&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
              &lt;span class="na"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dom&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// switch to 'react' when emitting reactJsx templates&lt;/span&gt;
              &lt;span class="c1"&gt;// Docs: https://github.com/knightedcodemonkey/jsx/blob/main/src/loader/README.md&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="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;resourceQuery&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\?&lt;/span&gt;&lt;span class="sr"&gt;knighted-css&lt;/span&gt;&lt;span class="se"&gt;(?:&lt;/span&gt;&lt;span class="sr"&gt;&amp;amp;.*&lt;/span&gt;&lt;span class="se"&gt;)?&lt;/span&gt;&lt;span class="sr"&gt;$/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;use&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="na"&gt;loader&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@knighted/css/loader&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
              &lt;span class="na"&gt;moduleGraph&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="na"&gt;extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.ts&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="s1"&gt;.tsx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// optional: add custom script extensions&lt;/span&gt;
              &lt;span class="p"&gt;},&lt;/span&gt;
              &lt;span class="c1"&gt;// Docs: https://github.com/knightedcodemonkey/css/blob/main/docs/loader.md&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="p"&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This keeps JSX transpilation and Shadow-DOM-safe styling in a single place while remaining easy to expand with additional loaders later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architectural Summary: Shadow DOM vs Traditional Approaches
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;@knighted&lt;/code&gt; stack takes a radical but simple approach to modern web development by combining Shadow DOM styling, native tooling, and Rust-powered speed. Below is how it stands apart from traditional frameworks:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;
&lt;code&gt;@knighted&lt;/code&gt; Approach&lt;/th&gt;
&lt;th&gt;Traditional Approach&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Logic&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Native Tagged Templates&lt;/td&gt;
&lt;td&gt;Proprietary VDOM / Rust Macros&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Styles&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Scoped Shadow DOM&lt;/td&gt;
&lt;td&gt;Global CSS / CSS-in-JS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tooling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Oxc / Rust (Ultra-fast)&lt;/td&gt;
&lt;td&gt;Babel / SWC (General-purpose)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Type Safety&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Plugin-driven Virtual JSX&lt;/td&gt;
&lt;td&gt;Standard TypeScript Compilation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Runtime&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Thin DOM/SVG Reconciler&lt;/td&gt;
&lt;td&gt;Heavy Framework Core&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  A Toolchain for React-Tier DX with Vanilla-Tier Performance
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;@knighted/jsx&lt;/code&gt; + &lt;code&gt;@knighted/css&lt;/code&gt; stack is the premier choice for developers who want modern web development productivity without compromising on speed or compatibility. It is the "Goldilocks zone" for the web—a high-performance accelerator that resists both proprietary silos and unmanaged manual workflows.&lt;/p&gt;

&lt;p&gt;In 2026, the &lt;code&gt;@knighted&lt;/code&gt; stack empowers developers to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build with &lt;strong&gt;true Shadow DOM encapsulation&lt;/strong&gt; for predictable, isolated styling.&lt;/li&gt;
&lt;li&gt;Ship lightweight, standards-compliant applications with ultra-fast build times.&lt;/li&gt;
&lt;li&gt;Deliver type-safe, scoped styles for fully portable and reusable CSS.&lt;/li&gt;
&lt;li&gt;Transition seamlessly between DOM-first and React-centric workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ready to adopt the future of web development?&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Get Started
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Scaffold a new project:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  npx @knighted/jsx init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;See the &lt;a href="https://github.com/knightedcodemonkey/css#loader" rel="noopener noreferrer"&gt;&lt;code&gt;@knighted/css&lt;/code&gt; loader docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Explore the &lt;a href="https://github.com/morganney/css-jsx-app" rel="noopener noreferrer"&gt;demo app&lt;/a&gt; for more examples&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/knightedcodemonkey/jsx" rel="noopener noreferrer"&gt;&lt;code&gt;@knighted/jsx&lt;/code&gt; documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/knightedcodemonkey/css" rel="noopener noreferrer"&gt;&lt;code&gt;@knighted/css&lt;/code&gt; documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;See the complete working example &lt;a href="https://github.com/morganney/css-jsx-app" rel="noopener noreferrer"&gt;Demo App&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>jsx</category>
      <category>shadowdom</category>
    </item>
    <item>
      <title>AWS Copilot CLI, the Good the Bad, and the Results.</title>
      <dc:creator>Morgan Ney</dc:creator>
      <pubDate>Sat, 27 Jan 2024 20:03:11 +0000</pubDate>
      <link>https://dev.to/morganney/aws-copilot-cli-the-good-the-bad-and-results-367d</link>
      <guid>https://dev.to/morganney/aws-copilot-cli-the-good-the-bad-and-results-367d</guid>
      <description>&lt;p&gt;Let's face it, deployments of web apps are variable and complex. With so many platforms to deploy to, and opinionated guides on a "best approach", it's easy to spend more time doing research than achieving results. As an experienced web developer and colleague, I feel your pain and understand the dilemma, especially since what is considered BCP today, is also guaranteed to be obsolete in &lt;code&gt;x&lt;/code&gt; years as technology continues down its inexorable ascent of progress.&lt;/p&gt;

&lt;p&gt;As a developer who'd rather spend more time adding features or fixing bugs than managing configuration around deployments, I was happy to hear about &lt;a href="https://aws.github.io/copilot-cli/"&gt;AWS Copilot CLI&lt;/a&gt;. If they could come through on their claim I'd be happy.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Focus your time on writing business logic instead of connecting AWS resources.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Good
&lt;/h2&gt;

&lt;p&gt;AWS Copilot CLI lived up to it's claim, at least in my experience. If you are comfortable working within a CLI and willing to explore the available options and documentation (which is pretty stellar despite &lt;a href="https://github.com/aws/copilot-cli/issues/4960#issuecomment-1890474052"&gt;my complaints&lt;/a&gt;) then you'll be a satisfied customer.&lt;/p&gt;

&lt;p&gt;You don't need to learn a particular configuration DSL like &lt;a href="https://docs.aws.amazon.com/cloudformation/"&gt;CloudFormation&lt;/a&gt; to deploy a full-stack web application. Learn the ins-and-outs of Copilot CLI (&lt;code&gt;copilot --help&lt;/code&gt;), seek help on their &lt;a href="https://github.com/aws/copilot-cli/issues"&gt;GitHub Issues&lt;/a&gt; when necessary, and you'll be deployed on the AWS cloud in no time, and back to adding features to your application.&lt;/p&gt;

&lt;p&gt;I would be remiss if I didn't mention that you need to be familiar with concepts like an &lt;a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html"&gt;Application Load Balancer&lt;/a&gt;, and &lt;a href="https://aws.github.io/copilot-cli/docs/developing/storage/"&gt;Storage Addons&lt;/a&gt;, etc., but grasping these basic concepts pales in comparison to learning a new dialect or managing their associated configuration files that evolve with time. The power of the AWS networking infrastructure is at your fingertips and wielded with a few &lt;code&gt;copilot env&lt;/code&gt; or &lt;code&gt;copilot svc&lt;/code&gt; commands.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bad
&lt;/h2&gt;

&lt;p&gt;The Aurora storage options offered with AWS Copilot CLI &lt;a href="https://www.google.com/search?q=aurora+v2+too+expensive"&gt;are expensive&lt;/a&gt;, there's no way around it.  If you want to use the latest &lt;code&gt;v2&lt;/code&gt; with an engine of PostgreSQL (probably similar with MySQL) you are going to &lt;a href="https://ldoughty.com/2022/05/exploring-aws-aurora-serverless-v2-for-cheap-wordpress-usage/"&gt;pay a minimum of around $40/mo&lt;/a&gt;. Even if your database sits mostly at rest, particularly in a development or staging environment.&lt;/p&gt;

&lt;p&gt;Things get a bit better with &lt;code&gt;v1&lt;/code&gt;, which can actually scale down to zero, but &lt;a href="https://stackoverflow.com/a/74992973/258174"&gt;&lt;code&gt;v1&lt;/code&gt; is EOL this 12/31/2024&lt;/a&gt;. I've personally &lt;a href="https://github.com/aws/copilot-cli/issues/4960#issuecomment-1895909360"&gt;let my feelings be known&lt;/a&gt; about this, and it couldn't hurt for others to do the same if you feel similarly slighted in your available offerings.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Results
&lt;/h2&gt;

&lt;p&gt;The expensive pricing notwithstanding, the service AWS Copilot CLI offers is pretty great. I was able to deploy &lt;a href="https://try.busmap.online/"&gt;Busmap&lt;/a&gt; with ease, a full-stack web application providing real-time arrival and departure times for bus stops in North and South American transit agencies. Rolling out new deployments is also seamless, things just work.&lt;/p&gt;

&lt;p&gt;Overall, I would recommend AWS Copilot CLI.&lt;/p&gt;

&lt;p&gt;If you ever need to catch a bus and want to know when your vehicle is arriving, check out Busmap at &lt;a href="https://try.busmap.online"&gt;https://try.busmap.online&lt;/a&gt;. It is backed by the security, reliability, and availability of the AWS infrastructure, thanks to AWS Copilot CLI. Busmap source code is &lt;a href="https://github.com/morganney/busmap"&gt;hosted on GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
