<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Denilson</title>
    <description>The latest articles on DEV Community by Denilson (@denihs).</description>
    <link>https://dev.to/denihs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F562261%2Fdb6e40fb-b985-40ce-99f0-e38506013f17.png</url>
      <title>DEV Community: Denilson</title>
      <link>https://dev.to/denihs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/denihs"/>
    <language>en</language>
    <item>
      <title>Commit Messages on Autopilot: How I Built an AI-Powered Tool to Save Time and Sanity</title>
      <dc:creator>Denilson</dc:creator>
      <pubDate>Wed, 12 Feb 2025 00:39:01 +0000</pubDate>
      <link>https://dev.to/denihs/commit-messages-on-autopilot-how-i-built-an-ai-powered-tool-to-save-time-and-sanity-l2l</link>
      <guid>https://dev.to/denihs/commit-messages-on-autopilot-how-i-built-an-ai-powered-tool-to-save-time-and-sanity-l2l</guid>
      <description>&lt;h2&gt;
  
  
  The Problem: Writing Commit Messages Sucks
&lt;/h2&gt;

&lt;p&gt;If you've ever worked on a project with frequent commits, you know the pain of writing commit messages. In the past year alone, I've made over &lt;strong&gt;2,500 commits&lt;/strong&gt;—and I had to write every single message.&lt;/p&gt;

&lt;p&gt;Some were clear and meaningful. Others? Not so much. I’d often type something generic like &lt;code&gt;fix stuff&lt;/code&gt; or &lt;code&gt;small changes&lt;/code&gt; just to move on. But when I needed to revisit those changes, I had &lt;strong&gt;zero context&lt;/strong&gt; on what actually happened in those commits.&lt;/p&gt;

&lt;p&gt;Wouldn't it be great if something could just &lt;strong&gt;write the commit messages for me?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Idea: Let AI Do the Heavy Lifting
&lt;/h2&gt;

&lt;p&gt;That's when I decided to build &lt;strong&gt;Cortex CLI&lt;/strong&gt;, an AI-powered commit message generator. The idea was simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read my code changes&lt;/li&gt;
&lt;li&gt;Pass them to an AI&lt;/li&gt;
&lt;li&gt;Get a meaningful commit message in return&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I started this as a quick side project, but it &lt;strong&gt;quickly became indispensable&lt;/strong&gt;. Now, I use it &lt;strong&gt;every single day&lt;/strong&gt;, and some of my friends do too.&lt;/p&gt;

&lt;p&gt;Last month alone, three of us generated over &lt;strong&gt;700 commit messages&lt;/strong&gt; using Cortex. The time savings have been &lt;strong&gt;massive&lt;/strong&gt;, and my commit history has never been this clean.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  &lt;strong&gt;The CLI: Your Terminal's Best Friend&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Cortex CLI is a command-line tool that integrates seamlessly into your workflow. After installing it and setting your API token, you can generate commit messages like magic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cortex commit-message &lt;span class="nt"&gt;--commitStaged&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Boom! AI-generated commit messages, no thinking required. You just &lt;strong&gt;review the output&lt;/strong&gt; and move on.&lt;/p&gt;

&lt;p&gt;Want to integrate it deeper? You can create a &lt;code&gt;.cortexrc&lt;/code&gt; file in your projects to customize how the AI generates messages. One of my favorite features is the &lt;code&gt;--preScript&lt;/code&gt; flag, which &lt;strong&gt;runs unit tests and linting before committing&lt;/strong&gt;. No more broken commits!&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/denihs/cortex-cli/blob/main/README.md" rel="noopener noreferrer"&gt;Check out the CLI Docs&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;The Web App: A Command Center for Your Commits&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;While the CLI is great for quick commits, I also wanted a &lt;strong&gt;UI where I could manage everything&lt;/strong&gt;—so I built one in &lt;strong&gt;Meteor, React, and MongoDB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://commits.denyhs.com/" rel="noopener noreferrer"&gt;Check it out here&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;What can you do in the UI?&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;✅ View all AI-generated commit messages\&lt;br&gt;
✅ Create templates to fine-tune how messages are generated\&lt;br&gt;
✅ Set up &lt;strong&gt;daily commit reports&lt;/strong&gt; summarizing your work\&lt;br&gt;
✅ Organize and filter your commits with tags (coming soon!)&lt;/p&gt;

&lt;p&gt;And of course, &lt;strong&gt;the API lives here as well&lt;/strong&gt;, powering both the CLI and the web app.&lt;/p&gt;




&lt;h2&gt;
  
  
  Challenges &amp;amp; Solutions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Getting AI to Write Good Commit Messages&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;At first, I struggled to get consistently useful commit messages. The AI would sometimes produce vague or unhelpful descriptions. The problem? &lt;strong&gt;The prompt mattered way more than I expected.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So, instead of fighting it, I built a &lt;strong&gt;template system&lt;/strong&gt; that lets users customize exactly how they want their commit messages structured. Now, you can use template strings and create AI prompts that &lt;strong&gt;match your team's style&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://commits.denyhs.com/docs/templates" rel="noopener noreferrer"&gt;Check out the Templates Docs&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Keeping Code Secure&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I knew that people would be worried about sending their code to an AI. That’s why &lt;strong&gt;Cortex never stores or shares your source code&lt;/strong&gt;. It only processes the &lt;strong&gt;diffs of your changes&lt;/strong&gt; and deletes everything afterward.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Security-first design.&lt;/strong&gt; No storing, no tracking.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://commits.denyhs.com/docs?section=faq" rel="noopener noreferrer"&gt;More on security in the FAQ&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How We’re Using It
&lt;/h2&gt;

&lt;p&gt;Everyone in my circle uses Cortex the same way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Create a &lt;code&gt;.cortexrc&lt;/code&gt; file&lt;/strong&gt; in each project to customize AI behavior&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run &lt;code&gt;cortex commit-message&lt;/code&gt;&lt;/strong&gt; whenever committing changes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;(Optional) Use &lt;code&gt;--preScript&lt;/code&gt;&lt;/strong&gt; to run tests before committing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This setup has saved us &lt;strong&gt;tons of time&lt;/strong&gt;. No more pausing coding sessions just to think about commit messages. We just &lt;strong&gt;review, approve, and move on&lt;/strong&gt;.&lt;/p&gt;




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

&lt;p&gt;This is just the beginning! Here’s what’s coming:&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;JetBrains &amp;amp; VS Code extensions&lt;/strong&gt; – No need to run commands, just click a button!\&lt;br&gt;
🤖 &lt;strong&gt;AI-powered code reviews&lt;/strong&gt; – Before committing, get suggestions on how to improve your code.\&lt;br&gt;
🏷️ &lt;strong&gt;Better filters &amp;amp; tags&lt;/strong&gt; – Make the UI even more powerful.&lt;/p&gt;

&lt;p&gt;I’m also open to feedback! If you try it out and have ideas, let me know.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Get started here:&lt;/strong&gt; &lt;a href="https://commits.denyhs.com/docs?section=getting-started" rel="noopener noreferrer"&gt;https://commits.denyhs.com/docs?section=getting-started&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Let’s Automate Commit Messages Forever
&lt;/h2&gt;

&lt;p&gt;Building Cortex has been &lt;strong&gt;a game-changer&lt;/strong&gt; for me and my workflow. If you’re tired of writing commit messages, give it a try!&lt;/p&gt;

&lt;p&gt;Would love to hear your thoughts. What features would you like to see next? Let’s make commit messages effortless for everyone! 🚀&lt;/p&gt;

</description>
      <category>ai</category>
      <category>git</category>
      <category>productivity</category>
      <category>coding</category>
    </item>
    <item>
      <title>Meteor.js 3 is officially here!</title>
      <dc:creator>Denilson</dc:creator>
      <pubDate>Mon, 22 Jul 2024 20:11:34 +0000</pubDate>
      <link>https://dev.to/meteor/meteor-3-is-officially-here-3gml</link>
      <guid>https://dev.to/meteor/meteor-3-is-officially-here-3gml</guid>
      <description>&lt;p&gt;We are thrilled to announce the release of Meteor.js 3.0, a milestone in our journey to create a powerful and versatile platform for modern web development. This release marks a significant leap forward, and we couldn't have achieved it without the unwavering support of our incredible community and partners.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
What does Meteor 3 bring to the table?

&lt;ul&gt;
&lt;li&gt;Node v20 and Express Integration&lt;/li&gt;
&lt;li&gt;Package Updates&lt;/li&gt;
&lt;li&gt;Major Architectural Changes&lt;/li&gt;
&lt;li&gt;New Documentation Highlights&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;How to migrate to version 3&lt;/li&gt;

&lt;li&gt;How to Use Meteor 3.0&lt;/li&gt;

&lt;li&gt;Community Effort and Collaboration&lt;/li&gt;

&lt;li&gt;Conclusion&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  What does Meteor 3.0 bring to the table?
&lt;/h2&gt;

&lt;p&gt;In short, Meteor 3.0 brings Node.js 20, Express integration, Fibers removal, async server methods, ARM support, package updates, and new documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Node v20 and Express Integration
&lt;/h3&gt;

&lt;p&gt;One of the most significant changes in Meteor 3.0 is its integration with Node.js 20 and Express. This update allows Meteor to fully take advantage of the latest features and performance improvements in Node.js 20. Express, a widely used web application framework for Node.js, provides robust tools for building web and mobile applications.&lt;/p&gt;

&lt;p&gt;We covered this extensively (and more) in this &lt;a href="https://dev.to/meteor/embracing-the-future-meteor-3-with-node-v20-and-express-2bd8"&gt;article&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Package Updates
&lt;/h3&gt;

&lt;p&gt;Meteor 3.0 has numerous package updates, reflecting changes in their dependencies to ensure compatibility with the latest versions. These updates are crucial for maintaining security, stability, and performance. By updating the packages, Meteor ensures developers can access the newest features and improvements available in the broader Node.js and JavaScript ecosystems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Major Architectural Changes
&lt;/h3&gt;

&lt;p&gt;Meteor 3.0 introduces substantial architectural changes to modernize the platform and improve its performance and scalability. Key changes include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dropping Fibers:&lt;/strong&gt; Replacing Fibers with native async/await syntax to align with modern JavaScript standards. This change simplifies the codebase and enhances compatibility with future Node.js releases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Async/Await for MongoDB Interactions:&lt;/strong&gt; Making all MongoDB operations asynchronous to improve performance and reduce latency.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ARM Architecture Support:&lt;/strong&gt; Expanding Meteor's compatibility to include ARM architectures, allowing developers to run Meteor on a wider range of hardware, including Raspberry Pi and other ARM-based devices.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  New Documentation Highlights
&lt;/h3&gt;

&lt;p&gt;We have a new &lt;a href="https://v3-docs.meteor.com/" rel="noopener noreferrer"&gt;v3 docs&lt;/a&gt; with detailed documentation for Meteor 3.0, including API references and examples.&lt;/p&gt;

&lt;p&gt;Our &lt;a href="https://v3-migration-docs.meteor.com" rel="noopener noreferrer"&gt;Migration Guide&lt;/a&gt; also includes step-by-step instructions for updating existing projects to Meteor 3.0, addressing potential issues, and providing solutions for a seamless transition.&lt;/p&gt;

&lt;p&gt;Let's continue the migration talk in the next section.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to migrate to version 3
&lt;/h2&gt;

&lt;p&gt;We have a lot of material out there to help you to migrate. Here is a list of some of them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://v3-migration-docs.meteor.com/" rel="noopener noreferrer"&gt;Migration Guide&lt;/a&gt;: We built this Migration Guide to help you in this process. It should cover most of the cases.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/jankapunkt/series/25715"&gt;Meteor Migrations Series' Articles&lt;/a&gt;: Several articles that will help you prepare your app and gradually upgrade it.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://forums.meteor.com/" rel="noopener noreferrer"&gt;Meteor Forums&lt;/a&gt;: The biggest piece of knowledge about Meteor. We have several posts of people sharing results and asking for help. If you don't find the issue there, feel free to create a post and ask for help!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Use Meteor 3.0
&lt;/h2&gt;

&lt;p&gt;To install Meteor 3.0, you can simply run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx meteor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To create a new Meteor 3 project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;meteor create --release 3.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To update an existing Meteor project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;meteor update --release 3.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Community Effort and Collaboration
&lt;/h2&gt;

&lt;p&gt;The successful release of Meteor 3.0 is a testament to the dedication and collaboration of the Meteor community. This milestone would not have been possible without the contributions of countless developers, testers, and advocates who tirelessly worked to identify issues, suggest improvements, and test new features. The community's collective effort has played a crucial role in shaping Meteor 3.0 into a robust and reliable platform.&lt;/p&gt;

&lt;p&gt;To all the people who made part of this, thank you ❤️&lt;/p&gt;

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

&lt;p&gt;Meteor 3.0 is a game-changer for web development, bringing cutting-edge features and improvements that empower developers to build the next generation of web applications. With its enhanced performance, modern integrations, and improved developer experience, Meteor 3.0 is poised to lead the way in the evolving web development landscape.&lt;/p&gt;

&lt;p&gt;As we celebrate this milestone, we look forward to seeing the incredible projects and innovations the Meteor community will create with Meteor 3.0. I can't say thank you enough for being a part of this journey, and here's to the exciting future ahead!&lt;/p&gt;

&lt;p&gt;For more details on Meteor 3.0, please visit the post in our &lt;a href="https://forums.meteor.com/t/its-official-meteor-3-0-official-release-is-out/61860" rel="noopener noreferrer"&gt;Forums&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Join The Renaissance of Meteor.js on July 29th
&lt;/h3&gt;

&lt;p&gt;Join us on July 29th for our online event, The Renaissance of Meteor.js. We’ll discuss Meteor 3 and share exciting plans for the future. Sign up to hear directly from the Meteor Core Team about what we've been working on.&lt;/p&gt;

&lt;p&gt;Plus, you’ll have a chance to win exclusive Meteor SWAG and Galaxy Cloud credits! Learn more about the event &lt;a href="https://forums.meteor.com/t/online-event-the-renaissance-of-meteor-js-july-29th-to-august-1st/61865" rel="noopener noreferrer"&gt;here&lt;/a&gt;. We hope to see you there!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>meteor</category>
      <category>node</category>
    </item>
    <item>
      <title>Meteor 2.16 and Oplog Tailing Optimization</title>
      <dc:creator>Denilson</dc:creator>
      <pubDate>Tue, 14 May 2024 22:32:04 +0000</pubDate>
      <link>https://dev.to/meteor/meteor-216-and-oplog-tailing-optimization-ckk</link>
      <guid>https://dev.to/meteor/meteor-216-and-oplog-tailing-optimization-ckk</guid>
      <description>&lt;p&gt;We're excited to announce the release of Meteor 2.16, packed with significant improvements designed to optimize your experience and enhance performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Optimized Oplog Tailing Performance
&lt;/h2&gt;

&lt;p&gt;In response to community feedback and extensive discussions about Meteor's oplog implementation and its limitations in scaling, we've introduced new MongoDB package options to optimize oplog tailing performance.&lt;/p&gt;

&lt;p&gt;This was thanks to one of our community members,&lt;a href="https://github.com/Twisterking" rel="noopener noreferrer"&gt;@twisterking&lt;/a&gt;, who opened a &lt;a href="https://github.com/meteor/meteor/pull/13009" rel="noopener noreferrer"&gt;pull request&lt;/a&gt; introducing this new improvement.&lt;/p&gt;

&lt;p&gt;The implementation provides a solution for including or excluding specific collections from oplog tailing. This simple yet effective change can drastically reduce CPU load during large batch updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt;&lt;br&gt;
To configure this optimization, update your settings.json file as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;other&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;settings&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"public"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;settings&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"packages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"mongo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"oplogExcludeCollections"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"products"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"prices"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Excludes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"products"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"prices"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;collections&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;oplog&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;tailing.&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;OR:&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"oplogIncludeCollections"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"messages"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;ONLY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;monitors&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"messages"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;collection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;oplog&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;updates&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"admin.$cmd"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;oplogs).&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We believe this enhancement will greatly benefit users, reducing unwanted server restarts and ensuring smoother operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Session Storage Option for Accounts
&lt;/h2&gt;

&lt;p&gt;Some developers have suggested that a storage system other than Local Storage (which Meteor users use to store login tokens and other things) should be possible, and the second option should be Session Storage.&lt;/p&gt;

&lt;p&gt;Today, this is possible thanks to &lt;a href="https://github.com/StorytellerCZ" rel="noopener noreferrer"&gt;@StorytellerCZ&lt;/a&gt;, who created this &lt;a href="https://github.com/meteor/meteor/pull/13046" rel="noopener noreferrer"&gt;PR&lt;/a&gt; to address the matter.&lt;/p&gt;

&lt;p&gt;To use Session Storage instead of the default Local Storage, you can add this to your settings file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;other&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;settings&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"public"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;settings&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"packages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"accounts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"clientStorage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"session"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From here, your app will start using Session Storage!&lt;/p&gt;

&lt;h2&gt;
  
  
  How to test it
&lt;/h2&gt;

&lt;p&gt;To install Meteor in this version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx meteor@latest 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can create a new app in this version with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;meteor create myapp &lt;span class="nt"&gt;--release&lt;/span&gt; 2.16
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or update from 2.15 to this one with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;meteor update &lt;span class="nt"&gt;--release&lt;/span&gt; 2.16
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you're coming from an older version, please check our &lt;a href="https://guide.meteor.com/2.14-migration" rel="noopener noreferrer"&gt;Migration Guides&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Special note about Meteor 3 Launch Week
&lt;/h2&gt;

&lt;p&gt;With 2.16, we're also having our Meteor 3 Launch Week, introducing more of our &lt;a href="https://dev.to/meteor/embracing-the-future-meteor-3-with-node-v20-and-express-2bd8"&gt;Meteor 3&lt;/a&gt;, as well as &lt;a href="https://dev.to/meteor/a-fresh-look-exploring-galaxy-20s-new-uiux-4n9c"&gt;Galaxy 2.0&lt;/a&gt;, and we will have! So keep an eye on our &lt;a href="https://dev.to/meteor"&gt;dev.to&lt;/a&gt; and on &lt;a href="https://twitter.com/meteorjs" rel="noopener noreferrer"&gt;X&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;This 2.16 version offers more to explore. Check out the rest in our &lt;a href="https://github.com/meteor/meteor/pull/13066" rel="noopener noreferrer"&gt;PR&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We can leave without mentioning the people who made this release possible:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/nachocodoner" rel="noopener noreferrer"&gt;@nachocodoner&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/StorytellerCZ" rel="noopener noreferrer"&gt;@StorytellerCZ&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/jamauro" rel="noopener noreferrer"&gt;@jamauro&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/Twisterking" rel="noopener noreferrer"&gt;@Twisterking&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/harryadel" rel="noopener noreferrer"&gt;@harryadel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you for your hard work and dedication to the Meteor.js community!&lt;br&gt;
We encourage all users to update to Meteor.js 2.16 to take advantage of these new features and improvements.&lt;br&gt;
For more information about Meteor.js, please visit the Meteor.js &lt;a href="https://www.meteor.com/" rel="noopener noreferrer"&gt;website&lt;/a&gt;.&lt;/p&gt;

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

</description>
      <category>meteor</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Embracing the Future: Meteor 3 with Node v20 and Express</title>
      <dc:creator>Denilson</dc:creator>
      <pubDate>Fri, 10 May 2024 20:59:23 +0000</pubDate>
      <link>https://dev.to/meteor/embracing-the-future-meteor-3-with-node-v20-and-express-2bd8</link>
      <guid>https://dev.to/meteor/embracing-the-future-meteor-3-with-node-v20-and-express-2bd8</guid>
      <description>&lt;p&gt;Meteor, a powerful full-stack JavaScript platform, has undergone a significant transformation with its latest update, Meteor 3. &lt;em&gt;&lt;strong&gt;This upgrade not only modernizes the framework but also enhances its capabilities&lt;/strong&gt;&lt;/em&gt; by integrating the latest Node.js features, including version 20 LTS, and moving from Fibers to native &lt;code&gt;async/await&lt;/code&gt; syntax. Let’s dive into how these changes benefit the Meteor ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of contents:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Launch Week - Day 1&lt;/li&gt;
&lt;li&gt;The Shift from Fibers to Async/Await&lt;/li&gt;
&lt;li&gt;
Meteor 3 and Node v20: A Powerful Combination

&lt;ul&gt;
&lt;li&gt;Top-Level Await&lt;/li&gt;
&lt;li&gt;Stable Timers Promises API&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Integrating Express into Meteor&lt;/li&gt;

&lt;li&gt;

Preparing for the Official Release: Understanding Meteor 3's Current State

&lt;ul&gt;
&lt;li&gt;Recent Updates and How to Use Meteor 3 Now&lt;/li&gt;
&lt;li&gt;Community Feedback and Next Steps&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Conclusion&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Launch Week - Day 1
&lt;/h2&gt;

&lt;p&gt;We're excited to launch the new Meteor 3.0 Docs and Migration Guide today!&lt;/p&gt;

&lt;p&gt;Check out the new V3 Docs at (&lt;a href="https://v3-docs.meteor.com/" rel="noopener noreferrer"&gt;https://v3-docs.meteor.com/&lt;/a&gt;), which focuses solely on Meteor 3.0 and steps away from backward compatibility. While much remains familiar from Meteor 2.x, there are key differences, and these new docs are here for 3.0 only. If you’re still on version 2, your go-to resource remains &lt;a href="https://docs.meteor.com" rel="noopener noreferrer"&gt;https://docs.meteor.com&lt;/a&gt;. As we roll out the official version 3, it will take the lead on our website, transitioning the current documentation to v2-docs.meteor.com.&lt;/p&gt;

&lt;p&gt;The Migration Guide (&lt;a href="https://v3-migration-docs.meteor.com/" rel="noopener noreferrer"&gt;https://v3-migration-docs.meteor.com/&lt;/a&gt;) is here to help those of you on Meteor 2.x seamlessly transition to 3.0. It highlights the changes, answers your frequent questions, and guides you through the transition, including modified and removed functions. Plus, we’ve included helpful links to community resources!&lt;/p&gt;

&lt;p&gt;We’re super excited to see your projects take advantage of Meteor 3.0! Go ahead, explore the new resources, and let us know your thoughts. Your feedback is crucial - share your suggestions, report issues, and contribute. Let's make Meteor 3.0 the best version yet!&lt;/p&gt;

&lt;p&gt;And while we're here, let's explore Meteor 3.0 more.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Shift from Fibers to Async/Await
&lt;/h2&gt;

&lt;p&gt;For years, Meteor relied on Fibers to simplify asynchronous code, making it look and behave synchronously. This approach was instrumental in avoiding callback hell and enhancing code readability. However, Fibers became a limiting factor as it was not compatible with newer versions of Node.js, particularly from version 16 onwards.&lt;/p&gt;

&lt;p&gt;Removing Fibers was a critical step in bringing Meteor up to date with the most current Node.js stack. This transition allows Meteor to leverage all the new features that Node v20 provides. Async/await, a feature now fully supported in Meteor 3, is a prime example.&lt;/p&gt;

&lt;p&gt;Example of Async/Await in Meteor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Meteor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;getUserData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;UsersCollection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findOneAsync&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Meteor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user-fetch-failed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Could not retrieve user data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This example demonstrates how you can fetch user data asynchronously. Using &lt;code&gt;async/await&lt;/code&gt; ensures the code is clean and easy to read, and error handling is straightforward.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meteor 3 and Node v20: A Powerful Combination
&lt;/h2&gt;

&lt;p&gt;Node v20 brings several enhancements that Meteor 3 utilizes to improve performance and developer experience. These include Top-Level Await and Timers Promises API!&lt;/p&gt;

&lt;h3&gt;
  
  
  Top-Level Await
&lt;/h3&gt;

&lt;p&gt;Allows using the await keyword outside of async functions within modules, simplifying the initialization of applications.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// At the top level in your Meteor app's server-side code&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;settings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;SettingsCollection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findOneAsync&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;app-config&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;Meteor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startup&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;configureApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;settings&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;blockquote&gt;
&lt;p&gt;This feature allows developers to perform asynchronous operations before the application fully starts, ensuring that necessary configurations are in place.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Stable Timers Promises API
&lt;/h3&gt;

&lt;p&gt;Provides a promise-based alternative to traditional timer functions like &lt;code&gt;setTimeout&lt;/code&gt; and &lt;code&gt;setInterval&lt;/code&gt;, enhancing the way delays and periodic tasks are handled in a non-blocking manner.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;setTimeout&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;timers/promises&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;Meteor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;methods&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;delayedGreeting&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Wait for 2 seconds before continuing&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Process after the delay&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`Hello, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="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;These are only two examples of how Meteor 3 takes advantage of the features Node 20 offers. Another great addition to Meteor is the integration with Express.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrating Express into Meteor
&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%2F1qd7bczrr0bztliqpw7t.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%2F1qd7bczrr0bztliqpw7t.gif" alt="Image description" width="1024" height="1024"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The adoption of Express in Meteor 3 opens up new possibilities for developers, especially when building RESTful APIs or serving static files. Express is a minimal and flexible Node.js web application framework that provides a robust set of features for web and mobile applications.&lt;/p&gt;

&lt;p&gt;Here is an example of using the &lt;code&gt;WebApp.handlers&lt;/code&gt; as your express instance as you typically would:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;LinksCollection&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/imports/api/links&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;WebApp&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;meteor/webapp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;WebApp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handlers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/all-links&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;links&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;LinksCollection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;fetchAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;links&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// other code ...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, express is used to define a simple API endpoint that returns data from a Meteor collection. This setup shows how seamlessly Express can integrate into the Meteor ecosystem, providing familiar tools for those accustomed to traditional Node.js development.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can read more about Meteor with Express &lt;a href="https://dev.to/meteor/meteor-v3-uses-express-under-the-hood-how-to-use-and-deploy-it-5c2n"&gt;here&lt;/a&gt;!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Preparing for the Official Release: Understanding Meteor 3's Current State
&lt;/h2&gt;

&lt;p&gt;As we approach the official launch of Meteor 3, it's important to recognize that we're currently in our Release Candidate (RC) phase. This is a critical moment where we're very close to the full release, and we've already undergone several reviews to refine and enhance the framework. &lt;/p&gt;

&lt;p&gt;This is the current status of versions for Meteor 3:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Latest version:&lt;/strong&gt; 3.0-rc.2&lt;br&gt;
&lt;strong&gt;Node.js version:&lt;/strong&gt; 20.12.2 LTS&lt;br&gt;
&lt;strong&gt;NPM version:&lt;/strong&gt; 10.5.0&lt;/p&gt;
&lt;h3&gt;
  
  
  Recent Updates and How to Use Meteor 3 Now
&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%2Fej8z052umpe22t6xkn7e.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%2Fej8z052umpe22t6xkn7e.gif" alt="Image description" width="760" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Meteor 3 has undergone significant updates in its RC versions, focusing on fixing key issues to ensure stability and performance. You can check all the work we have done up to now in our &lt;a href="https://github.com/meteor/meteor/milestone/101?closed=1" rel="noopener noreferrer"&gt;3.0 Milestone&lt;/a&gt; on GitHub or in the &lt;a href="https://forums.meteor.com/t/fibers-public-roadmap-and-meteor-3-0/59627" rel="noopener noreferrer"&gt;Roadmap&lt;/a&gt; post we have in our forums where we update the community periodically about our progress.&lt;/p&gt;

&lt;p&gt;If you're eager to start using Meteor 3 right away, you can install the current version using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx meteor@rc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For those looking to upgrade from Meteor 2 to Meteor 3, the process is straightforward. You can update your project by running the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;meteor update &lt;span class="nt"&gt;--release&lt;/span&gt; 3.0-rc.2
meteor reset  &lt;span class="c"&gt;# resets local DB and project to a fresh state&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But it'll be this simple only if you are already in the current 2.16 version and have prepared your app with the new async API.&lt;/p&gt;

&lt;p&gt;If you are not in version 2.16 yet, make sure to follow the &lt;a href="https://guide.meteor.com/2.14-migration" rel="noopener noreferrer"&gt;migration guides&lt;/a&gt; from your current version up to Meteor 2.16.&lt;/p&gt;

&lt;p&gt;If you're already in version 2.16 but still haven't prepared your app, you can follow our &lt;a href="https://v3-migration-docs.meteor.com/" rel="noopener noreferrer"&gt;3.0 Migration Guide&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Community Feedback and Next Steps
&lt;/h3&gt;

&lt;p&gt;Your feedback is invaluable as we finalize Meteor 3 for its official release. We plan to issue new release candidates every two weeks, incorporating community input to refine and improve the framework. This iterative process is essential for ensuring that Meteor 3 meets our community's needs and expectations.&lt;/p&gt;

&lt;p&gt;This means your feedback is extremely important. Create new apps, update existing ones, and provide us with your findings. This way it will be faster to find and solve edge-case issues and release the final version sooner.&lt;/p&gt;

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

&lt;p&gt;The transition to Meteor 3 with Node v20 and Express is a significant leap forward for the Meteor community. This upgrade ensures that Meteor remains a competitive and modern framework capable of handling the needs of today's web and mobile applications. By embracing these changes, developers can enjoy improved performance, enhanced scalability, and a more intuitive coding experience.&lt;/p&gt;

&lt;p&gt;For a deeper dive into implementing these features and more, visit the official &lt;a href="https://v3-docs.meteor.com/" rel="noopener noreferrer"&gt;Meteor documentation&lt;/a&gt; and our &lt;a href="https://v3-migration-docs.meteor.com/" rel="noopener noreferrer"&gt;Migration Guide&lt;/a&gt; and explore the rich ecosystem that Meteor continues to offer. As always, you can be part of our wonderful community in our &lt;a href="https://forums.meteor.com/" rel="noopener noreferrer"&gt;Forums&lt;/a&gt; and &lt;a href="//meteor-community.slack.com"&gt;Slack&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We also can't finish this without thanking everybody who helped the Meteor team throughout this process. Thanks to everybody in our forums and Slack for feedback and suggestions, but also thanks to everybody who directly contributed with &lt;a href="https://github.com/meteor/meteor/pull/12359" rel="noopener noreferrer"&gt;PRs and reviews&lt;/a&gt;. This couldn't be done without you ❤️&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/denihs" rel="noopener noreferrer"&gt;@denihs&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/Grubba27" rel="noopener noreferrer"&gt;@Grubba27&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/nachocodoner" rel="noopener noreferrer"&gt;@nachocodoner&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/fredmaiaarantes" rel="noopener noreferrer"&gt;@fredmaiaarantes&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/vit0rr" rel="noopener noreferrer"&gt;@vit0rr&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/filipenevola" rel="noopener noreferrer"&gt;@filipenevola&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/zodern" rel="noopener noreferrer"&gt;@zodern&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/radekmie" rel="noopener noreferrer"&gt;@radekmie&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/StorytellerCZ" rel="noopener noreferrer"&gt;@StorytellerCZ&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/gunnartorfis" rel="noopener noreferrer"&gt;@gunnartorfis&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/xet7" rel="noopener noreferrer"&gt;@xet7&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/harryadel" rel="noopener noreferrer"&gt;@harryadel&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/CLAassistant" rel="noopener noreferrer"&gt;@CLAassistant&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/simonwebs" rel="noopener noreferrer"&gt;@simonwebs&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/TylerThompson" rel="noopener noreferrer"&gt;@TylerThompson&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/rodrigok" rel="noopener noreferrer"&gt;@rodrigok&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/zarvox" rel="noopener noreferrer"&gt;@zarvox&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/srsgores" rel="noopener noreferrer"&gt;@srsgores&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/tassoevan" rel="noopener noreferrer"&gt;@tassoevan&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/Torgen" rel="noopener noreferrer"&gt;@Torgen&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/MarcosSpessatto" rel="noopener noreferrer"&gt;@MarcosSpessatto&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/vincentcarpentier" rel="noopener noreferrer"&gt;@vincentcarpentier&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/ggazzo" rel="noopener noreferrer"&gt;@ggazzo&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/StevenMia" rel="noopener noreferrer"&gt;@StevenMia&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/acemtp" rel="noopener noreferrer"&gt;@acemtp&lt;/a&gt;&lt;/p&gt;

</description>
      <category>meteor</category>
      <category>express</category>
      <category>javascript</category>
      <category>meteor3</category>
    </item>
  </channel>
</rss>
