<?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: Evolved-Tech</title>
    <description>The latest articles on DEV Community by Evolved-Tech (@evolvedtech_27a34e6a5cf9).</description>
    <link>https://dev.to/evolvedtech_27a34e6a5cf9</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3989902%2Fcc4b311c-fa33-48d9-9c31-2865909e6317.jpg</url>
      <title>DEV Community: Evolved-Tech</title>
      <link>https://dev.to/evolvedtech_27a34e6a5cf9</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/evolvedtech_27a34e6a5cf9"/>
    <language>en</language>
    <item>
      <title>Limn Engine Just Got Smarter — Here's What We Added (And Why It Matters)</title>
      <dc:creator>Evolved-Tech</dc:creator>
      <pubDate>Mon, 07 Sep 2026 19:08:00 +0000</pubDate>
      <link>https://dev.to/evolvedtech_27a34e6a5cf9/limn-engine-just-got-smarter-heres-what-we-added-and-why-it-matters-1m7i</link>
      <guid>https://dev.to/evolvedtech_27a34e6a5cf9/limn-engine-just-got-smarter-heres-what-we-added-and-why-it-matters-1m7i</guid>
      <description>&lt;p&gt;The question that started it all: "Why do we have to write the same code in every single game?" So we built Limn Engine — a zero-configuration, browser-based 2D game engine that hits 60 FPS on hardware old enough to vote. It got published on SitePoint and ranked #3 among 2D JavaScript game engines, which we now mention in every conversation, including this one.&lt;/p&gt;

&lt;p&gt;Today's post is about what's new. And to be crystal clear: &lt;strong&gt;all of it is live right now.&lt;/strong&gt; Not "coming soon," not "in beta," not "works on our machine." You can go use every single feature below today, this minute, before you even finish this sentenc—okay you finished it, go use them.&lt;/p&gt;

&lt;p&gt;Fair warning: some of these features exist purely because we got tired of doing something annoying, several times, in a row, forever.&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl9uae5lx9tq4dsebto6x.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl9uae5lx9tq4dsebto6x.png" alt="Image showing the playground editor with its sharable url button" width="799" height="454"&gt;&lt;/a&gt;&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0zueiudeiwmv7kmv2k3w.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0zueiudeiwmv7kmv2k3w.png" alt="Image showing the sign up page of limn Engine" width="800" height="451"&gt;&lt;/a&gt;&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqrhtc0w0l3ovtevvy1fg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqrhtc0w0l3ovtevvy1fg.png" alt="Image showing the homepage of limn engine" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuk0lg23m66tb8r49h6sp.png" alt="Image showing the inbox page of limn engine" width="800" height="446"&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📋 The TL;DR (For Those Who Scroll First, Read Later — No Judgment)
&lt;/h3&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;What It Does&lt;/th&gt;
&lt;th&gt;Why You'll Care&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🔐 &lt;strong&gt;Google OAuth&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;One-click sign-in via Google, plus email OTP as backup. Powered by Supabase Auth.&lt;/td&gt;
&lt;td&gt;No passwords, no forms, no "forgot password" emails haunting your inbox at 3 AM.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔗 &lt;strong&gt;Shareable Code Snippets&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Write code in the playground, hit Share, get a unique URL.&lt;/td&gt;
&lt;td&gt;Send exact working code to friends instead of dumping 200 lines into Discord like a ransom note.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔍 &lt;strong&gt;Universal Search&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Global search overlay — hit ESC or click the icon.&lt;/td&gt;
&lt;td&gt;Find docs, API refs, tutorials, and community posts instantly. Even we use it now.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📱 &lt;strong&gt;Touch-Friendly Design&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Fully responsive interface across desktop, tablet, and phone.&lt;/td&gt;
&lt;td&gt;Build your game from the couch. We don't make the rules, we just enable them.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💬 &lt;strong&gt;Inbox &amp;amp; Messaging&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Built-in messaging system for updates and collaborator chats.&lt;/td&gt;
&lt;td&gt;Stay in the loop without alt-tabbing to five other apps.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Status: all shipped. All live. Go bother them.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now, for those of you who like the director's commentary — here's the full story behind each one.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Problems That Kept Us Up At Night
&lt;/h3&gt;

&lt;p&gt;Rule one of building Limn Engine: "Common outcomes should be functions." Edge detection, camera math, collision loops — if we typed it twice, it became &lt;code&gt;move.bound(player)&lt;/code&gt; or &lt;code&gt;camera.shake(5,5)&lt;/code&gt; before we typed it a third time out of spite.&lt;/p&gt;

&lt;p&gt;But the engine's &lt;em&gt;infrastructure&lt;/em&gt; needed the same intervention. Three problems in particular were staging a nightly protest in our brains:&lt;/p&gt;

&lt;p&gt;· &lt;strong&gt;Authentication&lt;/strong&gt; — every game needs users, and building sign-up/login/password-reset from scratch takes weeks we do not have and would rather spend on, frankly, anything else.&lt;br&gt;
· &lt;strong&gt;Collaboration&lt;/strong&gt; — "send us your code" in Discord meant receiving 200 unformatted lines that looked like a ransom note.&lt;br&gt;
· &lt;strong&gt;Discovery&lt;/strong&gt; — finding anything on our own website had become a scavenger hunt with no prize at the end.&lt;/p&gt;

&lt;p&gt;So, in the spirit of turning problems into functions, we fixed them. All three. They're live. We already told you that but it bears repeating because we're proud of ourselves.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔐 Google OAuth: One Click, No Passwords — Live Now
&lt;/h3&gt;

&lt;p&gt;Nobody has ever, in the history of the internet, been excited to "Create an account." You see that button, your soul leaves your body a little, and you close the tab. We know. We've done it to other websites while building the fix for our own.&lt;/p&gt;

&lt;p&gt;So Limn Engine now runs on Google OAuth as the primary login method:&lt;/p&gt;

&lt;p&gt;· &lt;strong&gt;One click, and you're in.&lt;/strong&gt; No forms, no email verification purgatory, no "forgot password" email arriving at 3 AM to remind you of your own incompetence.&lt;br&gt;
· &lt;strong&gt;Instant onboarding&lt;/strong&gt; — straight to building, zero friction, zero excuses left to procrastinate with.&lt;br&gt;
· &lt;strong&gt;We never see your password&lt;/strong&gt;, mostly because we don't want that responsibility. Google can have it. Google seems more organized than us.&lt;/p&gt;

&lt;p&gt;Prefer not to hand Google the keys? We also added email OTP login, because choice is nice and so is not being cornered.&lt;/p&gt;

&lt;p&gt;Under the hood, this runs on Supabase Auth, a real production-grade auth system built by people who are much better at this than we are. We know our strengths, and "building auth from scratch" is not one of them. We have games to make.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The takeaway:&lt;/strong&gt; authentication should never be the reason someone bounces off your engine. Consider that reason eliminated. You're welcome.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔗 Shareable Code Snippets: Collaboration Without The Crime Scene — Live Now
&lt;/h3&gt;

&lt;p&gt;This one's personal.&lt;/p&gt;

&lt;p&gt;Every debugging session in Discord went the same way: "send us your code," followed by 200 lines of unindented JavaScript arriving like evidence at a trial nobody asked for. Our DMs looked less like a support channel and more like a crime scene with syntax errors.&lt;/p&gt;

&lt;p&gt;So now the playground has a Share button that generates one clean URL, sendable anywhere — Discord, WhatsApp, Twitter, email, and yes we did consider carrier pigeon and no it did not make the roadmap.&lt;/p&gt;

&lt;p&gt;What that gets you:&lt;/p&gt;

&lt;p&gt;· &lt;strong&gt;Debugging that doesn't require detective work&lt;/strong&gt; — stuck on a physics bug? Send the link. Your friend sees exactly what you see, and "works on my machine" officially retires.&lt;br&gt;
· &lt;strong&gt;A place to flex&lt;/strong&gt; — nailed a particle effect in 30 seconds? Send the link and let people watch it run live, no copy-paste required.&lt;br&gt;
· &lt;strong&gt;A Discord server that's actually readable&lt;/strong&gt; — no more scrolling past a wall of code to find the one message that matters. Our eyes, and yours, say thank you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The takeaway:&lt;/strong&gt; sharing code is now exactly as easy as sharing a meme, which was frankly always the bar.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔍 Universal Search: Find Anything, Instantly — Live Now
&lt;/h3&gt;

&lt;p&gt;Our website had grown a lot of rooms and forgotten to build any hallways. Docs, API references, tutorials, community posts — all real, all somewhere, none easily findable, including by us. We have genuinely spent 10 minutes hunting for our own documentation, which is a special kind of humbling.&lt;/p&gt;

&lt;p&gt;So we built a global search overlay. Hit ESC, or click the icon, type your question, get your answer. No reloads, no menu spelunking.&lt;/p&gt;

&lt;p&gt;Searchable: API references, documentation, community threads, game templates, tutorials, and everything else we forgot to list here (which the search bar will also find, conveniently).&lt;/p&gt;

&lt;p&gt;It's fast, it's obvious, and it makes Limn Engine feel like a serious tool built by serious people — a costume we are, at this point, fully committed to wearing in public.&lt;/p&gt;




&lt;h3&gt;
  
  
  📱 Touch-Friendly Design: Build Anywhere — Live Now
&lt;/h3&gt;

&lt;p&gt;Games get played on desktops, tablets, and phones, so it never made sense that you could only &lt;em&gt;build&lt;/em&gt; one hunched over a laptop like it's a ritual. We rebuilt the interface to be genuinely touch-responsive, whether you're:&lt;/p&gt;

&lt;p&gt;· Skimming docs on a tablet in bed&lt;br&gt;
· Managing your community from your phone on a lunch break&lt;br&gt;
· Poking at your game on whatever screen happens to be nearby&lt;/p&gt;

&lt;p&gt;No pinch-to-zoom archaeology, no buttons sized for a smaller species of thumb. Just an interface that works wherever you decided to be productive today, including the couch, which we fully endorse.&lt;/p&gt;




&lt;h3&gt;
  
  
  💬 Inbox &amp;amp; Messaging: Stay Connected — Live Now
&lt;/h3&gt;

&lt;p&gt;Building alone is fine. Building with people who occasionally message you back is better. So we added a built-in inbox and messaging system for:&lt;/p&gt;

&lt;p&gt;· Getting updates and announcements, so "what's new" isn't a mystery&lt;br&gt;
· Talking to collaborators without leaving the platform&lt;br&gt;
· Staying plugged into the wider Limn Engine community&lt;/p&gt;

&lt;p&gt;It's a small feature that makes us feel disproportionately like a real company — one with an actual office, not just a room, some laptops, and a shared refusal to give up.&lt;/p&gt;




&lt;h3&gt;
  
  
  🎮 What's Next?
&lt;/h3&gt;

&lt;p&gt;Currently in the workshop (these ones, unlike everything above, are genuinely not out yet — we'd tell you):&lt;/p&gt;

&lt;p&gt;· &lt;strong&gt;TypeScript support&lt;/strong&gt; — for developers who like their errors caught before runtime, understandably&lt;br&gt;
· &lt;strong&gt;An NPM package&lt;/strong&gt; — &lt;code&gt;npm install limn-engine&lt;/code&gt; is coming, we promise, for real this time&lt;br&gt;
· &lt;strong&gt;More game templates&lt;/strong&gt; — for when the blank canvas is scarier than the actual coding&lt;br&gt;
· &lt;strong&gt;Better physics and particles&lt;/strong&gt; — because if something explodes in your game, it should look &lt;em&gt;incredible&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We're building this for the long haul, and we'd like some company.&lt;/p&gt;




&lt;h3&gt;
  
  
  🙌 Join The Community
&lt;/h3&gt;

&lt;p&gt;Already here? You're basically family at this point, and we mean that with zero legal obligation attached.&lt;/p&gt;

&lt;p&gt;New? Come say hi:&lt;/p&gt;

&lt;p&gt;· &lt;strong&gt;#beginner-help&lt;/strong&gt; — no question is too small, we've asked worse&lt;br&gt;
· &lt;strong&gt;#showcase&lt;/strong&gt; — show us your first game, we will cheer, possibly too loudly&lt;br&gt;
· &lt;strong&gt;#engine-dev&lt;/strong&gt; — help build the engine itself, we need every hand we can get&lt;br&gt;
· &lt;strong&gt;#performance&lt;/strong&gt; — help us make this thing run on a toaster, we're only half joking&lt;/p&gt;




&lt;h3&gt;
  
  
  🏁 Final Thoughts
&lt;/h3&gt;

&lt;p&gt;We started with a Toshiba laptop, 4GB of RAM, and one stubborn question: "Why do we have to write the same code in every single game?"&lt;/p&gt;

&lt;p&gt;That question is now a real, live, shipped engine with:&lt;/p&gt;

&lt;p&gt;· Zero configuration, because life is complicated enough already&lt;br&gt;
· 60 FPS on low-end hardware, yes, even that one&lt;br&gt;
· Google OAuth, one click, no passwords, no drama&lt;br&gt;
· Shareable code snippets, because copy-paste had its moment and that moment ended&lt;br&gt;
· Universal search, so nobody has to hunt for their own documentation again (looking at us)&lt;br&gt;
· Touch-friendly design, because the couch is a legitimate workstation&lt;br&gt;
· A community that keeps showing up, which is honestly the part we're proudest of&lt;/p&gt;

&lt;p&gt;Built by a team that refused to give up, mostly out of stubbornness.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔗 Links
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;💬 &lt;strong&gt;Discord&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;&lt;a href="https://discord.gg/kVpSmYWXr" rel="noopener noreferrer"&gt;discord.gg/kVpSmYWXr&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;💻 &lt;strong&gt;GitHub&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/terracodes004" rel="noopener noreferrer"&gt;github.com/terracodes004&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;✉️ &lt;strong&gt;Support Email&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;&lt;a href="mailto:evolvedtech004@gmail.com"&gt;evolvedtech004@gmail.com&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Got questions, bugs, or just want to show off what you built? Drop into the Discord or email us — we read everything, we promise, we're not just saying that like a company that doesn't.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Draw your game into existence — the easy and advanced way.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>javascript</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>How We Upgraded Our Limn Engine Playground Editor To Support Version 4</title>
      <dc:creator>Evolved-Tech</dc:creator>
      <pubDate>Mon, 24 Aug 2026 23:17:17 +0000</pubDate>
      <link>https://dev.to/evolvedtech_27a34e6a5cf9/how-we-upgraded-our-limn-engine-playground-editor-to-support-version-4-2e75</link>
      <guid>https://dev.to/evolvedtech_27a34e6a5cf9/how-we-upgraded-our-limn-engine-playground-editor-to-support-version-4-2e75</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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn5g87pj9njntt6prql4y.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn5g87pj9njntt6prql4y.jpg" alt="Limn Engine Playground Editor v4 interface showing version dropdown" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction: See What We Built
&lt;/h2&gt;

&lt;p&gt;Every game engine creator dreams of a seamless developer experience. Imagine opening a web-based playground, clicking a version dropdown menu, switching to Version 4, and instantly seeing your game run with brand-new features like built-in particle systems and audio management. Today, we want to walk you through how we updated our custom HTML5 canvas framework editor—Limn Engine—so it dynamically detects and routes Version 4 (epic.js) alongside our older releases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Download Limn Engine
&lt;/h2&gt;

&lt;p&gt;Before writing or running any editor logic, you need to acquire the core engine build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to the official website and download the core engine script file named &lt;code&gt;epic.js&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Keeping this file hosted and accessible allows your playground editor to inject it directly into runtime previews whenever a developer tests their game.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Teaching Style: Understanding How Version Routing Works
&lt;/h2&gt;

&lt;p&gt;Let me explain what this means for our editor architecture. A web-based code playground does not magically know which engine version a developer wants to use; it has to inspect the user interface dynamically. Here's what each part does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Our editor scans the DOM for any select dropdown elements.&lt;/li&gt;
&lt;li&gt;It evaluates their text content for version numbers.&lt;/li&gt;
&lt;li&gt;It maps that selection to the correct script file URL.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's look at how we implemented this logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Breaking Down the Code Line by Line
&lt;/h2&gt;

&lt;p&gt;Before looking at code, here is what we are about to build: a two-part update to our editor's &lt;code&gt;runn()&lt;/code&gt; function that checks for Version 4 and maps it to our new asset URL.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Updating the Scanner Loop
&lt;/h3&gt;

&lt;p&gt;First, let's examine how we updated the scanner loop to recognize V4:&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;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;select&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;allDropdowns&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;select&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="c1"&gt;// Include V4 so the version detector targets it correctly&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;V2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;V3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;V4&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;select&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="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;V&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;versionDropdown&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;select&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;text.includes('V4'):&lt;/strong&gt; We added this check so that when the editor reads our UI elements, it officially registers Version 4 as a valid release option instead of skipping it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Updating Script Routing Conditionals
&lt;/h3&gt;

&lt;p&gt;Next, let's look at how we updated the script routing conditionals:&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;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;versionDropdown&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;selectedVersion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;versionDropdown&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="nf"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;selectedVersion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;v2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;engineScriptFile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tcjsgame-v2.js&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="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;selectedVersion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;v3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;engineScriptFile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tcjsgame-v3.js&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="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;selectedVersion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;v4&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;engineScriptFile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[https://limn-engine-doc.vercel.app/asset/epic.js](https://limn-engine-doc.vercel.app/asset/epic.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;// Points to v4&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;ul&gt;
&lt;li&gt;
&lt;strong&gt;selectedVersion.includes('v4'):&lt;/strong&gt; When a user selects v4 from the dropdown, this conditional matches the string and targets our newly hosted epic.js file for preview injection.
After coding, what we've accomplished is a lightweight, zero-dependency version switcher that connects UI dropdowns directly to our core framework files without requiring a heavy backend server.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Honesty About Our Limitations
&lt;/h2&gt;

&lt;p&gt;While string-matching UI elements is a fast and straightforward way to build a custom code playground, we have to be honest about its trade-offs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If someone alters our HTML label text or renames option values without updating the script check, version routing can fail.&lt;/li&gt;
&lt;li&gt;Larger commercial IDEs use robust configuration objects or package manager manifests instead. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, for a lightweight, custom-built framework like Limn Engine, string filtering keeps things simple and easy to maintain. We believe in letting developers choose the architecture that best fits their project goals.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You've Learned
&lt;/h2&gt;

&lt;p&gt;To summarize the key concepts we covered while making these changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DOM Traversal:&lt;/strong&gt; Dynamically scanning page dropdowns using &lt;code&gt;querySelectorAll('select')&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;String Filtering:&lt;/strong&gt; Extending conditional logic to recognize the V4 keyword.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Script Injection:&lt;/strong&gt; Mapping user version selections directly to the core &lt;code&gt;epic.js&lt;/code&gt; source URL.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Resource Hub
&lt;/h2&gt;

&lt;p&gt;If you want to check out our framework files or connect with our creator community, explore these links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Documentation &amp;amp; Assets:&lt;/strong&gt; Visit the &lt;a href="https://limn-engine-doc.vercel.app/asset/epic.js" rel="noopener noreferrer"&gt;Limn Engine Vercel Assets&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community &amp;amp; Support:&lt;/strong&gt; Join our &lt;a href="https://discord.gg/kVpSmYWXr" rel="noopener noreferrer"&gt;Discord server&lt;/a&gt; to share feedback and get help.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source Code:&lt;/strong&gt; Review updates and templates on &lt;a href="https://github.com/terracodes004/limn-engine-doc" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>tutorial</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
