<?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>Forem: TinyMCE</title>
    <description>The latest articles on Forem by TinyMCE (@tinymce).</description>
    <link>https://forem.com/tinymce</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%2Forganization%2Fprofile_image%2F7097%2Ff7168876-89f8-4a98-b9f5-0d9644d4125e.png</url>
      <title>Forem: TinyMCE</title>
      <link>https://forem.com/tinymce</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tinymce"/>
    <language>en</language>
    <item>
      <title>TinyMCE 7.8 Release Notes - New Filters in Image Optimizer and React 19 support</title>
      <dc:creator>Mrinalini Sugosh (Mrina)</dc:creator>
      <pubDate>Tue, 22 Apr 2025 01:36:38 +0000</pubDate>
      <link>https://forem.com/tinymce/tinymce-78-release-notes-new-filters-in-image-optimizer-and-react-19-support-17de</link>
      <guid>https://forem.com/tinymce/tinymce-78-release-notes-new-filters-in-image-optimizer-and-react-19-support-17de</guid>
      <description>&lt;p&gt;TinyMCE 7.8 enhances productivity with new Image Optimizer filters for effortless, on-brand editing and compatibility, with full support for React 19.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's New and Improved?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Image Optimizer (New Filters &amp;amp; Improved Accessibility)
&lt;/h3&gt;

&lt;p&gt;The Image Optimizer advanced feature now offers new, professionally-designed photo filters to enhance images with just a click. Additionally, accessibility improvements provide a smoother UX across all supported platforms.&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%2Fqnruvqf4it9wl7miwe95.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%2Fqnruvqf4it9wl7miwe95.png" alt="Image Filters" width="800" height="609"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more details, see the &lt;a href="https://www.tiny.cloud/docs/tinymce/latest/uploadcare/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-8-release" rel="noopener noreferrer"&gt;Image Optimizer Feature Documentation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  React 19 Compatibility
&lt;/h3&gt;

&lt;p&gt;TinyMCE now offers full support for React 19, providing developers with quick integration and seamless compatibility.&lt;/p&gt;

&lt;p&gt;For more details, see the&lt;a href="https://www.tiny.cloud/docs/tinymce/latest/react-cloud/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-8-release" rel="noopener noreferrer"&gt;React Integration Documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Improvements and Fixes in TinyMCE 7.8
&lt;/h2&gt;

&lt;p&gt;TinyMCE 7.8 also includes several usability, accessibility, and compatibility improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Added performance for Image Optimizer with faster loading times&lt;/li&gt;
&lt;li&gt;Better error handling and clearer messages for configuration issues&lt;/li&gt;
&lt;li&gt;Minor bug fixes to improve editor stability across various environments&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Get TinyMCE 7.8
&lt;/h2&gt;

&lt;h3&gt;
  
  
  New to TinyMCE?
&lt;/h3&gt;

&lt;p&gt;Sign up for a free API key to start with a 14-day trial of premium features.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.tiny.cloud/auth/signup/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-8-release" rel="noopener noreferrer"&gt;Sign Up for Free&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Upgrading from TinyMCE 6 or 7?
&lt;/h3&gt;

&lt;p&gt;Check out our &lt;strong&gt;&lt;a href="https://www.tiny.cloud/blog/how-to-upgrade-to-tinymce-7/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-8-release" rel="noopener noreferrer"&gt;Migration Guide&lt;/a&gt;&lt;/strong&gt; for a seamless upgrade.  &lt;/p&gt;

&lt;p&gt;For support, contact our &lt;strong&gt;Customer Success Team&lt;/strong&gt; via the &lt;a href="https://www.tiny.cloud/contact/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-8-release" rel="noopener noreferrer"&gt;support page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  We Value Your Feedback
&lt;/h2&gt;

&lt;p&gt;Submit feature requests or vote on existing ones via the &lt;strong&gt;&lt;a href="https://www.tiny.cloud/roadmap/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-8-release" rel="noopener noreferrer"&gt;TinyMCE Roadmap&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Useful Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.tiny.cloud/docs/tinymce/latest/release-notes/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-8-release" rel="noopener noreferrer"&gt;Release Notes&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/tinymce/tinymce/blob/main/modules/tinymce/CHANGELOG.md" rel="noopener noreferrer"&gt;Changelog&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.tiny.cloud/docs/tinymce/latest/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-8-release" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.tiny.cloud/get-tiny/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-8-release" rel="noopener noreferrer"&gt;Download&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thank you for choosing TinyMCE! 💙&lt;/p&gt;

&lt;p&gt;— The Tiny Team&lt;/p&gt;

</description>
    </item>
    <item>
      <title>RAG, AI Agents and Agentic RAG - what is it and how does it work?</title>
      <dc:creator>Mrinalini Sugosh (Mrina)</dc:creator>
      <pubDate>Tue, 01 Apr 2025 17:30:27 +0000</pubDate>
      <link>https://forem.com/tinymce/rag-ai-agents-and-agentic-rag-what-is-it-and-how-does-it-work-3ci9</link>
      <guid>https://forem.com/tinymce/rag-ai-agents-and-agentic-rag-what-is-it-and-how-does-it-work-3ci9</guid>
      <description>&lt;p&gt;If you’re keeping up with AI (and who isn’t?), you’ve probably heard of Retrieval-Augmented Generation (RAG) and AI Agents. But what about this other term Agentic RAG? It’s like combining the best parts of both worlds—retrieval-driven accuracy and agent-based decision-making—to create something seriously powerful.&lt;/p&gt;

&lt;p&gt;In this guide, I’ll walk you through how these systems work, why they matter, and how you can use them to level up your projects. &lt;/p&gt;

&lt;h2&gt;
  
  
  What’s the Deal with RAG?
&lt;/h2&gt;

&lt;p&gt;RAG makes large language models (LLMs) smarter by adding real-time retrieval into the mix. Instead of relying solely on the data they were trained on (which, let’s face it, can get outdated fast), RAG pulls relevant information from external sources during runtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does RAG work
&lt;/h3&gt;

&lt;p&gt;At its core, RAG has two key components:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Retriever:&lt;/strong&gt; Think of this as the search engine for your system. It uses vector similarity (tools like FAISS or Pinecone) to fetch relevant documents or data based on the input query.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generator:&lt;/strong&gt; This is your LLM (like GPT), which takes the fetched data and crafts a coherent, context-aware response.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Why You’ll Love It
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;No Hallucinations (Well, Fewer Anyway): By grounding responses in real data, RAG drastically reduces those “plausible but wrong” outputs we all hate.&lt;/li&gt;
&lt;li&gt;Real-Time Updates: Pulls in fresh, accurate information instead of being stuck with static training data.&lt;/li&gt;
&lt;li&gt;Quick to Set Up: With tools like LangChain or Haystack, integrating RAG into your app is surprisingly straightforward.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Where It Shines
&lt;/h4&gt;

&lt;p&gt;Customer support chatbots pulling FAQs or manuals in real-time&lt;br&gt;
Healthcare apps pulling the latest research papers for diagnosis&lt;br&gt;
Research tools pulling niche datasets for highly specialized queries&lt;/p&gt;

&lt;h3&gt;
  
  
  What Are AI Agents?
&lt;/h3&gt;

&lt;p&gt;AI Agents take things a step further by acting autonomously. They don’t just process inputs—they make decisions, execute tasks, and can even collaborate with other agents.&lt;/p&gt;

&lt;h4&gt;
  
  
  What Kinds of Agents Are Out There?
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Reactive Agents:&lt;/strong&gt; They’re quick to react but have no memory. Great for simple rule-based tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cognitive Agents:&lt;/strong&gt; These are your memory-holding, learning-from-the-past kind of agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collaborative Agents:&lt;/strong&gt; Perfect for distributed systems, where multiple agents share tasks and data.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Why Use Agents?
&lt;/h4&gt;

&lt;p&gt;Agents are like having a virtual assistant that can analyze, decide, and act without constant handholding. Whether it’s automating workflows, optimizing processes, or handling complex queries, they get it done.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is Agentic RAG?
&lt;/h3&gt;

&lt;p&gt;Now imagine combining RAG’s retrieval magic with an agent’s autonomy, and you get Agentic RAG. It’s a hybrid approach that gives agents the power to dynamically decide what to retrieve, when, and why.&lt;/p&gt;

&lt;h4&gt;
  
  
  How It Works
&lt;/h4&gt;

&lt;p&gt;Here’s a simplified flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Agents Analyze:&lt;/strong&gt; One agent figures out what data is needed and sends out a retrieval task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Retrieval:&lt;/strong&gt; The retriever fetches the most relevant info based on the agent’s input.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generator Crafts a Response:&lt;/strong&gt; The retrieved data and the query go into the LLM for a well-rounded output.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Why It’s a Big Deal
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Smarter Retrieval:&lt;/strong&gt; Agents actively decide the scope of retrieval, making it far more efficient and relevant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better Context:&lt;/strong&gt; Multi-agent collaboration means complex queries can be broken into manageable tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time, Personalized Responses:&lt;/strong&gt; Perfect for dynamic applications like chatbots or recommendation engines.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Use Cases to Get You Inspired
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://agent.ai/profile/companyresearch" rel="noopener noreferrer"&gt;Company Research Agent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://agent.ai/profile/domainvaluation" rel="noopener noreferrer"&gt;Website Domain Valuation Expert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://agent.ai/profile/earningschat" rel="noopener noreferrer"&gt;Earnings Call Analyzer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How They Compare
&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;RAG&lt;/th&gt;
&lt;th&gt;AI Agents&lt;/th&gt;
&lt;th&gt;Agentic RAG&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Focus&lt;/td&gt;
&lt;td&gt;Real-time info retrieval&lt;/td&gt;
&lt;td&gt;Autonomous decision-making&lt;/td&gt;
&lt;td&gt;Combines both for dynamic solutions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strengths&lt;/td&gt;
&lt;td&gt;Accuracy, real-time data&lt;/td&gt;
&lt;td&gt;Independence, task automation&lt;/td&gt;
&lt;td&gt;Context-aware, multi-agent workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Limitations&lt;/td&gt;
&lt;td&gt;No autonomy&lt;/td&gt;
&lt;td&gt;No external data retrieval&lt;/td&gt;
&lt;td&gt;Can be complex to implement&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Why Agentic RAG Should Be on Your Radar
&lt;/h3&gt;

&lt;p&gt;For developers, Agentic RAG isn’t just another buzzword—it’s a powerful framework that combines the best of both retrieval and autonomy. Whether you’re building a next-gen chatbot, a decision-making tool, or anything in between, this hybrid approach gives you the flexibility and intelligence to tackle real-world challenges.&lt;/p&gt;

&lt;p&gt;Got ideas or questions? Let’s chat—I’d love to hear how you’d apply this in your projects&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rag</category>
      <category>agentaichallenge</category>
      <category>webdev</category>
    </item>
    <item>
      <title>TinyMCE 7.7 Release Notes</title>
      <dc:creator>Mrinalini Sugosh (Mrina)</dc:creator>
      <pubDate>Mon, 17 Mar 2025 16:36:45 +0000</pubDate>
      <link>https://forem.com/tinymce/tinymce-77-release-notes-1mp0</link>
      <guid>https://forem.com/tinymce/tinymce-77-release-notes-1mp0</guid>
      <description>&lt;p&gt;TinyMCE 7.7 introduces improvements to premium features, usability enhancements, and bug fixes for a more reliable editing experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's New and Improved?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Spell Checker (Self-hosted)
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Spell Checker paid feature&lt;/strong&gt; now includes an updated Java-based server-side component to improve compatibility with modern application servers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Updated Version:&lt;/strong&gt; &lt;code&gt;ephox-spelling.war&lt;/code&gt; updated to &lt;strong&gt;2.128.3&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server Compatibility Updates:&lt;/strong&gt; Now supports &lt;strong&gt;Eclipse Jetty 9.4+&lt;/strong&gt;, &lt;strong&gt;WebSphere Application Server (WAS) 8+&lt;/strong&gt;, and &lt;strong&gt;Apache Tomcat 10+&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment Change:&lt;/strong&gt; Tomcat 10+ requires WAR files to be placed in the &lt;code&gt;webapp-javaee&lt;/code&gt; directory instead of &lt;code&gt;webapps&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For details, see &lt;a href="https://www.tiny.cloud/docs/tinymce/latest/server-side-components?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-7-release" rel="noopener noreferrer"&gt;Server-side component installation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Updates to Premium Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Comments
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mentions Fix:&lt;/strong&gt; Adding a mention to an edited comment now correctly displays after saving.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyboard Shortcut Improvement:&lt;/strong&gt; Pressing &lt;code&gt;Cmd + Alt + M&lt;/code&gt; (Mac) or &lt;code&gt;Ctrl + Alt + M&lt;/code&gt; (Windows) now focuses the reply text area instead of the comment.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI Improvement:&lt;/strong&gt; The comments panel header now has better visual separation from the body.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change Event Dispatch:&lt;/strong&gt; Editing or replying to a comment now correctly triggers a change event in the editor.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comment Card Jump Fix:&lt;/strong&gt; Large comment edits in Chrome no longer cause the sidebar to jump.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kebab Menu Fix:&lt;/strong&gt; Closing the kebab menu with the keyboard no longer triggers an editor blur event.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.tiny.cloud/docs/tinymce/latest/comments/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-7-release" rel="noopener noreferrer"&gt;Comments Feature Documentation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Image Optimizer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Expanded File Support:&lt;/strong&gt; &lt;code&gt;.jfi&lt;/code&gt; and &lt;code&gt;.jif&lt;/code&gt; images are now correctly recognized as valid formats.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drag-and-Drop Fix:&lt;/strong&gt; Dropping an image into a placeholder now ensures it appears in the correct location.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error Message Improvement:&lt;/strong&gt; The plugin now provides clearer messages when &lt;code&gt;uploadcare_public_key&lt;/code&gt; is misconfigured.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Placeholder Border Visibility:&lt;/strong&gt; The image upload placeholder border now correctly renders while loading.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.tiny.cloud/docs/tinymce/latest/uploadcare/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-7-release" rel="noopener noreferrer"&gt;Image Optimizer Feature Documentation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Export to PDF
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Format Option Update:&lt;/strong&gt; The &lt;code&gt;exportpdf_converter_options&lt;/code&gt; now accepts lowercase values for format properties.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.tiny.cloud/docs/tinymce/latest/exportpdf/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-7-release" rel="noopener noreferrer"&gt;Export to PDF Feature Documentation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Export to Word
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Watermark Support:&lt;/strong&gt; Watermarks can now be added to exported Word documents.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.tiny.cloud/docs/tinymce/latest/exportword/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-7-release" rel="noopener noreferrer"&gt;Export to Word Feature Documentation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Advanced Typography
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Language Fix:&lt;/strong&gt; Corrected the spelling of Serbian and Ukrainian in the typography plugin.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.tiny.cloud/docs/tinymce/latest/advtypography/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-7-release" rel="noopener noreferrer"&gt;Advanced Typography Feature Documentation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Enhanced Code Editor
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cursor Placement Fix:&lt;/strong&gt; The cursor now appears in the correct position when opening the source code editor.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.tiny.cloud/docs/tinymce/latest/advcode/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-7-release" rel="noopener noreferrer"&gt;Enhanced Code Editor Feature Documentation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Revision History
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;New Restore Control Option:&lt;/strong&gt; Added &lt;code&gt;revisionhistory_allow_restore&lt;/code&gt; to control whether users can restore previous revisions.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.tiny.cloud/docs/tinymce/latest/revisionhistory/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-7-release" rel="noopener noreferrer"&gt;Revision History Feature Documentation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Accessibility Checker
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WCAG Compliance Fix:&lt;/strong&gt; Validation error messages now use the correct color contrast in dark mode.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.tiny.cloud/docs/tinymce/latest/a11ychecker/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-7-release" rel="noopener noreferrer"&gt;Accessibility Checker Feature Documentation&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Improvements and Fixes in TinyMCE 7.7
&lt;/h2&gt;

&lt;p&gt;TinyMCE 7.7 includes several improvements and fixes to enhance usability, accessibility, and stability. Keyboard focus has been improved for comment annotations inside images, and invalid notification types now default to &lt;code&gt;info&lt;/code&gt;. The &lt;code&gt;forceReadOnly&lt;/code&gt; option now supports a disabled state instead of read-only mode. Bug fixes include better keyboard navigation for size inputs, proper replacement of non-editable elements with the &lt;code&gt;insertContent&lt;/code&gt; API, and consistent toolbar UI styling. MathML elements are now correctly preserved, anchor links in the Preview dialog navigate properly, and floating image captions no longer have alignment issues. Additionally, focus behavior has been refined for disabled elements, and keyboard navigation no longer gets stuck on the "More" toolbar button. &lt;/p&gt;

&lt;h3&gt;
  
  
  Known Issue
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The Blockquote toolbar button tooltip currently lacks a Hebrew translation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Get TinyMCE 7.7
&lt;/h2&gt;

&lt;h3&gt;
  
  
  New to TinyMCE?
&lt;/h3&gt;

&lt;p&gt;Sign up for a &lt;strong&gt;free API key&lt;/strong&gt; to start with a &lt;strong&gt;14-day trial&lt;/strong&gt; of premium features.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.tiny.cloud/auth/signup/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-7-release" rel="noopener noreferrer"&gt;Sign Up for Free&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Upgrading from TinyMCE 6 or 7?
&lt;/h3&gt;

&lt;p&gt;Check out our &lt;strong&gt;&lt;a href="https://www.tiny.cloud/blog/how-to-upgrade-to-tinymce-7/" rel="noopener noreferrer"&gt;Migration Guide&lt;/a&gt;&lt;/strong&gt; for a seamless upgrade.  &lt;/p&gt;

&lt;p&gt;For support, contact our &lt;strong&gt;Customer Success Team&lt;/strong&gt; via the &lt;a href="https://www.tiny.cloud/contact/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-7-release" rel="noopener noreferrer"&gt;support page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  We Value Your Feedback
&lt;/h2&gt;

&lt;p&gt;Submit feature requests or vote on existing ones via the &lt;strong&gt;&lt;a href="https://www.tiny.cloud/roadmap/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-7-release" rel="noopener noreferrer"&gt;TinyMCE Roadmap&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Useful Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.tiny.cloud/docs/tinymce/latest/release-notes/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-7-release" rel="noopener noreferrer"&gt;Release Notes&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/tinymce/tinymce/blob/main/modules/tinymce/CHANGELOG.md" rel="noopener noreferrer"&gt;Changelog&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.tiny.cloud/docs/tinymce/latest/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-7-release" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.tiny.cloud/get-tiny/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny-7-7-release" rel="noopener noreferrer"&gt;Download&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thank you for choosing TinyMCE! 💙&lt;br&gt;
— The Tiny Team&lt;/p&gt;

</description>
      <category>releases</category>
      <category>tinymce</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>5 AI Trends Shaping 2025: Breakthroughs &amp; Innovations</title>
      <dc:creator>Mrinalini Sugosh (Mrina)</dc:creator>
      <pubDate>Fri, 07 Feb 2025 03:37:26 +0000</pubDate>
      <link>https://forem.com/tinymce/5-ai-trends-shaping-2025-breakthroughs-innovations-59g</link>
      <guid>https://forem.com/tinymce/5-ai-trends-shaping-2025-breakthroughs-innovations-59g</guid>
      <description>&lt;p&gt;The AI space is moving at an insane speed, with new models, architectures, and market dynamics changing almost every day. I simply can't keep up. So to sum it up, here’s what you need to know about the latest AI breakthroughs as of February 2025. &lt;/p&gt;

&lt;h2&gt;
  
  
  #1 - DeepSeek: More Than Just “Engineering Hacks”
&lt;/h2&gt;

&lt;p&gt;DeepSeek has generated significant buzz, and while some critics dismiss their advancements as just engineering tweaks, their breakthroughs in AI efficiency and cost reduction are reshaping the field. By pushing the boundaries of floating-point precision and optimizing inference efficiency, they have set new standards in AI training and deployment. These innovations are not just small optimizations. They are redefining what’s possible in AI development, making high-performance models more accessible and cost-effective.&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%2Fsg3ed5785doj09fdmt20.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%2Fsg3ed5785doj09fdmt20.png" alt="DeepSeek surpassing ChatGPT as No 1 on the App Store" width="800" height="530"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="https://imageio.forbes.com/specials-images/imageserve/679e2201e88d791fccbe3be0/The-drama-around-DeepSeek-builds-on-a-false-premise--Large-language-models-are-the/960x0.jpg?format=jpg&amp;amp;width=960" rel="noopener noreferrer"&gt;Source&lt;/a&gt;: DeepSeek surpassing ChatGPT as No 1 on the App Store&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FP8 Training:&lt;/strong&gt; By leveraging floating-point precision (FP8), DeepSeek dramatically lowered training costs, switching from 32-bit to 8-bit representation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimized Key-Value Cache:&lt;/strong&gt; This reduces inference latency, improving performance without excessive compute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Mixture of Experts (MoE):&lt;/strong&gt; DeepSeek took MoE to new heights, outperforming existing models in efficiency and cost-effectiveness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Industry Impact:&lt;/strong&gt; Every major AI lab is now evaluating similar techniques. This is real innovation, not just incremental improvements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By lowering AI training costs and improving inference efficiency, DeepSeek is making high-performance AI more accessible for developers working on cutting-edge applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  #2  - OpenAI's Operator &amp;amp; O3-Mini: 2 Big Announcements for AI Automation and Reasoning
&lt;/h2&gt;

&lt;p&gt;AI is quickly evolving to not only generate content but to interact with the web in a more meaningful way. OpenAI’s Operator and O3-Mini are two innovations pushing the boundaries of practical AI applications. Operator is an AI agent that can autonomously navigate websites and execute user-defined tasks, making web-based automation more efficient and minimizing human intervention. This could have a profound impact on developers building AI-powered automation tools and web applications, allowing them to create smarter, more responsive systems.&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%2Fgsdq98cynlnueaqpppb1.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%2Fgsdq98cynlnueaqpppb1.png" alt="Sam Altman announcing Operator and Open AI Dev Day" width="686" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://i.ytimg.com/vi/nkXRCzBQzVE/hq720.jpg?sqp=-oaymwEhCK4FEIIDSFryq4qpAxMIARUAAAAAGAElAADIQj0AgKJD&amp;amp;rs=AOn4CLA_M0IRFr9l3LnFSQl-WDByxED0vA" rel="noopener noreferrer"&gt;Source&lt;/a&gt;:Sam Altman announcing Operator and Open AI Dev Day&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Meanwhile, O3-Mini is proving to be a powerful yet cost-effective AI model. Early benchmarks indicate that it offers significantly better reasoning than Sonnet and is on par with R1. While Sonnet still holds an edge in coding tasks, O3-Mini’s affordability and versatility make it an attractive option for a wide range of applications.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Function Calling &amp;amp; Reasoning Mode:&lt;/strong&gt; Developers can toggle between a high-reasoning mode for complex problems and a low-compute mode for quick answers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;40% the Price of GPT-4o:&lt;/strong&gt; This model is being positioned as a high-performance yet cost-effective alternative, even exceeding O1, which is 10x the price.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing Wars Incoming?&lt;/strong&gt; With O3-Mini undercutting GPT-4o, will Anthropic and OpenAI lower prices to stay competitive?
Developers now have more cost-effective access to advanced AI reasoning and automation tools, allowing them to build smarter, more efficient applications with fewer constraints on budget and computing power. This shift empowers innovation, making it easier to integrate powerful AI functionalities into a wider range of projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  #3  - The OpenAI vs. DeepSeek Controversy
&lt;/h2&gt;

&lt;p&gt;The battle between OpenAI and DeepSeek is heating up, raising critical questions about data usage, AI ethics, and fair competition. At the core of the dispute is OpenAI’s claim that DeepSeek leveraged its model outputs for training, sparking a larger debate about the very foundations of AI development. This conflict isn’t just a legal matter, it’s a glimpse into the broader struggle for dominance in the AI space and what the future of model training could look like.&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%2F05g4g8u2dvatrgu1l7uy.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%2F05g4g8u2dvatrgu1l7uy.png" alt="Open AI vs Deepseek Meme" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://a.storyblok.com/f/159374/960x540/2e17798d22/deepseek-vs-openai.jpg" rel="noopener noreferrer"&gt;Source&lt;/a&gt;: Open AI vs Deepseek Meme&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI’s Claims:&lt;/strong&gt; OpenAI and Microsoft suggest DeepSeek violated their TOS by using OpenAI-generated content for training.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Irony?&lt;/strong&gt; OpenAI (and every LLM company) built their models by scraping the internet under “fair use.” Now they’re calling foul when others do the same.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Massive GPU Power:&lt;/strong&gt; Initial estimates suggested DeepSeek was working under US export restrictions, but new reports indicate they have over $500M worth of GPUs, possibly downplaying their real capabilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Despite the controversy, DeepSeek-V3 is proving to be a formidable competitor against closed-source leaders, excelling in math and coding benchmarks while remaining cost-efficient. These disputes are more than just corporate clashes; they underscore the fundamental ethical dilemmas surrounding AI development, data usage, and fair competition. As AI continues to evolve, developers must stay vigilant about policies that could shape the future of training and deployment. Ethical AI practices are no longer optional; they are essential for responsible innovation and sustainable progress in the industry.&lt;/p&gt;

&lt;h2&gt;
  
  
  #4 - Nvidia’s AI Empire: How Long Can It Last?
&lt;/h2&gt;

&lt;p&gt;Nvidia has long been the backbone of AI infrastructure, but its so-called “reign” is facing new challenges. The landscape is shifting as emerging competitors bring fresh innovations, alternative AI hardware gains traction, and open-source frameworks weaken Nvidia’s stronghold. While Nvidia continues to push the boundaries with advancements like the Blackwell AI chip, the question remains: Can it maintain its dominance, or will the AI industry move toward a more diversified future?&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%2File5wects9senn2rtubp.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%2File5wects9senn2rtubp.png" alt="NVIDIA - Stock Decline by 13% in January" width="800" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://www.google.com/search?q=nvidia+stock&amp;amp;sca_esv=88e8d308c72480cf&amp;amp;biw=1658&amp;amp;bih=998&amp;amp;sxsrf=AHTn8zpUSfapS-N85NcxWR8ZeOn5bsW82Q:1738554977381&amp;amp;ei=YT6gZ_PtFpjR5NoPof2MgQI&amp;amp;ved=0ahUKEwizouX-zaaLAxWYKFkFHaE-IyAQ4dUDCBA&amp;amp;uact=5&amp;amp;oq=nvidia+stock&amp;amp;gs_lp=Egxnd3Mtd2l6LXNlcnAiDG52aWRpYSBzdG9jazIWEAAYgAQYkQIYsQMYgwEYigUYRhj6ATILEAAYgAQYsQMYgwEyChAAGIAEGEMYigUyERAAGIAEGJECGLEDGIMBGIoFMgsQABiABBixAxiDATIREAAYgAQYkQIYsQMYgwEYigUyCBAAGIAEGLEDMgoQABiABBhDGIoFMg4QABiABBixAxiDARiKBTIIEAAYgAQYsQMyIhAAGIAEGJECGLEDGIMBGIoFGEYY-gEYlwUYjAUY3QTYAQFIgAdQsgJY5wVwAngBkAEAmAFfoAHYAqoBATW4AQPIAQD4AQGYAgegAukCwgIKEAAYsAMY1gQYR8ICEBAAGIAEGLEDGEMYgwEYigWYAwCIBgGQBgi6BgYIARABGBOSBwE3oAfvIA&amp;amp;sclient=gws-wiz-serp" rel="noopener noreferrer"&gt;Source&lt;/a&gt;: NVIDIA - Stock Decline by 13% in January&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://cerebras.ai/" rel="noopener noreferrer"&gt;Cerebras&lt;/a&gt; and &lt;a href="https://groq.com/" rel="noopener noreferrer"&gt;Groq&lt;/a&gt; are tackling Nvidia’s limitations with wafer-scale chips that remove bottlenecks and innovative compute approaches that challenge GPU reliance. Meanwhile, Apple, Google, and OpenAI are investing in custom AI chips to boost performance and reduce dependence on Nvidia, disrupting its long-held monopoly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Nvidia’s &lt;a href="https://developer.nvidia.com/cuda-toolkit" rel="noopener noreferrer"&gt;CUDA&lt;/a&gt; dominance is fading as developers embrace open-source alternatives like Triton and JAX, offering more flexibility, cross-hardware compatibility, and reducing reliance on proprietary software.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DeepSeek’s efficiency breakthroughs are lowering AI training costs, making large-scale models more accessible while reducing reliance on Nvidia’s expensive GPUs, driving interest in alternative, cost-effective hardware solutions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As I have seen it happen time and time again in tech, the companies that once fueled Nvidia’s growth are now its biggest challengers, with Google, Amazon, OpenAI, and Microsoft all developing custom AI chips to optimize performance and reduce reliance on Nvidia’s hardware, intensifying competition in the AI space.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;At CES 2025, Nvidia introduced its GeForce RTX 50 Series GPUs with the Blackwell AI chip, promising major advancements in AI-driven graphics, real-time rendering, and deep learning performance.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While Nvidia strengthens its position, competitors are catching up. With new AI hardware and frameworks emerging, developers now have more options beyond Nvidia’s ecosystem. The future of AI processing is no longer Nvidia-dominated—it’s shifting toward greater diversity and competition.&lt;/p&gt;

&lt;h2&gt;
  
  
  #5 - The Stargate Project: AI’s Next Big Investment
&lt;/h2&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%2F3l8pr9scu5fxf8f37hwm.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%2F3l8pr9scu5fxf8f37hwm.png" alt="Open AI announces Stargate" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://images.ctfassets.net/kftzwdyauwt9/clrP0hJbf2oP3r6hiZWWI/db8346afda7d9d2f437c6f8bbae08236/Stargate_Preview_Header_New.png?w=1600&amp;amp;h=900&amp;amp;fit=fill" rel="noopener noreferrer"&gt;Source&lt;/a&gt;: OpenAI announces Stargate&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;&lt;a href="https://openai.com/index/announcing-the-stargate-project/" rel="noopener noreferrer"&gt;Stargate Project&lt;/a&gt;&lt;/strong&gt; is a bold initiative launched by OpenAI, Oracle, SoftBank, and MGX, with a staggering $500 billion investment aimed at transforming AI infrastructure. This project focuses on building cutting-edge data centers and power generation facilities to support the exponential growth of AI. By securing large-scale computing resources, Stargate is set to provide the necessary foundation for next-generation AI models, ensuring more efficient and scalable solutions for developers and enterprises alike.&lt;/p&gt;

&lt;p&gt;With AI rapidly advancing across automation, efficiency, and computing power, developers are finding new ways to integrate these technologies into their workflows. From DeepSeek’s efficiency gains for LLMs and OpenAI’s Operator for Agents to the growing competition in AI hardware, these innovations are making AI more accessible, cost-effective, and powerful. As ethical considerations and competitive tensions rise, all developers must stay informed and adaptable to navigate this rapidly shifting space.&lt;/p&gt;

&lt;p&gt;While keeping up with ALL these changes, I continue to explore how AI can enhance developer experiences and AI agentic experiences. For me, with &lt;a href="https://www.tiny.cloud/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=5-ai-innovations-2025" rel="noopener noreferrer"&gt;rich text editors&lt;/a&gt; and web applications, I'm focused on helping developers build smarter, more intuitive content experiences that easily integrate AI and AI workflows.&lt;/p&gt;

&lt;p&gt;I’m also hosting two hands-on workshops with Major League Hacking (MLH) on February 7 from 1-2 PM EST and Feb 12 from 9-10 AM EST to help full stack developers build with AI. These workshops will explore building apps in Angular and Laravel, connecting with AI APIs like OpenAI, and using AI as a pair programmer with Windsurf AI and Cursor AI editors. Whether you’re just starting out or looking to update your AI dev skills, this is a great opportunity to dive in, learn, and build with me. &lt;/p&gt;

&lt;p&gt;Sign up here: &lt;a href="https://mlh.link/ghwaiml225-tinymce-workshop1" rel="noopener noreferrer"&gt;Workshop 1&lt;/a&gt; | &lt;a href="https://mlh.link/ghwaiml225-tinymce-workshop2" rel="noopener noreferrer"&gt;Workshop 2&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Happy Coding!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>trends</category>
      <category>machinelearning</category>
      <category>llm</category>
    </item>
    <item>
      <title>From AI Hype to Personal Growth: Lessons Learned in 2024</title>
      <dc:creator>Mrinalini Sugosh (Mrina)</dc:creator>
      <pubDate>Sat, 01 Feb 2025 18:17:29 +0000</pubDate>
      <link>https://forem.com/tinymce/from-ai-hype-to-personal-growth-lessons-learned-in-2024-kb3</link>
      <guid>https://forem.com/tinymce/from-ai-hype-to-personal-growth-lessons-learned-in-2024-kb3</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/newyear"&gt;2025 New Year Writing challenge&lt;/a&gt;: Retro’ing and Debugging 2024.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/newyear"&gt;2025 New Year Writing challenge&lt;/a&gt;: Compiling 2025.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;2024 was a year of upheaval and introspection, both for the tech industry and in my own life. With widespread layoffs, the 2024 election, benefit cuts, and a mounting AI race, the landscape felt increasingly disconnected from meaningful progress. Venture capital poured into costly AI innovations, often overshadowing deeper, real-world challenges. &lt;br&gt;
I saw this quote recently on Twitter: “this year has, on some level, radicalized me,” and it resonated deeply as I navigated my professional journey, reflecting on the role of AI in reshaping not only our work but our priorities and values.&lt;/p&gt;

&lt;h2&gt;
  
  
  Professional Reflections
&lt;/h2&gt;

&lt;p&gt;This year brought a whirlwind of releases at &lt;a href="https://www.tiny.cloud/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=lessons-learned-2024" rel="noopener noreferrer"&gt;TinyMCE&lt;/a&gt;, including the significant decision to move TinyMCE 7.0 to a GPL license. This change reinforced our commitment to empowering the developer community by making the editor more accessible while maintaining its team, flexibility, and extensibility. &lt;br&gt;
From the release of TinyMCE 7.0 with features like Enhanced Code Editor and AI Assistant to the rollouts of Document Converters, Markdown Support, and Revision History, there was no shortage of innovation to make the editor more collaborative than ever before. These efforts just came to show how enhancing the developer journey remains a top priority for 2025.  Each of these updates was designed to make content creation simpler, faster, and more accessible for developers and end-users alike.&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%2Fjcfgli8zgrwegp8ic0c4.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%2Fjcfgli8zgrwegp8ic0c4.png" alt="Presenting Typescript Fundamentals at Infobip Shift" width="800" height="595"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Presenting Typescript Fundamentals at Infobip Shift&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;On the community front, our DevRel team’s presence at global events like &lt;a href="https://reactsummit.com/" rel="noopener noreferrer"&gt;React Summit&lt;/a&gt;, &lt;a href="https://www.wearedevelopers.com/world-congress" rel="noopener noreferrer"&gt;We Are Developers&lt;/a&gt;, and &lt;a href="https://frontendnation.com/" rel="noopener noreferrer"&gt;Front End Nation&lt;/a&gt; gave us invaluable insights into how developers engage with RTEs. Interacting directly with developers reaffirmed my belief in working with products that solve real problems, not just cater to AI market trends.&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%2Fauryq0ev2y2lvf6z915v.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%2Fauryq0ev2y2lvf6z915v.png" alt="Meetup after talk at DevWorld Amsterdam" width="800" height="595"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Meetup after talk at DevWorld Amsterdam&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;While I’m proud of the work we accomplished by exceeding the goals we set at the beginning of the year, I’d be remiss not to acknowledge the areas where we fell short. &lt;br&gt;
The push to deliver new content or projects sometimes came at the expense of deeper problem-solving. In hindsight, I would have advocated for slower, more thoughtful project rollouts that prioritize stability, feedback, and long-term value over deadlines. &lt;br&gt;
Additionally, I’ve grown increasingly wary of the blind optimism surrounding AI in content creation, and going forward, I’d push for greater transparency about what AI can and cannot do, ensuring ethical and practical conversations about its implications and applications at work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Personal Reflections
&lt;/h2&gt;

&lt;p&gt;On a personal level, 2024 challenged me to reevaluate my priorities. Losing multiple family members last year was one of the most difficult challenges I’ve faced, and navigating that grief while being there for my family was both emotionally and mentally taxing. Balancing these responsibilities with a demanding career taught me the importance of resilience and choosing to be present for my loved ones during tough times. &lt;br&gt;
It also reminded me of the importance of taking intentional breaks to reset and recharge. Travel became a much-needed way to gain perspective and step back from the frenetic pace of work. &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%2Fu5qq95b84veun688722h.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%2Fu5qq95b84veun688722h.png" alt="Rest, Relax and Recover hike to Machu Picchu in 2024" width="800" height="453"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Rest, Relax and Recover hike to Machu Picchu&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Regular exercise also played a key role in maintaining both physical and mental health, serving as a counterbalance to the stress of the year. Reflecting on these practices, I’m setting clear intentions to prioritize self-care and create a healthier work-life balance moving forward.&lt;/p&gt;

&lt;h2&gt;
  
  
  Goals for 2025
&lt;/h2&gt;

&lt;p&gt;As I reset and strategize for 2025, I’m setting goals to align my personal and professional growth with a more balanced, sustainable approach to life and work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Professional Goals
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;**Deepen My Understanding of AI: **Learn more about AI technologies to create tools that enhance both team workflows and developer experiences. This includes exploring innovative ways to automate tasks, streamline processes, and derive actionable insights that improve content and marketing strategies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complete My Master’s Degree:&lt;/strong&gt; Finish my graduate program with a focus on applying my learnings to real-world challenges in product marketing and development.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expand Strategic Impact:&lt;/strong&gt; Drive meaningful collaborations and refine strategies that prioritize developer needs and ethical AI practices.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Personal Goals
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Travel More:&lt;/strong&gt; Take time off to explore new places and recharge. Travel has always been a way for me to gain perspective and reset.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exercise Regularly:&lt;/strong&gt; Commit to working out at least five times a week to maintain physical and mental health.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spend Quality Time with Family, Friends, and Home:&lt;/strong&gt; Dedicate more time to being present with my loved ones, including my dog Nala, and focusing on creating meaningful moments.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Moving Forward
&lt;/h2&gt;

&lt;p&gt;2024 has left me both proud and apprehensive; proud of the strides we made at my work, but deeply reflective on what it means to work in tech today. Moving into 2025, I’m committed to championing a more thoughtful, human-centered approach to developer relations and marketing. &lt;br&gt;
This means doubling down on real-world impact, advocating for the teams I work with, and being unafraid to challenge industry norms that prioritize hype over substance. The lessons of this year are not just about building better products; they’re about fostering a better industry. And while I can’t change the tech landscape alone, I can’t think of a better place to start than now.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>newyearchallenge</category>
      <category>career</category>
    </item>
    <item>
      <title>Humanity is What Makes AI Powerful: Predicting 2025</title>
      <dc:creator>Coco Poley</dc:creator>
      <pubDate>Wed, 29 Jan 2025 13:38:13 +0000</pubDate>
      <link>https://forem.com/tinymce/humanity-is-what-makes-ai-powerful-predicting-2025-2kge</link>
      <guid>https://forem.com/tinymce/humanity-is-what-makes-ai-powerful-predicting-2025-2kge</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/newyear"&gt;2025 New Year Writing challenge&lt;/a&gt;: Predicting 2025.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The world's best creators and engineers have always needed editors and collaborators. From Da Vinci to J.R.R. Tolkien to Steve Jobs and beyond, every historic creative mind has needed help. An assistant, if you will. My prediction for tech in 2025 is that humanity is going to be more important than ever with the rise of Artificial Intelligence (AI). Why? There's a few reasons.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI thrives on human guidance
&lt;/h2&gt;

&lt;p&gt;AI systems are brilliant at executing specific tasks and can operate autonomously, while human input improves their effectiveness and application. Large Language Models like ChatGPT, or code-focused platforms like Cursor can maintain context across conversations while being driven from clear user direction and prompts. AI is only as powerful as the clarity of its instructions and the depth of its data sources. &lt;/p&gt;

&lt;p&gt;In 2025, the relationship between humans and AI will deepen as we design custom integrations into specific technical processes, automate project management, and predict bugs before they happen. We will teach machines to augment our strengths while compensating for our weaknesses.&lt;/p&gt;

&lt;p&gt;This collaboration aligns with a broader truth: writing by hand, for instance, enhances memory retention because it engages the mind and body in ways typing doesn’t​. Similarly, interacting with AI stimulates strategic thinking, task prioritization, and decision-making—skills that are uniquely human.&lt;/p&gt;

&lt;h3&gt;
  
  
  With great power comes great responsibility
&lt;/h3&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%2F3tmnghyd50svnmfky4kc.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%2F3tmnghyd50svnmfky4kc.gif" alt="Uncle Ben says " width="498" height="207"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To leverage the great power of AI, it will be crucial for new processes to be guided by expert technical knowledge, and anchored in ethical oversight. Well-engineered AI tools excel at specific, focused tasks, from summarizing dense texts to debugging complex code. However, achieving these outcomes requires humans to provide context-rich prompts and strategic oversight. &lt;/p&gt;

&lt;p&gt;But &lt;a href="https://www.forbes.com/sites/johnkoetsier/2025/01/06/openai-ceo-sam-altman-we-know-how-to-build-agi/" rel="noopener noreferrer"&gt;Artificial General Intelligence (AGI) is still years away&lt;/a&gt;​. In the meantime, humanity’s ability to operate and innovate with AI will create a new wave of expertise: people fluent in "speaking AI."&lt;/p&gt;

&lt;h3&gt;
  
  
  More professionals will be fluent in AI in 2025
&lt;/h3&gt;

&lt;p&gt;This year, we’ll see more resumes with machine learning expertise, cognitive computing development, and algorithmic programming on them. Detailed discussion and sharing how we use AI on a regular basis will replace the question, “What do you think of AI?” In the last few years, these technologies have seen an uptick in popularity. I predict that this year they will become the norm.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI cannot replace true creativity
&lt;/h2&gt;

&lt;p&gt;AI lacks the spark of imagination that defines human creativity. It can remix existing ideas, but it cannot dream in the way a person might while brainstorming solutions or crafting a story. Humans can draw inspiration from personal history, cultural context, and abstract thought. Machine intelligence, for all its efficiency, does not carry these lived experiences.&lt;/p&gt;

&lt;h3&gt;
  
  
  Major investments in custom AI in 2025
&lt;/h3&gt;

&lt;p&gt;We have already seen some major investments in out-of-the-box AI tools in 2024. Generative AI usage jumped from 53% in 2023 to 75% in 2024 according to &lt;a href="https://blogs.microsoft.com/blog/2024/11/12/idcs-2024-ai-opportunity-study-top-five-ai-trends-to-watch/" rel="noopener noreferrer"&gt;Microsoft’s IDC study&lt;/a&gt;, and that is just the beginning. The study also reported that within 24 months, businesses already using machine intelligence to drive their productivity will expand to create their own solutions. It’s not just about a free, quick AI tool anymore. &lt;/p&gt;

&lt;p&gt;I predict that in 2025 we will see major financial, media, and retail organizations launch innovative, custom, interactive technologies to the public that are based on artificial intelligence. &lt;/p&gt;

&lt;h2&gt;
  
  
  The potential for AI in 2025 is limitless
&lt;/h2&gt;

&lt;p&gt;AI has already transformed how we work. 2025 is the year we learn how to use these tools more effectively. Picture an intelligent system integrated into your workplace, spotting errors in data or automatically debugging broken code on a pull request. These advancements aren’t distant dreams. They’re the reality we’re shaping for 2025. &lt;/p&gt;

&lt;h3&gt;
  
  
  An explosion of AI related jobs in 2025
&lt;/h3&gt;

&lt;p&gt;It’s easy to deduce that if there will be more organizations building custom AI solutions, and if there are more experts in the workforce, there will be an explosion of related jobs. From creators comfortable with AI generated content, to programmers writing neural networks, the spectrum of AI-related jobs will expand and grow rapidly this year. &lt;/p&gt;

&lt;p&gt;Many jobs will become augmented and we’ll be working with these new tools. Mundane tasks will be taken over by custom automations and helpful agentic workflows. I predict that there will be a huge opportunity in the market for experts who are needed to work with AI tools as well as develop, and maintain these custom technologies we’ll see arrive in 2025. &lt;/p&gt;

&lt;p&gt;AI's potential lies not in replacing human efforts but in amplifying them. By combining the precision of machines with the intuition of humans, we can address challenges more efficiently and creatively than ever before.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrap up: AI will achieve greatness with our help
&lt;/h2&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%2Fxt2yo67z97qfds3w6jb3.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%2Fxt2yo67z97qfds3w6jb3.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In 2025, success in technology will depend not on AI alone but on the people who guide and refine it. The fast-fail methodology will thrive as teams experiment with new workflows, learning what works and iterating quickly. Those who embrace this partnership of balancing the creative and the computational will drive the next wave of innovation.&lt;/p&gt;

&lt;p&gt;Ultimately, AI will not achieve greatness unless we do. By leaning into our strengths as people, embracing collaboration, and continuing to try new tools, we can stay in tune as the symbiosis of human intelligence and artificial capabilities defines the future of technology.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>newyearchallenge</category>
      <category>future</category>
      <category>ai</category>
    </item>
    <item>
      <title>The What, the How, and the Why of JWTs</title>
      <dc:creator>Mrinalini Sugosh (Mrina)</dc:creator>
      <pubDate>Tue, 28 Jan 2025 19:26:54 +0000</pubDate>
      <link>https://forem.com/tinymce/the-what-the-how-and-the-why-of-jwts-399i</link>
      <guid>https://forem.com/tinymce/the-what-the-how-and-the-why-of-jwts-399i</guid>
      <description>&lt;p&gt;Security isn’t just a priority, it's one of the most important parts of web development today. Whether you’re building a SaaS platform, a collaborative editor, or even a cloud-based document management system, securely managing user authentication and access to resources is a fundamental challenge. That’s where &lt;a href="https://jwt.io/introduction" rel="noopener noreferrer"&gt;JSON Web Tokens (JWTs)&lt;/a&gt; come in, providing a stateless, scalable way to handle authentication.&lt;br&gt;
For example, TinyMCE’s &lt;a href="https://www.tiny.cloud/docs/tinymce/latest/import-from-word-with-jwt-authentication-php/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=jwt-token-blog" rel="noopener noreferrer"&gt;Import from Word &lt;/a&gt;feature requires setting up JWT authentication to make sure that only authorized users can upload and manage Word documents. Without JWTs, it’s nearly impossible to enforce proper security in multi-user environments where sensitive documents might be handled. JWTs enable TinyMCE to offer a high quality user experience while maintaining strict security controls over file uploads.&lt;br&gt;
JWTs aren’t just important for Rich Text Editors or web components; they’re widely used across web apps for their simplicity, flexibility, and stateless design. In this blog, we’ll walk through what JWTs are, how they work, and why they’re crucial for building secure, scalable auth systems.&lt;/p&gt;
&lt;h2&gt;
  
  
  What are JWTs?
&lt;/h2&gt;

&lt;p&gt;JSON Web Token or JWT is a token that allows secure data transmission between web servers. It’s a lightweight, self-contained solution that helps manage authentication and authorization without the need for server-side session storage. It’s more secure than traditional session based user authorization, but how? &lt;/p&gt;
&lt;h3&gt;
  
  
  Traditional User Based Session vs JWT Session
&lt;/h3&gt;

&lt;p&gt;In the traditional approach, when a user logs in, the server stores their information in a session and sends a session ID to the client as a cookie. That app then includes this cookie in all future requests which allows the server to identify and authorize the user. Each time the server receives a request, it has to retrieve and validate the session ID before responding.&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%2Fp9cj5jge1ks1nkuei76q.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%2Fp9cj5jge1ks1nkuei76q.png" alt="Image of Traditional Cookie-Based Auth - Source: https://github.com/joinpursuit/AC3.1/blob/master/lessons/authentication/cookies-and-sessions.md" width="794" height="924"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="https://github.com/joinpursuit/AC3.1/blob/master/lessons/authentication/cookies-and-sessions.md" rel="noopener noreferrer"&gt;Image Source&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In the JWT approach, when the client requests access, the server generates a JWT containing user information and sends it back to the client. The server doesn’t need to store any user data—everything is stored in the token on the client side. For each future request, the client includes the JWT instead of the user information, and the server verifies the token’s signature to confirm the user’s identity before responding.&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%2F8vdzkdyiwsr0y4hcx1we.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%2F8vdzkdyiwsr0y4hcx1we.png" alt="Token-Based Approach" width="800" height="900"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="https://github.com/joinpursuit/AC3.1/blob/master/lessons/authentication/cookies-and-sessions.md" rel="noopener noreferrer"&gt;Image Source&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What Makes a JWT Work?
&lt;/h2&gt;

&lt;p&gt;At first glance, a &lt;strong&gt;JWT&lt;/strong&gt; might look like a random mess of characters, but under the hood, it’s a well-structured token designed for secure data exchange.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let’s take a look at it this token the &lt;a href="https://jwt.io/#debugger-io" rel="noopener noreferrer"&gt;JWT debugger&lt;/a&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%2F3tgkvwscolw11kyz6bob.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%2F3tgkvwscolw11kyz6bob.png" alt="JWT Token in the Debugger" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So here we see that the token is made up of 3 parts. The header, the Payload and the Signature:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Header&lt;/strong&gt; – Contains metadata about the token, like the signing algorithm used.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payload&lt;/strong&gt; – This is where the actual data (e.g., user information) is stored.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Signature&lt;/strong&gt; – This ensures the token hasn’t been tampered with.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Think of a JWT like a digital passport. The payload holds user-specific data, while the signature acts as a tamper-proof seal. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why JWTs Matter for Stateless Authentication
&lt;/h2&gt;

&lt;p&gt;Stateless authentication is crucial today. With JWTs, the server doesn’t need to maintain session data. Everything it needs to know is in the token. This makes JWTs perfect for scaling, especially when you’re dealing with microservices, serverless functions, or distributed systems where maintaining centralized session storage would be a nightmare. Remember, while JWTs are great for auth and data integrity, they’re not designed for data confidentiality. So if you need to transmit sensitive info, you’ll still need SSL/TLS and possibly encryption at the application level.&lt;/p&gt;

&lt;h3&gt;
  
  
  Common Pitfalls:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Token bloat – Keep the payload minimal. Don’t throw everything in just because you can.&lt;/li&gt;
&lt;li&gt;Long-lived tokens – Short-lived tokens reduce the risk of exposure. For long-term sessions, consider using refresh tokens.&lt;/li&gt;
&lt;li&gt;Insecure secret keys – Your secret key isn’t just a "key"; it’s the backbone of your token’s security. Use a long, complex, random string—no shortcuts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;JWTs are not just popular, they are also a practical solution for modern authentication challenges. Their stateless nature makes them ideal for scalable architectures, and when implemented correctly, they offer a clean, efficient way to manage user sessions without the need for server-side storage. But like any tool, they come with caveats. JWTs ensure data integrity, not confidentiality, so it’s on you to use them responsibly. Keep the payload light, avoid sensitive data, and always, always use a strong secret key.&lt;/p&gt;

&lt;p&gt;At the end of the day, JWTs let you build faster, more scalable apps while keeping things secure. In a world where speed and security are everything, that’s a win-win.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>TinyMCE 7.6 Release Notes - Introducing Image Optimizer powered by Uploadcare</title>
      <dc:creator>Mrinalini Sugosh (Mrina)</dc:creator>
      <pubDate>Thu, 23 Jan 2025 19:33:47 +0000</pubDate>
      <link>https://forem.com/tinymce/tinymce-76-release-notes-introducing-image-optimizer-powered-by-uploadcare-1cf5</link>
      <guid>https://forem.com/tinymce/tinymce-76-release-notes-introducing-image-optimizer-powered-by-uploadcare-1cf5</guid>
      <description>&lt;p&gt;TinyMCE 7.6 is here, introducing exciting new features and updates to enhance your editing experience! This release includes the debut of a powerful new premium plugin, Image Optimizer powered by Uploadcare, as well as significant updates to several existing plugins. All of these changes are aimed at improving functionality, accessibility, and user experience.&lt;/p&gt;

&lt;p&gt;Our Engineering, Product, and Design teams have been working diligently, and we’re thrilled to share the latest updates with you! 😊&lt;/p&gt;

&lt;h2&gt;
  
  
  What's New and Improved?
&lt;/h2&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%2F3130r217ckmams03sjx7.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%2F3130r217ckmams03sjx7.png" alt="Image Optimizer Plugin" width="800" height="692"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  New Premium Plugin: Image Optimizer
&lt;/h3&gt;

&lt;p&gt;TinyMCE 7.6 introduces the Image Optimizer plugin, a powerful new tool for seamless image hosting, serving, and editing.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Responsive Image Delivery:&lt;/strong&gt; Automatically serves images in optimal sizes for any device or platform.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic Image Format Selection:&lt;/strong&gt; Converts images to the best-suited format for performance and quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic Compression:&lt;/strong&gt; Compresses images without compromising quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-Destructive Transformations:&lt;/strong&gt; Offers powerful tools for cropping, rotating, editing, and adjusting images.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintains Original Image:&lt;/strong&gt; Secures the uploaded file via CDN so that users can revert to the original image at any time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offers Security and Compliance Rules:&lt;/strong&gt; Built-in security and compliance keep all images safe for professional environments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more information, see &lt;a href="https://www.tiny.cloud/docs/tinymce/latest/uploadcare/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny7-6-release-notes" rel="noopener noreferrer"&gt;Image Optimizer powered by Uploadcare Docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Updates to Existing Premium Plugins
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Accessibility Checker
&lt;/h3&gt;

&lt;p&gt;Enhanced usability and accessibility with several improvements, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Region for Screen Readers:&lt;/strong&gt; Added a dedicated live region to improve dialog announcements, ensuring consistency across browsers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detailed Issue Descriptions:&lt;/strong&gt; Displays content type and snippets of affected content for better context when navigating with screen readers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved Content Highlighting:&lt;/strong&gt; Updated color contrast for highlights to meet accessibility standards.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more information, see &lt;a href="https://www.tiny.cloud/docs/tinymce/latest/a11ychecker/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny7-6-release-notes" rel="noopener noreferrer"&gt;Accessibility Checker Docs&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Checklist
&lt;/h3&gt;

&lt;p&gt;Fixed a critical issue affecting checklist item responsiveness:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Alignment Issue Fixed:&lt;/strong&gt; Checklist items now respond correctly to clicks, regardless of alignment (left, center, or right).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more information, see &lt;a href="https://www.tiny.cloud/docs/tinymce/latest/checklist/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny7-6-release-notes" rel="noopener noreferrer"&gt;Checklist Plugin Docs&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Comments
&lt;/h3&gt;

&lt;p&gt;Introduced multiple enhancements for better collaboration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Event Log Improvement:&lt;/strong&gt; The &lt;code&gt;commentAuthor&lt;/code&gt; property is now included in reply events for comprehensive tracking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mentions Dropdown Expansion:&lt;/strong&gt; Mentions dropdown now flows outside the editor container for better usability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistent Scrolling Behavior:&lt;/strong&gt; Improved navigation between conversations in the sidebar with updated scrolling logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved Accessibility:&lt;/strong&gt; Added tooltips to sidebar menu buttons and refined caret behavior in comment text areas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more information, see &lt;a href="https://www.tiny.cloud/docs/tinymce/latest/introduction-to-tiny-comments/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny7-6-release-notes" rel="noopener noreferrer"&gt;Comments Plugin Docs&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enhanced Code Editor
&lt;/h3&gt;

&lt;p&gt;Fixed the following issue:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Corrected Tooltip Text:&lt;/strong&gt; Fixed a typo in the fullscreen toggle button tooltip.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more information, see &lt;a href="https://www.tiny.cloud/docs/tinymce/latest/advcode/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny7-6-release-notes" rel="noopener noreferrer"&gt;Enhanced Code Editor Docs&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enhanced Skins &amp;amp; Icon Packs
&lt;/h3&gt;

&lt;p&gt;Rebuilt to include updates introduced in the default TinyMCE 7.6 skin, Oxide.&lt;/p&gt;

&lt;p&gt;For more information, see &lt;a href="https://www.tiny.cloud/docs/tinymce/latest/enhanced-skins-and-icon-packs/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny7-6-release-notes" rel="noopener noreferrer"&gt;Enhanced Skins &amp;amp; Icon Packs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Get Access to TinyMCE 7.6
&lt;/h2&gt;

&lt;h3&gt;
  
  
  New to TinyMCE?
&lt;/h3&gt;

&lt;p&gt;Adding TinyMCE to your project is quick and simple! Sign up for your free cloud API key via our Pricing page. The API key includes a &lt;a href="https://www.tiny.cloud/auth/signup/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny7-6-release-notes" rel="noopener noreferrer"&gt;14-day free trial&lt;/a&gt; of our most popular premium features.&lt;/p&gt;

&lt;h3&gt;
  
  
  Upgrading from TinyMCE 6?
&lt;/h3&gt;

&lt;p&gt;Check out our &lt;a href="https://www.tiny.cloud/blog/how-to-upgrade-to-tinymce-7/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny7-6-release-notes" rel="noopener noreferrer"&gt;Migration Guide&lt;/a&gt; for tips on updating your implementation to leverage the latest features.&lt;/p&gt;

&lt;p&gt;For additional assistance, our &lt;a href="https://www.tiny.cloud/contact/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny7-6-release-notes" rel="noopener noreferrer"&gt;Customer Success Team&lt;/a&gt; is here to help.&lt;/p&gt;

&lt;h2&gt;
  
  
  We Value Your Feedback
&lt;/h2&gt;

&lt;p&gt;Let us know your thoughts! Submit feature requests or vote on existing ones via the &lt;a href="https://www.tiny.cloud/roadmap/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny7-6-release-notes" rel="noopener noreferrer"&gt;TinyMCE Roadmap&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Useful Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.tiny.cloud/docs/tinymce/latest/release-notes/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny7-6-release-notes" rel="noopener noreferrer"&gt;Release Notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tinymce/tinymce/blob/main/modules/tinymce/CHANGELOG.md" rel="noopener noreferrer"&gt;Changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tiny.cloud/docs/tinymce/latest/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny7-6-release-notes" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tiny.cloud/get-tiny/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=tiny7-6-release-notes" rel="noopener noreferrer"&gt;Download&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thank you for choosing TinyMCE!  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Tiny Team&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>richtexteditor</category>
      <category>release</category>
    </item>
    <item>
      <title>3 Myths, 3 Facts, and 3 Strategies to Scale Node.js Apps</title>
      <dc:creator>Mrinalini Sugosh (Mrina)</dc:creator>
      <pubDate>Fri, 20 Dec 2024 16:20:46 +0000</pubDate>
      <link>https://forem.com/tinymce/3-myths-3-facts-and-3-strategies-to-scale-nodejs-apps-2nk7</link>
      <guid>https://forem.com/tinymce/3-myths-3-facts-and-3-strategies-to-scale-nodejs-apps-2nk7</guid>
      <description>&lt;p&gt;Node.js has become a go-to solution for developers over the past decade, known for its ability to handle concurrent connections and power high-performance applications. From my experience working on Express projects with &lt;a href="https://www.tiny.cloud/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=nodejs-3myths-facts-strategies" rel="noopener noreferrer"&gt;Rich Text Editors&lt;/a&gt;, I’ve seen firsthand how Node.js can transform content creation applications into scalable, customizable solutions. But here’s the big question: Is Node.js truly capable of scaling to support millions of users at an enterprise level? &lt;/p&gt;

&lt;p&gt;The answer is yes—but the reality is far more nuanced. Node.js is designed to scale, but its performance at scale depends heavily on  application architecture, optimizations, and your approach to managing system resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  Myths About Node.js and High Traffic: What’s True and What’s Not?
&lt;/h2&gt;

&lt;p&gt;When it comes to handling high traffic, Node.js often gets both praise and skepticism. Some devs say it’s a game-changer for real-time applications, while other devs argue it has limitations when scaling to millions of users. Let’s take a look at the common myths:&lt;/p&gt;

&lt;h3&gt;
  
  
  Myth 1: Node.js Can’t Handle High Traffic
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Reality:&lt;/strong&gt; Node.js is built on an event-driven, non-blocking I/O model that actually allows it to manage thousands of concurrent connections with ease. Unlike traditional server architectures (Apache, PHP), which create a new thread for every request and quickly eat up resources, Node.js operates on a single thread, using an event loop to handle tasks asynchronously. This exact design is what minimizes resource usage and boosts scalability.&lt;/p&gt;

&lt;h3&gt;
  
  
  Myth 2: Node.js Is Just JavaScript and Lacks Power
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Reality:&lt;/strong&gt; While Node.js runs on JavaScript, its power comes from &lt;a href="https://nodejs.org/en/learn/getting-started/the-v8-javascript-engine" rel="noopener noreferrer"&gt;Google’s V8 JavaScript engine&lt;/a&gt;, which compiles JavaScript into optimized machine code. This means Node.js isn’t just running scripts, it’s delivering performance comparable to compiled languages for many use cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Myth 3: Scaling Node.js Is Easy
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Reality:&lt;/strong&gt; Node.js’ architecture is ideal for I/O-heavy tasks like API servers, chat apps, and real-time systems, but scaling to millions of users requires thoughtful planning and the right architecture. Techniques like load balancing, clustering, and optimizing system resources are key to making it work at scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Facts About Node.js at Scale
&lt;/h2&gt;

&lt;p&gt;After debunking myths let’s talk facts. Node.js has proven itself capable of powering high-performance, scalable applications, but scaling to millions of users is NOT without its challenges. &lt;/p&gt;

&lt;h3&gt;
  
  
  Fact 1: Node.js Relies on a Single-Threaded Model
&lt;/h3&gt;

&lt;p&gt;Let’s start with the foundation of Node.js’ architecture. Its single-threaded, event-driven model is great for I/O tasks, which makes it efficient at handling multiple connections simultaneously. However, when it comes to CPU-intensive operations, this same model can become a bottleneck. Heavy computations on a single thread can block the event loop, causing delays in processing other requests.&lt;/p&gt;

&lt;p&gt;While single threaded is a limitation, we should remember that Node.js also excels at handling multiple connections simultaneously because of its non-blocking I/O. To address the limitations of the single-threaded model, you can offload CPU-intensive tasks using worker threads or microservices, depending on the application’s architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fact 2: Memory Management Is Critical at Scale
&lt;/h3&gt;

&lt;p&gt;As your application grows, managing resources becomes increasingly important. The fact is memory leaks can be a big problem for growing Node.js applications. They happen when resources, like objects or variables, don’t get properly cleaned up. Over time, this slows everything down or even causes the server to crash, especially when traffic spikes.&lt;br&gt;
Adidas faced memory leaks in their Node.js systems, which caused performance problems as their user base grew. Aleksandar Mirilovic, Director of Software Engineering at Adidas, shared his experience in an article titled &lt;em&gt;&lt;a href="https://medium.com/@amirilovic/how-to-find-production-memory-leaks-in-node-js-applications-a1b363b4884f" rel="noopener noreferrer"&gt;How to Find Production Memory Leaks in Node.js Applications&lt;/a&gt;&lt;/em&gt;. He found objects were being held in memory unnecessarily, which led to resource bloat.&lt;/p&gt;

&lt;h4&gt;
  
  
  How They Fixed It:
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; After trying and failing to reproduce the issue locally and in staging, Adidas captured heap snapshots directly from production. The root cause was traced to a Google reCAPTCHA library creating new gRPC connections for each request without closing them. Refactoring the code to use a single client instance fixed the issue, stabilized memory usage, and improved performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fact 3: Scaling Across CPU Cores is not automatic
&lt;/h3&gt;

&lt;p&gt;Once you’ve optimized for I/O and memory management, there’s another aspect of scaling to consider: hardware utilization. By default, Node.js runs on a single thread, which means it doesn’t automatically take advantage of all available CPU cores.  For high-traffic apps, this can be a problem since a lot of your server’s processing power might go unused. Many developers don’t realize this, and without setting up something like clustering, they’re not getting the most out of their hardware.&lt;/p&gt;

&lt;p&gt;You can use the &lt;a href="https://nodejs.org/api/cluster.html" rel="noopener noreferrer"&gt;Node.js cluster module&lt;/a&gt; to run multiple instances of your application, with each instance running on a separate CPU core. This distributes the workload across all available cores, so your app can handle more concurrent users, and have improved performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Strategies that Scale
&lt;/h2&gt;

&lt;p&gt;Scaling Node.js to handle millions of users isn’t just about writing efficient code—it’s also about architecting an infrastructure that can grow with your user base.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strategy 1:  Load Balancing
&lt;/h3&gt;

&lt;p&gt;A single server can only handle so much—it’s a hardware limitation. That’s where load balancing comes in. By spreading traffic across multiple servers, you can prevent bottlenecks and keep your app responsive. Without it, you risk downtime or sluggish performance during traffic spikes. &lt;/p&gt;

&lt;p&gt;Just think of recent examples: ChatGPT users frustrated by crashes or Amazon shoppers greeted by pictures of cute dogs instead of product pages. Load balancing ensures smoother operations during demand surges. Tools like NGINX, HAProxy, or AWS Elastic Load Balancer can distribute requests evenly across Node.js instances, improving performance and adding redundancy so your app stays online even if a server goes down.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strategy 2:  Caching
&lt;/h3&gt;

&lt;p&gt;Fetching the same data repeatedly from a database or external API can slow down your app and strain backend resources. Caching solves this by storing frequently requested data in memory, allowing your app to deliver faster responses and handle more traffic without breaking a sweat. Tools like Redis and Memcached are game-changers here, and real-world examples show just how impactful caching can be.&lt;/p&gt;

&lt;p&gt;How Redis Is Used Across Industries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;E-commerce:&lt;/strong&gt; &lt;a href="https://redis.io/blog/what-gap-and-alliance-data-say-about-the-power-of-redis-enterprise/" rel="noopener noreferrer"&gt;Gap Inc. tackled slow inventory updates&lt;/a&gt; that frustrated shoppers by integrating Redis Enterprise. This reduced delays and provided real-time inventory information, even during Black Friday’s massive traffic spikes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fraud Detection:&lt;/strong&gt; &lt;a href="https://redis.io/customers/biocatch/" rel="noopener noreferrer"&gt;BioCatch&lt;/a&gt;, a digital-identity company, processes 5 billion transactions per month using Redis Enterprise. By caching behavioral data and API responses, they detect fraudulent activity in under 40 milliseconds, staying ahead of cyber threats.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Caching isn’t just about speed—it boosts reliability, reduces backend load, and prevents cart abandonment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strategy 3: Database performance
&lt;/h3&gt;

&lt;p&gt;Even if caching is in place, the weak link in high-traffic applications is often database operations. Inefficient queries or poorly designed structures can slow everything down, leaving users frustrated and your app struggling to keep up. Caching is great for speeding up frequent requests, but your database still needs to handle the rest of the work efficiently—especially as traffic grows.&lt;/p&gt;

&lt;p&gt;To handle high traffic more efficiently, you can make a few key improvements to your database. First, focus on fine-tuning your queries—this means simplifying SQL statements, getting rid of unnecessary operations, and adding indexes to speed things up. &lt;/p&gt;

&lt;p&gt;For example, if your app frequently searches for a user_id, adding an index for that column can make the database find it much faster. Next, reduce the number of queries your app sends. Instead of making separate requests for user details and orders, combine them into a single query using joins. If your app handles a lot of traffic, you’ll need to scale by either sharding (splitting your schema architecture into smaller, more focused pieces of data) or setting up read-replicas to share the load of heavy read operations. &lt;/p&gt;

&lt;h2&gt;
  
  
  Still wondering if Node.js can handle the pressure?
&lt;/h2&gt;

&lt;p&gt;It’s already powering some of the largest platforms in the world. LinkedIn transitioned from &lt;a href="https://www.pixelstech.net/article/1395463142-Why-does-LinkedIn-migrate-to-NodeJS-from-Ruby" rel="noopener noreferrer"&gt;Ruby on Rails to Node.js&lt;/a&gt;, cutting their server count by 20x while supporting over 600 million users. Netflix relies on &lt;a href="https://www.bellcorpstudio.com/blog/how-netflix-is-using-node-js" rel="noopener noreferrer"&gt;Node.js to manage millions of concurrent streams&lt;/a&gt; and deliver faster load times. &lt;a href="https://www.uber.com/en-US/blog/uber-tech-stack-part-two/" rel="noopener noreferrer"&gt;Uber’s engineering stack&lt;/a&gt; uses its real-time capabilities to handle high volumes of ride requests seamlessly. And Walmart turned to Node.js to keep their systems running smoothly during Black Friday’s intense traffic surges.&lt;/p&gt;

&lt;p&gt;With strategies like load balancing, caching, and database optimization, Node.js can handle even the most demanding workloads. Whether you’re building a global platform or scaling up to meet growing traffic, I am willing to bet that with Node.js you can truly create fast, dependable, and scalable applications.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>node</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>TinyMCE 7.4 &amp; 7.5 Release Notes - Overview</title>
      <dc:creator>Mrinalini Sugosh (Mrina)</dc:creator>
      <pubDate>Tue, 17 Dec 2024 14:19:18 +0000</pubDate>
      <link>https://forem.com/tinymce/tinymce-74-75-release-notes-overview-2jbj</link>
      <guid>https://forem.com/tinymce/tinymce-74-75-release-notes-overview-2jbj</guid>
      <description>&lt;p&gt;The latest updates to TinyMCE are here, bringing exciting new enhancements to streamline your editing experience and improve collaboration, accessibility, and customization. TinyMCE 7.4 and 7.5 introduce improvements to Comments, Templates, Export to Word, PDF, and Markdown plugins, alongside several bug fixes and usability enhancements.&lt;/p&gt;

&lt;p&gt;Our Engineering, Product, and Design teams have been hard at work, and we’re excited to share the results with you! 😊&lt;/p&gt;




&lt;h2&gt;
  
  
  What's New and Improved?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Enhanced Collaboration with Comments
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mentions Support:&lt;/strong&gt; Comments now allow user mentions using the &lt;code&gt;@&lt;/code&gt; symbol. Enable mentions with the &lt;code&gt;tinycomments_mentions_enabled&lt;/code&gt; option.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Improved Event Tracking:&lt;/strong&gt; The &lt;code&gt;conversationAuthor&lt;/code&gt; property is now available in event logs, enhancing data retrieval for create events.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI Updates:&lt;/strong&gt; Streamlined comment management with a refreshed interface and a new "comments-only mode" for focused reviews.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Export to Word &amp;amp; PDF
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Default Page Settings:&lt;/strong&gt; Both Export to Word and PDF now default to U.S. letter page size with standard 1-inch margins, offering consistent formatting for documents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Updated Plugin Configurations:&lt;/strong&gt; Simplified plugin setup with new default options for better out-of-the-box usability.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Markdown Plugin
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Improved Command Execution:&lt;/strong&gt; The &lt;code&gt;MarkdownInsert&lt;/code&gt; command is now asynchronous and immediately accessible at initialization, enhancing responsiveness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New Event:&lt;/strong&gt; A &lt;code&gt;MarkdownInserted&lt;/code&gt; event fires upon command completion, enabling better post-insertion handling.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  PowerPaste Plugin
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clipboard Compatibility:&lt;/strong&gt; The &lt;code&gt;mceInsertClipboardContent&lt;/code&gt; command now executes synchronously for plain text and is compatible with Markdown.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Read-Only Templates
&lt;/h3&gt;

&lt;p&gt;Prevent accidental edits to template content with the new read-only feature while allowing customization in non-locked sections. This enforces content consistency across documents.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accessibility Enhancements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Color Picker ARIA Support:&lt;/strong&gt; Improved screen reader compatibility with updated aria-label placement and descriptive text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Raw CSS Colors:&lt;/strong&gt; The &lt;code&gt;color_map_raw&lt;/code&gt; property now allows defining custom colors using raw CSS for greater flexibility in the color picker.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Bug Fixes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Improved Dialog Focus:&lt;/strong&gt; Nested dialogs now return focus to the parent dialog after closing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyboard Input Fixes:&lt;/strong&gt; Resolved conflicts on German Mac keyboards for &lt;code&gt;{&lt;/code&gt; input.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI Consistency:&lt;/strong&gt; Toolbar buttons and focus highlights now function correctly in read-only and fullscreen modes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markdown Compatibility:&lt;/strong&gt; Addressed issues with autocompleter activation and PowerPaste synchronization.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How to Get Access to TinyMCE 7.4 &amp;amp; 7.5
&lt;/h2&gt;

&lt;h3&gt;
  
  
  New to TinyMCE?
&lt;/h3&gt;

&lt;p&gt;Adding TinyMCE to your project is quick and simple! Sign up for your free cloud API key via our Pricing page. The API key includes a &lt;a href="https://www.tiny.cloud/auth/signup/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=7-4-5-release" rel="noopener noreferrer"&gt;14-day free trial&lt;/a&gt; of our most popular premium features.&lt;/p&gt;

&lt;h3&gt;
  
  
  Upgrading from TinyMCE 6?
&lt;/h3&gt;

&lt;p&gt;Check out our &lt;a href="https://www.tiny.cloud/blog/how-to-upgrade-to-tinymce-7/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=7-4-5-release" rel="noopener noreferrer"&gt;Migration Guide&lt;/a&gt; for tips on updating your implementation to leverage the latest features.&lt;/p&gt;

&lt;p&gt;For additional assistance, our &lt;a href="https://www.tiny.cloud/contact/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=7-4-5-release" rel="noopener noreferrer"&gt;Customer Success Team&lt;/a&gt; is here to help.&lt;/p&gt;




&lt;h2&gt;
  
  
  We Value Your Feedback
&lt;/h2&gt;

&lt;p&gt;Let us know your thoughts! Submit feature requests or vote on existing ones via the &lt;a href="https://www.tiny.cloud/roadmap/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=7-4-5-release" rel="noopener noreferrer"&gt;TinyMCE Roadmap&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Useful Links:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.tiny.cloud/blog/tinymce-latest-version/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=7-4-5-release" rel="noopener noreferrer"&gt;Release Blog Post&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.tiny.cloud/docs/tinymce/latest/release-notes/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=7-4-5-release" rel="noopener noreferrer"&gt;Release Notes&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/tinymce/tinymce/blob/main/modules/tinymce/CHANGELOG.md" rel="noopener noreferrer"&gt;Changelog&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.tiny.cloud/docs/tinymce/latest/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=7-4-5-release" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.tiny.cloud/get-tiny/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=7-4-5-release" rel="noopener noreferrer"&gt;Download&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thank you for choosing TinyMCE!  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- The Tiny Team&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>release</category>
      <category>programming</category>
    </item>
    <item>
      <title>5 Essential HTML and CSS Tricks to Ditch JavaScript</title>
      <dc:creator>Mrinalini Sugosh (Mrina)</dc:creator>
      <pubDate>Thu, 17 Oct 2024 13:41:29 +0000</pubDate>
      <link>https://forem.com/tinymce/5-essential-html-and-css-tricks-to-ditch-javascript-40kh</link>
      <guid>https://forem.com/tinymce/5-essential-html-and-css-tricks-to-ditch-javascript-40kh</guid>
      <description>&lt;p&gt;Let’s talk about when not to use JavaScript and why HTML and CSS can often be the better tools for the job. This might sound counterintuitive—especially coming from a Javascript Developer—but it’ll make sense by the end, trust me!&lt;/p&gt;

&lt;p&gt;I’m not anti-JavaScript. I write in it &lt;em&gt;all&lt;/em&gt; day long for a &lt;a href="https://www.tiny.cloud/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=5-html-css-tricks-ditch-js" rel="noopener noreferrer"&gt;Rich Text Editor&lt;/a&gt;. But over time, I’ve found that by using HTML and CSS for many tasks, I can actually make my code simpler, more maintainable, and often more performant. This approach is rooted in a core web development principle known as &lt;strong&gt;&lt;a href="https://www.w3.org/2001/tag/doc/leastPower.html" rel="noopener noreferrer"&gt;the rule of least power&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Rule of Least Power
&lt;/h2&gt;

&lt;p&gt;The &lt;em&gt;rule of least power&lt;/em&gt; is simple: use the least powerful language suitable for the task. In web development, this means using HTML over CSS, and CSS over JavaScript wherever possible. The logic here is that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTML&lt;/strong&gt; is declarative and lightweight, great for structuring content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS&lt;/strong&gt; is also declarative and used for styling, offering many layout and interaction options that don't need JavaScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript&lt;/strong&gt;, while powerful, does introduce complexity, performance costs, and potential errors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So let’s dive into some real-world examples, all of which are available in this &lt;a href="https://github.com/mrinasugosh/devto-html-css" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;, where you might have typically used JavaScript but can achieve better results with just HTML and CSS. These examples demonstrate how you can simplify your code while maintaining functionality and performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example 1: Custom Switches (Checkboxes without JS)
&lt;/h2&gt;

&lt;p&gt;We’ve all built custom switches. Usually, this involves a lot of JavaScript to handle clicks and toggle states. But here’s how you can build a fully functional, accessible switch using just HTML and CSS.&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%2Fjz5ri4xfncwmt9j48n4b.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%2Fjz5ri4xfncwmt9j48n4b.gif" alt="Custom Switches Demo" width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mrinasugosh/devto-html-css/tree/main/custom-switches" rel="noopener noreferrer"&gt;Github Repo&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  HTML
&lt;/h3&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;label&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"switch"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"checkbox"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"switch-input"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"switch-slider"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CSS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* The outer container for the switch */&lt;/span&gt;
&lt;span class="nc"&gt;.switch&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;relative&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;60px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;34px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* The hidden checkbox input */&lt;/span&gt;
&lt;span class="nc"&gt;.switch-input&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* The visible slider (background) of the switch */&lt;/span&gt;
&lt;span class="nc"&gt;.switch-slider&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;right&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#ccc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;.4s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* The circle (slider button) inside the switch */&lt;/span&gt;
&lt;span class="nc"&gt;.switch-slider&lt;/span&gt;&lt;span class="nd"&gt;:before&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;26px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;26px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;.4s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Pseudo-class that styles the switch when the checkbox is checked */&lt;/span&gt;
&lt;span class="nc"&gt;.switch-input&lt;/span&gt;&lt;span class="nd"&gt;:checked&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nc"&gt;.switch-slider&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#2196F3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Moves the slider button to the right when the switch is checked */&lt;/span&gt;
&lt;span class="nc"&gt;.switch-input&lt;/span&gt;&lt;span class="nd"&gt;:checked&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nc"&gt;.switch-slider&lt;/span&gt;&lt;span class="nd"&gt;:before&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;26px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This setup creates a fully functional switch without JavaScript, leveraging the &lt;code&gt;:checked&lt;/code&gt; pseudo-class for styling changes.This pseudo-class targets the  element (the checkbox) when it's in the "checked" state. It triggers the style changes for the switch, such as changing the background color and moving the slider button when the checkbox is toggled on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why This Is Better:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No JavaScript needed:&lt;/strong&gt; Fewer moving parts, fewer chances for bugs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessible out of the box:&lt;/strong&gt; You get keyboard and mouse support automatically, making it easier to maintain.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example 2: Auto Suggest with &lt;code&gt;&amp;lt;datalist&amp;gt;&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Autocomplete functionality is often done with a library or custom JavaScript. But with HTML’s &lt;code&gt;&amp;lt;datalist&amp;gt;&lt;/code&gt; element, you can create an auto-suggest input with minimal effort.&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%2Fzxqa1vcxdbxz03ardymu.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%2Fzxqa1vcxdbxz03ardymu.gif" alt="Auto Suggest Demo" width="712" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mrinasugosh/devto-html-css/blob/main/auto-suggest" rel="noopener noreferrer"&gt;Github Repo&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  HTML
&lt;/h3&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;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;list=&lt;/span&gt;&lt;span class="s"&gt;"suggestions"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Choose an option..."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;datalist&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"suggestions"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;option&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"Open AI"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;option&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"Open Source"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;option&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"Open Source Software"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/datalist&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CSS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;300px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;18px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&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;Here, the &lt;code&gt;&amp;lt;datalist&amp;gt;&lt;/code&gt; provides a list of suggestions when the user starts typing in the text input. No need for JavaScript-based autocomplete libraries.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why This Is Better:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lightweight:&lt;/strong&gt; It’s built into the browser, so it’s faster and more efficient.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple:&lt;/strong&gt; No extra JS, dependencies, or complex logic needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example 3: Smooth Scrolling with CSS
&lt;/h2&gt;

&lt;p&gt;In a lot of websites, smooth scrolling on a webpage was handled with jQuery or custom JavaScript functions. But now, we can achieve this with a single line of CSS.&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%2Fhglahm8j3no7obi4jygx.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%2Fhglahm8j3no7obi4jygx.gif" alt="Smooth Scrolling Demo" width="748" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mrinasugosh/devto-html-css/tree/main/smooth-scrolling" rel="noopener noreferrer"&gt;Github Repo&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  HTML
&lt;/h3&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;nav&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#section1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Go to Section 1&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#section2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Go to Section 2&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#section3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Go to Section 3&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- Section 1 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"section1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Section 1&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- Section 2 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"section2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Section 2&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- Section 3 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"section3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Section 3&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CSS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Basic styling for sections */&lt;/span&gt;
&lt;span class="nt"&gt;section&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;24px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Different background colors for each section */&lt;/span&gt;
&lt;span class="nf"&gt;#section1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;lightcoral&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;#section2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;lightseagreen&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;#section3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;lightblue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Styling for the navigation */&lt;/span&gt;
&lt;span class="nt"&gt;nav&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;fixed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;nav&lt;/span&gt; &lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;nav&lt;/span&gt; &lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#555&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;When a user clicks on a section's anchor link, this ensures that the page scrolls smoothly to that section.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why This Is Better:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Less Code:&lt;/strong&gt; Achieve smooth scrolling with a single line of CSS instead of complex JavaScript, reducing code complexity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved Performance:&lt;/strong&gt; Native CSS scrolling is faster and more efficient than JavaScript-based solutions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser Consistency:&lt;/strong&gt; CSS ensures smooth scrolling works consistently across browsers and devices.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example 4: Accordions using &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;summary&amp;gt;&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Accordion menus are often built with JavaScript to toggle visibility of content. But HTML provides the &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;summary&amp;gt;&lt;/code&gt; elements that give us this functionality with no extra code.&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%2F8qklj0ft1kkn4obo5ioj.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%2F8qklj0ft1kkn4obo5ioj.gif" alt="Accordion Demo" width="740" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mrinasugosh/devto-html-css/tree/main/accordions" rel="noopener noreferrer"&gt;Github Repo&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  HTML
&lt;/h3&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;details&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;Click to toggle&lt;span class="nt"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is some content!&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/details&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CSS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;details&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;300px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f9f9f9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;#ddd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;18px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;summary&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;details&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;open&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="nt"&gt;summary&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#2196F3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This simple markup gives us an interactive, accessible accordion that can open and close, without needing any JavaScript.&lt;/p&gt;

&lt;p&gt;Why This Is Better:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Native:&lt;/strong&gt; It’s a browser feature, so it’s faster and more reliable.&lt;/li&gt;
&lt;li&gt;** Accessible:** The browser handles focus management and interaction patterns for you.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example 5: Scroll-Triggered Animations with CSS
&lt;/h2&gt;

&lt;p&gt;Animating elements based on scroll position is often done with JavaScript libraries. But with the scroll-margin property and scroll-behavior CSS, you can create smoother, more accessible animations.&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%2Fj1gs9c16klabfrkdd1yy.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%2Fj1gs9c16klabfrkdd1yy.gif" alt="Scroll Animation Demo" width="760" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mrinasugosh/devto-html-css/tree/main/scroll-animations" rel="noopener noreferrer"&gt;Github Repo&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  HTML
&lt;/h3&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;body&amp;gt;&lt;/span&gt;
     &lt;span class="c"&gt;&amp;lt;!-- Navigation with anchor links --&amp;gt;&lt;/span&gt;
     &lt;span class="nt"&gt;&amp;lt;nav&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"position:fixed; top:10px; left:10px;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#section1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Section 1&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#section2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Section 2&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#section3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Section 3&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#section4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Section 4&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Section 1 --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"section1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Welcome to Section 1&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Section 2 --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"section2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Welcome to Section 2&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Section 3 --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"section3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Welcome to Section 3&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Section 4 --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"section4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Welcome to Section 4&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  CSS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="py"&gt;scroll-behavior&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;smooth&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Remove body margins */&lt;/span&gt;
&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Full viewport height for sections with centered content */&lt;/span&gt;
&lt;span class="nt"&gt;section&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f0f0f0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;background-color&lt;/span&gt; &lt;span class="m"&gt;0.6s&lt;/span&gt; &lt;span class="n"&gt;ease-in-out&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Styling for headings */&lt;/span&gt;
&lt;span class="nt"&gt;section&lt;/span&gt; &lt;span class="nt"&gt;h2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;36px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;transform&lt;/span&gt; &lt;span class="m"&gt;0.6s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;opacity&lt;/span&gt; &lt;span class="m"&gt;0.6s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;30px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Add margin for scroll snapping */&lt;/span&gt;
&lt;span class="nt"&gt;section&lt;/span&gt;&lt;span class="nd"&gt;:nth-child&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;odd&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#ffcccb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;section&lt;/span&gt;&lt;span class="nd"&gt;:nth-child&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;even&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#d0e7ff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Scroll-triggered animation */&lt;/span&gt;
&lt;span class="nt"&gt;section&lt;/span&gt;&lt;span class="nd"&gt;:target&lt;/span&gt; &lt;span class="nt"&gt;h2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why This Is Better
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No JavaScript required:&lt;/strong&gt; You can achieve smooth scroll-triggered animations with just CSS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance:&lt;/strong&gt; Animations are handled natively by the browser, leading to smoother, more efficient transitions without the complexity of JavaScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simpler to maintain:&lt;/strong&gt; Using CSS reduces the need for complex JavaScript scroll-tracking logic, making the code easier to update and maintain.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are plenty of cases where you can avoid the complexity of JavaScript entirely by using native browser features and clever CSS tricks. &lt;/p&gt;

&lt;p&gt;As we see the rise of AI assistants in coding and Chat-Oriented Programming, the ability to adopt and enforce simpler, declarative solutions like HTML and CSS becomes even more crucial. AI tools can generate javascript code quickly. But leveraging HTML and CSS for core functionality ensures that the code remains maintainable and easy to understand, both by humans and AI. By using the least powerful solution for the job, you not only make your code more accessible but also enable AI to assist in a more efficient and optimized way.&lt;/p&gt;

&lt;p&gt;HTML and CSS provide powerful tools for building interactive, accessible, and responsive web components—without the need for heavy JavaScript. So next time you’re tempted to reach for JavaScript, take a moment to consider if a simpler solution using HTML and CSS might work just as well, or even better.&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="https://github.com/mrinasugosh/devto-html-css" rel="noopener noreferrer"&gt;Github repository&lt;/a&gt; for all the examples in the article. Also, check out the &lt;a href="https://www.tiny.cloud/blog/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=5-html-css-tricks-ditch-js" rel="noopener noreferrer"&gt;TinyMCE blog&lt;/a&gt; for insights, best practices, and tutorials, or start your journey with TinyMCE by signing up for a &lt;a href="https://www.tiny.cloud/get-tiny/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=5-html-css-tricks-ditch-js" rel="noopener noreferrer"&gt;14-day free trial&lt;/a&gt; today.&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>html</category>
      <category>css</category>
    </item>
    <item>
      <title>10 HTML Features You Need to Know</title>
      <dc:creator>Mrinalini Sugosh (Mrina)</dc:creator>
      <pubDate>Tue, 01 Oct 2024 16:53:38 +0000</pubDate>
      <link>https://forem.com/tinymce/10-html-features-you-need-to-know-5de7</link>
      <guid>https://forem.com/tinymce/10-html-features-you-need-to-know-5de7</guid>
      <description>&lt;p&gt;Working with TinyMCE—a rich text editor (RTE) that directly interacts with the DOM and converts content into HTML—I've come to realize that HTML is more than just the basics like &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;, and &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;. There are several advanced features that can significantly enhance our web development projects, improving not only functionality but also accessibility and security. Unfortunately, many of us overlook these powerful tools. That's why I've put together a list of 10 HTML features you might not be usingm but should definitely consider incorporating into your work.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Template Element
&lt;/h2&gt;

&lt;p&gt;I've found the &lt;code&gt;&amp;lt;template&amp;gt;&lt;/code&gt; element incredibly useful for defining reusable HTML that isn't rendered until needed. It's great for managing dynamic content more efficiently. Since the content inside &lt;code&gt;&amp;lt;template&amp;gt;&lt;/code&gt; isn't displayed until invoked, it can help reduce the initial page load and improve performance.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;template&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"myTemplate"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"modal"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Template content goes here.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/template&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Security Tip:&lt;/strong&gt; When I use the &lt;code&gt;&amp;lt;template&amp;gt;&lt;/code&gt; element to inject content dynamically, I always ensure that the content is sanitized to prevent XSS (Cross-Site Scripting) attacks.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Mark Element
&lt;/h2&gt;

&lt;p&gt;To highlight important text, I use the &lt;code&gt;&amp;lt;mark&amp;gt;&lt;/code&gt; element. It's a simple but effective way to draw attention to key points in content. For users with assistive technologies, like screen readers, the &lt;code&gt;&amp;lt;mark&amp;gt;&lt;/code&gt; element helps emphasize important information within the text.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;The term &lt;span class="nt"&gt;&amp;lt;mark&amp;gt;&lt;/span&gt;highlighted&lt;span class="nt"&gt;&amp;lt;/mark&amp;gt;&lt;/span&gt; is important in this context.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Accessibility Tip:&lt;/strong&gt; The &lt;code&gt;&amp;lt;mark&amp;gt;&lt;/code&gt; element is automatically announced by screen readers, so it's a good way to ensure key information isn't missed by users relying on these technologies.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Picture Element
&lt;/h2&gt;

&lt;p&gt;When I want to ensure images are responsive and look great on all devices, I turn to the &lt;code&gt;&amp;lt;picture&amp;gt;&lt;/code&gt; element. It allows me to specify multiple image sources, so I can serve the most appropriate one based on the user's device. It's essential for improving load times and user experience.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;picture&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(min-width: 800px)"&lt;/span&gt; &lt;span class="na"&gt;srcset=&lt;/span&gt;&lt;span class="s"&gt;"large.jpg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;media=&lt;/span&gt;&lt;span class="s"&gt;"(min-width: 400px)"&lt;/span&gt; &lt;span class="na"&gt;srcset=&lt;/span&gt;&lt;span class="s"&gt;"medium.jpg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"small.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Responsive Image"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/picture&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Accessibility Tip:&lt;/strong&gt; I always include the &lt;code&gt;alt&lt;/code&gt; attribute for images, ensuring that all users can understand the content, even if they cannot see the image.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Details and Summary Elements
&lt;/h2&gt;

&lt;p&gt;To create expandable content sections, I use the &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;summary&amp;gt;&lt;/code&gt; elements. They're perfect for FAQs or collapsible sections, helping keep web pages clean and user-friendly. These elements also enhance accessibility by allowing users to control the display of additional content without relying on JavaScript.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;details&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;More Information&lt;span class="nt"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is the hidden content that will be revealed when you click on "More Information".&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/details&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Accessibility Consideration:&lt;/strong&gt; The &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;summary&amp;gt;&lt;/code&gt; elements provide a semantic way to create collapsible content, ensuring that assistive technologies correctly interpret the relationship between the summary and the details.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Dialog Element
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; element is a native way to create modals without relying on external JavaScript libraries. I find it perfect for alerts, confirmation dialogs, or custom pop-ups. Beyond its ease of use, the &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; element is more accessible than many custom modal implementations, as it's designed with built-in focus management.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dialog&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"myDialog"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is a modal dialog&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"document.getElementById('myDialog').close()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Close&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dialog&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"document.getElementById('myDialog').showModal()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Open Dialog&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Accessibility Consideration:&lt;/strong&gt; The &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; element automatically manages focus when it opens, which is crucial for users navigating with a keyboard or screen reader.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Output Element
&lt;/h2&gt;

&lt;p&gt;I use the &lt;code&gt;&amp;lt;output&amp;gt;&lt;/code&gt; element to display results of calculations or user interactions directly within forms. It's a straightforward way to enhance form interactivity without heavy JavaScript and ensures that assistive technologies can correctly interpret the content.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;oninput=&lt;/span&gt;&lt;span class="s"&gt;"result.value=parseInt(a.value)+parseInt(b.value)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"number"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"a"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; +
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"number"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"b"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    = &lt;span class="nt"&gt;&amp;lt;output&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"result"&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"a b"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;0&lt;span class="nt"&gt;&amp;lt;/output&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Accessibility Consideration:&lt;/strong&gt; The &lt;code&gt;&amp;lt;output&amp;gt;&lt;/code&gt; element can be programmatically linked to form elements, allowing screen readers to announce the result as it changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Data Element
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;&amp;lt;data&amp;gt;&lt;/code&gt; element helps me associate machine-readable values with human-readable content. This is particularly useful for SEO and making content more understandable for search engines, which can then present it more accurately in search results.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Price: &lt;span class="nt"&gt;&amp;lt;data&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"49.99"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;$49.99&lt;span class="nt"&gt;&amp;lt;/data&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Security Note:&lt;/strong&gt; When displaying data linked to backend systems, I ensure that the data presented is sanitized and free from vulnerabilities that could expose sensitive information.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Meter Element
&lt;/h2&gt;

&lt;p&gt;If I need to represent a measurement within a known range, I use the &lt;code&gt;&amp;lt;meter&amp;gt;&lt;/code&gt; element. Whether it's disk usage or progress tracking, it provides a clear, visual representation. The &lt;code&gt;&amp;lt;meter&amp;gt;&lt;/code&gt; element is also accessible, offering an easy-to-understand display of numeric values for all users.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meter&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"70"&lt;/span&gt; &lt;span class="na"&gt;min=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt; &lt;span class="na"&gt;max=&lt;/span&gt;&lt;span class="s"&gt;"100"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;70%&lt;span class="nt"&gt;&amp;lt;/meter&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Accessibility Tip:&lt;/strong&gt; I always provide context around the &lt;code&gt;&amp;lt;meter&amp;gt;&lt;/code&gt; element, so that users with assistive devices understand what the measurement represents.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Time Element
&lt;/h2&gt;

&lt;p&gt;To accurately represent dates and times, I use the &lt;code&gt;&amp;lt;time&amp;gt;&lt;/code&gt; element. This not only makes content more accessible but also enhances how search engines interpret temporal data. It's especially important for screen readers.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"2024-08-15"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;August 15, 2024&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Accessibility Tip:&lt;/strong&gt; Using the &lt;code&gt;datetime&lt;/code&gt; attribute provides a machine-readable format, which can be easily interpreted by assistive technologies.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Progress Element
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;&amp;lt;progress&amp;gt;&lt;/code&gt; element lets me display the completion progress of tasks like downloads or submissions. It's a straightforward way to offer real-time feedback to users and ensures that assistive technologies can announce progress updates.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;progress&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"70"&lt;/span&gt; &lt;span class="na"&gt;max=&lt;/span&gt;&lt;span class="s"&gt;"100"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;70%&lt;span class="nt"&gt;&amp;lt;/progress&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Accessibility Consideration:&lt;/strong&gt; Pairing the &lt;code&gt;&amp;lt;progress&amp;gt;&lt;/code&gt; element with an &lt;code&gt;aria-label&lt;/code&gt; or similar attribute provides context to users of screen readers about what the progress represents.&lt;/p&gt;

&lt;p&gt;I'd love to hear how these tips help improve your workflow. Want to explore more tips and enhance your content creation experience? Check out the &lt;a href="https://www.tiny.cloud/blog/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=10-html-features-blog" rel="noopener noreferrer"&gt;TinyMCE blog&lt;/a&gt; for insights, best practices, and tutorials, or start your journey with TinyMCE by signing up for a &lt;a href="https://www.tiny.cloud/get-tiny/?utm_campaign=devrel_devto_tiny&amp;amp;utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_term=10-html-features-blog" rel="noopener noreferrer"&gt;14-day free trial&lt;/a&gt; today!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>html</category>
    </item>
  </channel>
</rss>
