<?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: Nakassony Bernardo</title>
    <description>The latest articles on DEV Community by Nakassony Bernardo (@nakassony_bernardo_1d8896).</description>
    <link>https://dev.to/nakassony_bernardo_1d8896</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%2F3201744%2F5191397d-b5b4-448c-8dd6-c1068d89ab99.png</url>
      <title>DEV Community: Nakassony Bernardo</title>
      <link>https://dev.to/nakassony_bernardo_1d8896</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nakassony_bernardo_1d8896"/>
    <language>en</language>
    <item>
      <title>Integrating Still.js into Next.js: A Hands-On Guide to Remote Microfrontend Components - Architecture Series</title>
      <dc:creator>Nakassony Bernardo</dc:creator>
      <pubDate>Fri, 29 Aug 2025 00:51:46 +0000</pubDate>
      <link>https://dev.to/nakassony_bernardo_1d8896/integrating-stilljs-into-nextjs-a-hands-on-guide-to-remote-microfrontend-components--agj</link>
      <guid>https://dev.to/nakassony_bernardo_1d8896/integrating-stilljs-into-nextjs-a-hands-on-guide-to-remote-microfrontend-components--agj</guid>
      <description>&lt;p&gt;In this second part of the Microfrontend series we’re answering another posed question, we explore integrating Still.js with Next.js, focusing on using remote Vendor components. The video includes a real-world use case and a project built from scratch, follow the Design System for implementation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwal7bzmuno1ti6c1ma8s.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwal7bzmuno1ti6c1ma8s.gif" alt=" " width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What points will be addressed &lt;a href="https://youtu.be/RDUcSbUq6-k" rel="noopener noreferrer"&gt;in the video&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Creation of Next.js project&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generating and embedding Still.js app inside Next.js App&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Embedding remote component (straight from npm) into the application&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data exchange between Still.js and Next.js (React)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Remote components&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This approach is key in Microfrontends, as it enables embedding components from outside the project structure. It enhances feature sharing, increases decoupling, and reduces the size of the deployable package (e.g. bundle).&lt;/p&gt;

&lt;p&gt;The idea behind remote component is for them to be served from somewhere which is not the embedding application itself, as we can see in the bellow architecture:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fag24anxn9li10x8i7tzs.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fag24anxn9li10x8i7tzs.gif" alt=" " width="800" height="590"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The above architecture promotes reusability by allowing the same component, available via NPM/GitHub, to be embedded across different applications built with various frameworks. Still.js can play a key role, serving as proxy as needed, by being embedded within these apps as well. Additionally, Still.js enables components to be written in Vanilla JavaScript rather than relying on framework-specific code.&lt;/p&gt;

&lt;p&gt;Although NPM and Github are the approaches depicted in the architecture, Still.js adapts well with any other source for embedding remote components.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-contained components&lt;/strong&gt;&lt;br&gt;
This is the optimal situation in which a component can be used remotely, as the idea is that not external dependency exists so to avoid cascade importing, which can be harmful in terms of performance, also might cause JavaScript bloating issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Coding snippets specific considerations&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Step1:&lt;/strong&gt; The Still.js app is integrated into the Next.js project by placing it in a subfolder (we’ll call still-mf/) inside the public/ directory. It is then loaded using the apploader with additional parameters:&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="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stillApp&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;StillAppLoader&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;stillApp&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cdn&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;STILL_HOME&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/still-mf/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;PATH_PREFIX&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;still-mf/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1.3.13&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="nf"&gt;load&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;&lt;strong&gt;Step2:&lt;/strong&gt; Next.js listens to Still.js events via subscription. The Apploader SDK now supports init/on(‘load’) event, improving memory and CPU usage, so no setTimeout needed:&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="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// …. Above code&lt;/span&gt;
    &lt;span class="nx"&gt;stillApp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;load&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="nx"&gt;stillApp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;component&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ref1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;variableName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newData&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
           &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="nx"&gt;Still&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt; &lt;span class="nx"&gt;updated&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;variableName&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newData&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;Compared to part one of the series, the main differences in the Still.js app setup for Next.js is the need to specify PATH_PREFIX and, optionally, the framework version to define which Still.js version is used.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Embedding NPM remote component&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/RDUcSbUq6-k" rel="noopener noreferrer"&gt;The video tutorial&lt;/a&gt; demonstrates how the StillTreeView vendor component from Still.js is used in a real use case with Next.js + Still.js integration. The component is embedded directly from NPM as a remote as shown in the example below code snippet:&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;st-element&lt;/span&gt; &lt;span class="na"&gt;component=&lt;/span&gt;&lt;span class="s"&gt;"npm/@path/to/package/ComponentName”&amp;gt;&amp;lt;/st-element&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;As conclusion:&lt;/strong&gt;&lt;br&gt;
While not a bulletproof, Microfrontends are highly effective for complex, enterprise-scale applications. Remote components further enhance this architecture by promoting decoupling, feature sharing, and scalability. Ideally, these components should be self-contained for optimal results. Also, don't forget to check the video for more details.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Next?&lt;/strong&gt;&lt;br&gt;
Don't forget to check the video&lt;/p&gt;

&lt;p&gt;Try implementing a more complex Microfrontend with Still.js including navigation/routing (routing documentation)&lt;/p&gt;

&lt;p&gt;Try to compare different Microfrontend approaches with the way Still.js does disruptively&lt;/p&gt;

&lt;p&gt;Share your thoughts and ideas in case you have any concerning to this topic&lt;/p&gt;

&lt;p&gt;Bear for the next parts of this series&lt;/p&gt;

&lt;p&gt;Se you next time 👊🏽.&lt;/p&gt;

</description>
      <category>microfrontend</category>
      <category>stilljs</category>
      <category>nextjs</category>
      <category>stilljsandnextjs</category>
    </item>
    <item>
      <title>Getting Started with State Management in Still.js</title>
      <dc:creator>Nakassony Bernardo</dc:creator>
      <pubDate>Tue, 19 Aug 2025 15:28:26 +0000</pubDate>
      <link>https://dev.to/nakassony_bernardo_1d8896/getting-started-with-state-management-in-stilljs-252m</link>
      <guid>https://dev.to/nakassony_bernardo_1d8896/getting-started-with-state-management-in-stilljs-252m</guid>
      <description>&lt;p&gt;As part of modern Web Application, &lt;strong&gt;State management&lt;/strong&gt; cannot be put aside, as they're not a simple aspect of complement but a very important piece which applications can not live without especially when it comes to modularized frontend.&lt;/p&gt;

&lt;p&gt;See this video for hand-on practice: &lt;a href="https://youtu.be/la_V8f9Z-8o" rel="noopener noreferrer"&gt;Youtube video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow the official documentation: &lt;a href="https://still-js.github.io/stilljs-site/annotation/#inject-use-services-for-global-store-and-http-services" rel="noopener noreferrer"&gt;Still.js Service Doc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Join the discord channel if you have further questions: &lt;a href="https://discord.gg/qMpXJED5" rel="noopener noreferrer"&gt;Discord channel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://still-js.github.io/stilljs-site/" rel="noopener noreferrer"&gt;Still.js&lt;/a&gt;&lt;/strong&gt; provides different ways to handle State management (&lt;a href="https://www.youtube.com/watch?v=WuhGN4CICcs" rel="noopener noreferrer"&gt;component/local state management video&lt;/a&gt;), therefore when it comes to Global State management, it provides with a built-in features called Services thereby making it possible to handle things in a Reactive way. Follow the bellow illustration on how it works behind the scenes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2ih9ewlgajr1q61mk1m.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2ih9ewlgajr1q61mk1m.gif" alt=" " width="1536" height="864"&gt;&lt;/a&gt;&lt;br&gt;
Component 4 updates the store state, which is propagated to all subscribed components.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a Service in &lt;a href="https://still-js.github.io/stilljs-site/" rel="noopener noreferrer"&gt;Still.js&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
This a a piece in the code placed in the most extreme layer in terms of architecture, thereby allowing external communication through means like API/HTTP. Services also had the &lt;code&gt;ServiceEvent&lt;/code&gt; kind of variables that are declared as follow:&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;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;BaseService&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ServiceEvent&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="s2"&gt;../../@still/component/super/service/BaseService.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;//This class will be places in the app/services/ folder&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BiddingService&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;BaseService&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="cm"&gt;/** An array with a single country is being assigner */&lt;/span&gt;
    &lt;span class="nx"&gt;countryStore&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;ServiceEvent&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Australia&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In &lt;strong&gt;&lt;a href="https://still-js.github.io/stilljs-site/" rel="noopener noreferrer"&gt;Still.js&lt;/a&gt;&lt;/strong&gt;, all services must extend the BaseService class to be injectable into components. Reactive stores have to use the &lt;code&gt;ServiceEvent&lt;/code&gt; type. After creating a service, it should be injected using &lt;strong&gt;&lt;code&gt;@Inject&lt;/code&gt;&lt;/strong&gt;, and components can then listen to specific data changes from stores (e.g.&lt;code&gt;countryStore&lt;/code&gt; from above code):&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;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ViewComponent&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="s2"&gt;../../../@still/component/super/ViewComponent.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&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;BiddingService&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;../../service/BiddingService.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BiddingDisplay&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;ViewComponent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="nx"&gt;isPublic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="cm"&gt;/** 
     * @Inject
     * @Path services/
     * @type { BiddingService } */&lt;/span&gt;
     &lt;span class="nx"&gt;bService&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

     &lt;span class="nf"&gt;stAfterInit&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;bService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;load&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Check service readiness&lt;/span&gt;
               &lt;span class="c1"&gt;//Bellow, it Subscribe to ServiceEvent variable (countryStore)&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;bService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;countryStore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newValue&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                     &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;warn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`New country entered the Bid, follow the list: `&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newValue&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;In the above example, we are specifying the path (folder) where the service is located, but this can be defined globally in the App level.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://still-js.github.io/stilljs-site/" rel="noopener noreferrer"&gt;Still.js&lt;/a&gt;&lt;/strong&gt; uses event-based reactive state management, where components subscribe via the &lt;strong&gt;&lt;code&gt;onChange&lt;/code&gt;&lt;/strong&gt; event. Any change to the state triggers notifications to all subscribers, regardless of where the change originated.&lt;br&gt;
Retrieving value from the service is quite straightforward, as we only need to specify the store and put .value and the end as follow:&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="nf"&gt;getCountryInTheBid&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;countryState&lt;/span&gt; &lt;span class="o"&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;bService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;countryStore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`----&amp;gt; Country Store before updating: `&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;countryState&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;Updating a store is also a simple thing, in some cases we have to use some intermediate variables, this is the case of lists, follow the examples:&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="nf"&gt;addMoreCountry&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="cm"&gt;/** Retrieve the state */&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;countryState&lt;/span&gt; &lt;span class="o"&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;bService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;countryStore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="cm"&gt;/** Updating the store and re-assigning it to the service */&lt;/span&gt;
  &lt;span class="nx"&gt;countryState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Madagascar&lt;/span&gt;&lt;span class="dl"&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;bService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;countryStore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;countryState&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;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
Do not forget to check &lt;a href="https://discord.gg/qMpXJED5" rel="noopener noreferrer"&gt;the video tutrial&lt;/a&gt;;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://still-js.github.io/stilljs-site/" rel="noopener noreferrer"&gt;Still.js&lt;/a&gt;&lt;/strong&gt; uses event-based reactive state management that simplifies setup by requiring only services and ServiceEvent based stores. Components can inject these and implement their own logic, while any centralized logic can be handled in the main component.&lt;/p&gt;

&lt;p&gt;Se you in the next one 👊🏽&lt;/p&gt;

</description>
      <category>stilljsglobalstatemanagement</category>
      <category>globalstatemanagement</category>
      <category>stilljsstatemanagement</category>
      <category>stilljs</category>
    </item>
    <item>
      <title>From Vanilla Template to Still.js Components: A Full Build and Deployment Guide</title>
      <dc:creator>Nakassony Bernardo</dc:creator>
      <pubDate>Mon, 11 Aug 2025 02:46:32 +0000</pubDate>
      <link>https://dev.to/nakassony_bernardo_1d8896/from-vanilla-template-to-stilljs-components-a-full-build-and-deployment-guide-4d35</link>
      <guid>https://dev.to/nakassony_bernardo_1d8896/from-vanilla-template-to-stilljs-components-a-full-build-and-deployment-guide-4d35</guid>
      <description>&lt;h2&gt;
  
  
  A full Still.js build from raw HTML to deployment — with zero dependencies.
&lt;/h2&gt;

&lt;p&gt;A few days ago, I was asked about migrating a project to Still.js, this article is accompanied by a &lt;a href="https://youtu.be/tnEJ3GzaJRU" rel="noopener noreferrer"&gt;video&lt;/a&gt; demonstrating it.&lt;/p&gt;

&lt;p&gt;Because it’s built in Vanilla JavaScript, Still.js combines perfectly with a template that is based with pure/raw HTML, CSS and JavaScript, even if some library (e.g. jQuery, Bootstrap) was used, Still.js helps you to ease separate things into components, as showcased in &lt;a href="https://youtu.be/tnEJ3GzaJRU" rel="noopener noreferrer"&gt;this video&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What will be covered:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Migrating a Vanilla web template to Still.js&lt;/li&gt;
&lt;li&gt;Back down the template into components conveniently&lt;/li&gt;
&lt;li&gt;Load template’s JavaScript code properly according to Still.js architecture&lt;/li&gt;
&lt;li&gt;Deploy to the cloud&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Key Considerations:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When using templates with a lot animations, or that depends on different javaScript library to load, it’s important to deeply understand it (the template) so to orchestrate each script dependency just the same way it happens with raw HTML, CSS and JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minimalist third party Script dependency approach:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now a days a lot of features like animation and more (e.g. parallax, singlePageNav, dialog, IntersectionObserver - Lazy animation) are browser native, hence, this would impact a lot in the choosing on what/when to use libraries especially when it comes to animation which some web pages are depending a lot.&lt;/p&gt;

&lt;p&gt;Vanilla JavaScript is one of the core philosophy of Still.js, hence you can use everything as natural as possible from Web Semantic to straight DOM manipulation.&lt;/p&gt;

&lt;p&gt;We’ll use &lt;a href="https://templatemo.com/tm-593_personal_shape#google_vignette" rel="noopener noreferrer"&gt;this template&lt;/a&gt;, and we’ll be deploying our page to Render which will provide us with a custom domain. Follow the final result in the bellow short video:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/rDJoEtrkHpA"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;In summary, on the coding and structure side of things the steps will be as follow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the HTML code will be moved to the Still.js template/template file (.html)&lt;/li&gt;
&lt;li&gt;Run template JavaScript animation in the stAfterInit hook, ensuring it executes after component load&lt;/li&gt;
&lt;li&gt;Convert sections into autonomous components &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Still.js helps turn vanilla templates into fast, modular, and lightweight sites with zero dependencies, giving you full control using pure JavaScript. Proper code organization is key to avoid issues like bloating and conflicts, and a vanilla-first approach is recommended, external libraries should only be used when necessary. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Next?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Don't forget to follow &lt;a href="https://youtu.be/tnEJ3GzaJRU" rel="noopener noreferrer"&gt;the hands-on video&lt;/a&gt; till the end so we can make the deploy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Expand Your Still.js Skills&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explore advanced Still.js features like state management, routing, or
integrating APIs. &lt;/li&gt;
&lt;li&gt;Try building a small SPA or dashboard using
Still.js components capabilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Contribute to Still.js&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/still-js/core" rel="noopener noreferrer"&gt;Still.js is open-source&lt;/a&gt;, consider contributing or helping improve documentation. &lt;/li&gt;
&lt;li&gt;Join the &lt;a href="https://discord.com/invite/fUVJRTmQ9f" rel="noopener noreferrer"&gt;discord channel&lt;/a&gt; to get fast updates and follow the discussions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ask more if needed&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Share any topic you want to see cover so content (e.g. video, article) can be produced.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se ya in the next one 👊🏽&lt;/p&gt;

</description>
      <category>stilljs</category>
      <category>deploy</category>
      <category>javascript</category>
      <category>frontendframework</category>
    </item>
    <item>
      <title>Developing your first AI Agent for a Task Organizer with Still.js and Groq Infrastructure</title>
      <dc:creator>Nakassony Bernardo</dc:creator>
      <pubDate>Mon, 21 Jul 2025 00:14:55 +0000</pubDate>
      <link>https://dev.to/nakassony_bernardo_1d8896/developing-your-first-ai-agent-for-a-task-organizer-with-stilljs-and-groq-infrastructure-3ag2</link>
      <guid>https://dev.to/nakassony_bernardo_1d8896/developing-your-first-ai-agent-for-a-task-organizer-with-stilljs-and-groq-infrastructure-3ag2</guid>
      <description>&lt;p&gt;AI is now widely used for solving various problems, especially in the tech industry and among software developers. This article explores a specific use case of AI, focusing on certain key aspects while keeping the end-user in mind.&lt;/p&gt;

&lt;p&gt;In summary, the task organizer is a software tool designed to help users manage tasks over various timeframes. While powerful Project/Task Management solutions like Motion and ClickUp exist, here we’ll demonstrate the capabilities of &lt;a href="https://still-js.github.io/stilljs-site/" rel="noopener noreferrer"&gt;&lt;strong&gt;Still.js&lt;/strong&gt;&lt;/a&gt; by discussing and building a small PoC covering a specific and tiny aspect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI Agent vs Agentic AI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;According to google AI Overview "AI agents are specialized tools designed for specific, well-defined tasks, while Agentic AI represents a broader concept of autonomous, goal-driven systems that can adapt to changing situations, and coordinate actions with minimal human oversight"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From Generative AI to Generative UI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This concept involves generating UI dynamically based on user prompt. Different prompts produce different UI components. In our case, we’ll handle it using a client-side approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How our Agent will it work essentially?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The user will write a text with the tasks he'll do, specifying what, how and when&lt;/p&gt;

&lt;p&gt;Content is submitted to the Agent/LLM, which generates task(s)&lt;/p&gt;

&lt;p&gt;UI parses LLM response and decides, how/what predefined component to render/present&lt;/p&gt;

&lt;p&gt;User can then ask the agent to mark tasks as completed.&lt;/p&gt;

&lt;p&gt;Different points of the design systems are addressed in here, for the implementation there is a “&lt;a href="https://www.youtube.com/watch?v=x_gTiJKemcA" rel="noopener noreferrer"&gt;&lt;strong&gt;hands-on youtube video&lt;/strong&gt;&lt;/a&gt;” where a tiny implementation is built from scratch. Bellow is the design system depicting an overview of the solution.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxenj7f1i4trevnoo0waw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxenj7f1i4trevnoo0waw.gif" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We’ll consider essentially 3 main parts, the &lt;strong&gt;AI provider&lt;/strong&gt;, a &lt;strong&gt;custom Backend API&lt;/strong&gt;, and &lt;strong&gt;the UI&lt;/strong&gt; which we describe as follow:&lt;/p&gt;

&lt;p&gt;AI Provider supplies intelligent capabilities&lt;/p&gt;

&lt;p&gt;Backend provides a robust and secure integration with the AI, also serves the Frontend&lt;/p&gt;

&lt;p&gt;Frontend handles user input and displays the AI's results.&lt;/p&gt;

&lt;p&gt;In this use case, &lt;a href="https://still-js.github.io/stilljs-site/" rel="noopener noreferrer"&gt;Still.js&lt;/a&gt; features like runtime form generation and centralized form validation are leveraged to manage task completion. The structure includes three components:&lt;/p&gt;

&lt;p&gt;Home (main component),&lt;/p&gt;

&lt;p&gt;TaskDay (group of tasks),&lt;/p&gt;

&lt;p&gt;Task (individual tasks). Tasks report back to the Home component as form, enabling them to be marked as completed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://groq.com/" rel="noopener noreferrer"&gt;Groq infrastructure&lt;/a&gt; is what we'll use for LLM, however other AI providers like Google Gemini, ChatGPT, Copilot, LLaMa, or even offline/on-prem options like Ollama could also be used.&lt;/p&gt;

&lt;p&gt;Prompts are sent from the &lt;a href="https://still-js.github.io/stilljs-site/" rel="noopener noreferrer"&gt;Still.js&lt;/a&gt; enabled UI to the AI engine via chat, mainly as text, but it could support voice or audio.&lt;/p&gt;

&lt;p&gt;In production, long-term memory for LLMs or agents often requires connecting to external sources like vector databases, highlighting the need for a strong backend. &lt;strong&gt;Our agent will have a short-term memory which will be handle as the bellow design&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhrjnx56zkt8pv9mmtup3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhrjnx56zkt8pv9mmtup3.gif" alt=" " width="516" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bellow is an overview of our agent final result:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcdvto417iykh2t9ac29l.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcdvto417iykh2t9ac29l.gif" alt=" " width="760" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tool use and workflow management are key in Agentic AI, enabling both agency (thinking) and predictability (acting). For some tasks, a robust backend better supports these capabilities. &lt;strong&gt;The agent we'll build has moderate predictability&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In the demo, we’re connecting the UI straight to the AI engine for the sake of the size of the hands-on video tutorial, however this is also a valid scenario when using ephemeral API token&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Are you still here? Less talking, more doing, &lt;a href="https://www.youtube.com/watch?v=x_gTiJKemcA" rel="noopener noreferrer"&gt;&lt;strong&gt;click here&lt;/strong&gt;&lt;/a&gt; and follow the tutorial to build your first AI Agent.&lt;/p&gt;

&lt;p&gt;See you there 👊🏽&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Rethinking Microfrontend Architecture combining Still.js with React (or other Framewok) - The architecture serie</title>
      <dc:creator>Nakassony Bernardo</dc:creator>
      <pubDate>Wed, 18 Jun 2025 21:52:28 +0000</pubDate>
      <link>https://dev.to/nakassony_bernardo_1d8896/rethinking-microfrontend-architecture-combining-stilljs-with-react-or-other-framewok-the-jio</link>
      <guid>https://dev.to/nakassony_bernardo_1d8896/rethinking-microfrontend-architecture-combining-stilljs-with-react-or-other-framewok-the-jio</guid>
      <description>&lt;h3&gt;
  
  
  Why Microfrontend
&lt;/h3&gt;

&lt;p&gt;Building and modernizing large, and/or legacy enterprise level applications is often challenging, as it requires rewriting significant portions or even the entire application when moving to newer technology versions. &lt;strong&gt;Microfrontends&lt;/strong&gt; offer a practical solution to this problem, much like microservices do for backend. They're not just a buzzword, but a meaningful architectural approach for handling complexity and scalability. &lt;code&gt;Still.js&lt;/code&gt; enhances this by providing powerful and flexible means for building microfrontends, with seamless integration into frameworks like &lt;code&gt;React&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What problems and use cases can be addressed with Microfrontend?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Application decoupling;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Progressive migration from old to new version (e.g. migrate framework from  v2 to v15);&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fast implementation of new feature without disrupting the existing ecosystem;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fast Modernization of old/legacy application yet keeping things stable; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;and more...&lt;/p&gt;
&lt;h3&gt;
  
  
  How &lt;code&gt;Still.js&lt;/code&gt; (with React or others) for Microfrontend?
&lt;/h3&gt;

&lt;p&gt;Still.js is an open source modern, complete and &lt;code&gt;full-featured&lt;/code&gt; (with known capabilities and more) frontend framework built with vanilla JavaScript, designed for easy and scalable development and integration like embedding its app inside &lt;code&gt;React&lt;/code&gt; apps in form of components. Bellow is a high level architecture of the integration we'll go through.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsecewe577dhbt27en0j9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsecewe577dhbt27en0j9.jpg" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quite a lot can be done in terms of Microfrontend with Still.js, however in this article we're going to focus in introductions aspects, there is also a &lt;a href="https://youtu.be/8dPNkNhpbkc" rel="noopener noreferrer"&gt;video on youtube&lt;/a&gt; with a hands on tutorial.&lt;/p&gt;

&lt;h3&gt;
  
  
  Integrating with React (using Vite to generate the project)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;. Create your React App, using vite (follow &lt;a href="https://react.dev/learn/build-a-react-app-from-scratch#vite" rel="noopener noreferrer"&gt;React official documentation using Vite&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm create vite@latest my-app -- --template react&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;. Install React app dependencies.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm i&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;. In your React app, install the Still.js app loader from &lt;a href="https://www.npmjs.com/package/@stilljs/apploader" rel="noopener noreferrer"&gt;@stilljs/apploader&lt;/a&gt; (on npm), this is a regular (not dev) dependency.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm i @stilljs/apploader&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt;. Loading Still.js application inside React is done when the React component is mounted, we'll use the App.js(jsx,tsx,ts), which is the default React entry component.&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;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&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;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&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;RegularReactComponent&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="s2"&gt;./components/RegularReactComponent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&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;StillAppLoader&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;@stilljs/apploader&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="c1"&gt;// Creating App loader instance&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stillApp&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;StillAppLoader&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;stillApp&lt;/span&gt;
     &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cdn&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;STILL_HOME&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;public/micros/stillapp1/&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="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="c1"&gt;// Unload the App when React component gets unmounted&lt;/span&gt;
    &lt;span class="k"&gt;return &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;stillApp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;unload&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="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;RegularReactComponent&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/RegularReactComponent&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="nx"&gt;validating&lt;/span&gt; &lt;span class="nx"&gt;local&lt;/span&gt; &lt;span class="nx"&gt;Still&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt; &lt;span class="nx"&gt;embeding&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;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;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 5&lt;/strong&gt;. Creating the Still.js App&lt;br&gt;
React project generated with Vite provides a folder named &lt;code&gt;public/&lt;/code&gt; right on the root along with &lt;code&gt;src/&lt;/code&gt; and others, there (public) we generate our Still.js app&lt;/p&gt;

&lt;p&gt;Still CLI provides the &lt;code&gt;still lone&lt;/code&gt; command to create a Microfrontend/Lone project, providing it with very minimal setup, having the CLI installed, type in your terminal (follow the animated image):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;still lone&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/lloQ8AVLjAs"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6&lt;/strong&gt; Create a Still.js lone component in the CDN approach&lt;br&gt;
It’s called “lone” because Still.js isn’t installed locally, just the component and routes file are there and it behaves the same. With CLI installed type the bellow in terminal.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;still c cp app/components/TestComponent --lone&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/XtTlIzPDjiI"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7&lt;/strong&gt; Embed Still.js component inside React app/component&lt;br&gt;
We'll change the return portion and add the Still component as follow:&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;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;RegularReactComponent&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/RegularReactComponent&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="nx"&gt;validating&lt;/span&gt; &lt;span class="nx"&gt;local&lt;/span&gt; &lt;span class="nx"&gt;Still&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt; &lt;span class="nx"&gt;embeding&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;st&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;TestComponent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/st-element&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;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;)&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 8&lt;/strong&gt;. Running the React app:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run dev&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Final result
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0oncvj3eqa5sv6dftti9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0oncvj3eqa5sv6dftti9.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Intercommunication between React and Still.js
&lt;/h3&gt;

&lt;p&gt;Communication is feasible between React and Still.js once App/component is embeded, for that, we use the AppLoader as Proxy. but for the sake of size of this article we're not depicting it here, instead you can see &lt;a href="https://youtu.be/8dPNkNhpbkc" rel="noopener noreferrer"&gt;this tutorial on Youtube&lt;/a&gt; which an implementation is done in practice step by step.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Microfrontends&lt;/strong&gt; aren’t a one-size-fits-all solution, but they’re ideal for highly modular and fast-evolving applications, such as modernizing legacy systems. &lt;code&gt;Still.js&lt;/code&gt; enhances this flexibility by being framework-agnostic and built entirely in &lt;strong&gt;vanilla JavaScript&lt;/strong&gt;, making it easy to adapt to any scenario, even when traditional frameworks fall short.&lt;/p&gt;

&lt;p&gt;Give it a try and leverage the full potential of this architectural approach.&lt;/p&gt;

&lt;h2&gt;
  
  
  See you next time! 👊🏽
&lt;/h2&gt;

</description>
      <category>architecture</category>
      <category>microfrontend</category>
      <category>stilljs</category>
      <category>react</category>
    </item>
    <item>
      <title>Still.js - A way to leverage Vanilla JavaScript for Complex and Enterprise Level Web Development</title>
      <dc:creator>Nakassony Bernardo</dc:creator>
      <pubDate>Thu, 05 Jun 2025 23:06:53 +0000</pubDate>
      <link>https://dev.to/nakassony_bernardo_1d8896/stilljs-a-way-to-leverage-vanilla-javascript-for-complex-and-enterprise-level-web-development-42oi</link>
      <guid>https://dev.to/nakassony_bernardo_1d8896/stilljs-a-way-to-leverage-vanilla-javascript-for-complex-and-enterprise-level-web-development-42oi</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2cqaa8rtf321p4us4fk7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2cqaa8rtf321p4us4fk7.png" alt="Image description" width="80" height="80"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When it comes to complex web application development on the frontend, we often encounter the need to implement features using vanilla JavaScript—whether it’s for direct DOM manipulation or integrating a specific jQuery plugin. Sometimes, a from-scratch implementation using plain HTML, CSS, and vanilla JavaScript is the best (or only) choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Still.js
&lt;/h2&gt;

&lt;p&gt;Still.js is a modern framework that offers the same capabilities as Angular, React, and Vue—without abandoning vanilla JavaScript.&lt;/p&gt;

&lt;p&gt;Because of its pure JS approach, Still.js:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does not require preprocessing&lt;/li&gt;
&lt;li&gt;Does not depend on bundlers like Webpack or Vite&lt;/li&gt;
&lt;li&gt;Is ideal for teams and developers who prefer direct, no-compromise access to native web technologies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check it up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visit &lt;a href="https://stilljs.dev/" rel="noopener noreferrer"&gt;stilljs.dev&lt;/a&gt; or the &lt;a href="https://still-js.github.io/stilljs-site/" rel="noopener noreferrer"&gt;github page&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://youtube.com/playlist?list=PLgMBuN68PdkuCOegO8DS_a1RduYowbMYU&amp;amp;si=7tXrIPghlh-1bvQO" rel="noopener noreferrer"&gt;See youtube playlist&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Join and discuss on &lt;a href="https://discord.com/invite/fUVJRTmQ9f" rel="noopener noreferrer"&gt;Discord channel&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Suitable for complex and enterprise applications
&lt;/h2&gt;

&lt;p&gt;Enterprise-grade web applications need more than just rich UI features. They require: &lt;code&gt;modularization&lt;/code&gt;, &lt;code&gt;user permission management&lt;/code&gt;, &lt;code&gt;component routing&lt;/code&gt;, &lt;code&gt;validation&lt;/code&gt;, &lt;code&gt;separation of concern&lt;/code&gt;, &lt;code&gt;communication management&lt;/code&gt;, &lt;code&gt;Micro-frontend architecture (e.g. Frontend embedding and interaction)&lt;/code&gt;, and more.&lt;/p&gt;

&lt;p&gt;Still.js supports all of this features natively without the burden of a bundler increasing build time and potential complexity or even tooling overhead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some code samples
&lt;/h2&gt;

&lt;p&gt;📌 Note: Those will only work within a Still.js project with the correct setup, which is thoroughly explained in the official documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basic component:&lt;/strong&gt;&lt;br&gt;
Bellow is a simple component implementing a counter, inspite the template is placed inside the class, it can be moved to a &lt;code&gt;.html&lt;/code&gt; file which is appropriate in complex apps.&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="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CounterComponent&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;ViewComponent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="nx"&gt;isPublic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;count&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;template&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
    &amp;lt;div&amp;gt;
        &amp;lt;p&amp;gt;My counter state is @count&amp;lt;/p&amp;gt;
        &amp;lt;button (click)="increment()"&amp;gt;Increment (@count)&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
    `&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nf"&gt;increment&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;count&lt;/span&gt; &lt;span class="o"&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;count&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&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;&lt;strong&gt;Basic User authorization management&lt;/strong&gt;&lt;br&gt;
In the bellow implementation we're stating that some components won't be accessible by the user, this can be done with proper business logic according to the user role checking.&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;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;StillAppMixin&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="s2"&gt;./@still/component/super/AppMixin.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&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;Components&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="s2"&gt;./@still/setup/components.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&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;AppTemplate&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="s2"&gt;./app-template.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&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;CheckingAccount&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="s2"&gt;./app/components/BankAccount/CheckingAccount.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&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;NewAccountForm&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="s2"&gt;./app/components/BankAccount/NewAccountForm.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&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;SavingAccount&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="s2"&gt;./app/components/BankAccount/SavingAccount.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;StillAppSetup&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;StillAppMixin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Components&lt;/span&gt;&lt;span class="p"&gt;)&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="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="c1"&gt;//Bellow the entry point component is being set&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setHomeComponent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;NewAccountForm&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;blackListComponents&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;SavingAccount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CheckingAccount&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="c1"&gt;//Make components black-listed by passing it to setBlackList App configuration&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setBlackList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;blackListComponents&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;init&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="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;AppTemplate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;newApp&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;&lt;strong&gt;Basic Form validation&lt;/strong&gt;&lt;br&gt;
Still.js provides built-in validators, but custom ones can be implemented effortlessly.&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;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ViewComponent&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="s2"&gt;../../../@still/component/super/ViewComponent.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BasicForm&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;ViewComponent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="nx"&gt;isPublic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;firstName&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="nx"&gt;shoeSize&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nx"&gt;template&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
    &amp;lt;div&amp;gt;
        &amp;lt;form&amp;gt;
            &amp;lt;div class="form-group"&amp;gt;
                &amp;lt;label&amp;gt;Shoe Size&amp;lt;/label&amp;gt;
                &amp;lt;input 
                    (value)="shoeSize" 
                    (validator)="number" 
                    (validator-warn)="Invalid shoe size, number is required"
                    placeholder="Enter valid shoe size"
                &amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/form&amp;gt;
    &amp;lt;/div&amp;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;&lt;strong&gt;Global State management&lt;/strong&gt;&lt;br&gt;
A service serves for both Global reactive storage and data flow (e.g. HTTP requests) implementations. Services path can be set in the application level, and we can overriden for specific service with &lt;code&gt;@Path&lt;/code&gt; annotation.&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;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ViewComponent&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="s2"&gt;../../../@still/component/super/ViewComponent.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&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;CustomersService&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="s2"&gt;../../service/api/CustomersService.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BiddingDisplay&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;ViewComponent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="nx"&gt;isPublic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="cm"&gt;/** Service declaration, will get injected automatically due to Inject anottation
     *  from the specified Path path due to the annotation
     * @Inject
     * @Path service/api/
     * @type { CustomersService } */&lt;/span&gt;
    &lt;span class="nx"&gt;custService&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nx"&gt;template&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="cm"&gt;/** Component Hook which takes place when it's completly render and startder */&lt;/span&gt;
    &lt;span class="nf"&gt;stAfterInit&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;custService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;customerList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;newValue&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
            &lt;span class="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;Ths customerList store got updated with: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newValue&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;h2&gt;
  
  
  Hurry up, get yourself started with Still.js
&lt;/h2&gt;

&lt;p&gt;Still.js is available through NPM on &lt;a href="https://www.npmjs.com/package/@stilljs/cli?ref=pkgstats.com" rel="noopener noreferrer"&gt;@stilljs/cli&lt;/a&gt;. Watch the &lt;a href="https://youtube.com/playlist?list=PLgMBuN68Pdks-lU0R95LRzXJWgpXL48Vn&amp;amp;si=HMI9nReqxxbU59tE" rel="noopener noreferrer"&gt;Youtube ▶️ playlist&lt;/a&gt; and bear for more coming ones. &lt;/p&gt;

&lt;p&gt;Watch &lt;a href="https://www.youtube.com/watch?v=Q7mQYGnjAX8&amp;amp;list=PLgMBuN68Pdks-lU0R95LRzXJWgpXL48Vn&amp;amp;index=3" rel="noopener noreferrer"&gt;this Tudo App tutorial on Youtube ▶️&lt;/a&gt;, clone or download the provided &lt;a href="https://github.com/still-js/samples/tree/main/todo-app" rel="noopener noreferrer"&gt;GitHub Todo app project&lt;/a&gt;  and run locally. It demonstrates key concepts like &lt;code&gt;component communication&lt;/code&gt;, &lt;code&gt;event and state binding&lt;/code&gt;, &lt;code&gt;reactive updates&lt;/code&gt;, &lt;code&gt;@Proxy&lt;/code&gt;, and &lt;code&gt;component styling&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Connect and share your feedback on the &lt;a href="https://discord.com/invite/fUVJRTmQ9f" rel="noopener noreferrer"&gt;Discord channel&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>framework</category>
      <category>microfrontend</category>
      <category>web</category>
    </item>
  </channel>
</rss>
