<?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: Nomodo.io</title>
    <description>The latest articles on DEV Community by Nomodo.io (@nomodo-io).</description>
    <link>https://dev.to/nomodo-io</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%2F1851986%2Fca07872a-7560-4718-bb30-c7949be217de.png</url>
      <title>DEV Community: Nomodo.io</title>
      <link>https://dev.to/nomodo-io</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nomodo-io"/>
    <language>en</language>
    <item>
      <title>Happy 2025 from Nomodo! 🎉</title>
      <dc:creator>Nomodo.io</dc:creator>
      <pubDate>Tue, 31 Dec 2024 00:00:00 +0000</pubDate>
      <link>https://dev.to/nomodo-io/happy-2025-from-nomodo-4lg1</link>
      <guid>https://dev.to/nomodo-io/happy-2025-from-nomodo-4lg1</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpq0ds90cdhz3nrfh8je4.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%2Fpq0ds90cdhz3nrfh8je4.png" alt="PF 2025" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Here at Nomodo.io, we think the new Year is ideal for innovative ideas, bold projects, and simple DevOps. We are &lt;strong&gt;celebrating 2025 with Medusa 2.x&lt;/strong&gt; and &lt;strong&gt;brand-new pricing&lt;/strong&gt; based on used system resources. Our services are even more available and affordable.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://admin.nomodo.io/create/medusajs" rel="noopener noreferrer"&gt;Start Building Now 🚀&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy coding, and Happy New Year!&lt;/p&gt;

</description>
      <category>medusajs</category>
    </item>
    <item>
      <title>Nomodo Pricing Update: $4 Per Seat + Resource Usage</title>
      <dc:creator>Nomodo.io</dc:creator>
      <pubDate>Mon, 30 Dec 2024 08:30:07 +0000</pubDate>
      <link>https://dev.to/nomodo-io/nomodo-pricing-update-4-per-seat-resource-usage-2b51</link>
      <guid>https://dev.to/nomodo-io/nomodo-pricing-update-4-per-seat-resource-usage-2b51</guid>
      <description>&lt;p&gt;This change reflects the feedback we’ve received from you, our users—particularly those who want to quickly spin up solutions with Medusa JS while still having fine‑grained control over monthly expenses. Now entrance in Medusa JS Cloud is more accessible. Just start/stop instance and save money.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Does This Mean for You?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Previous Model&lt;/strong&gt; : A fixed price starting at $15/month for your Medusa application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New Model&lt;/strong&gt; : A monthly fee starting at &lt;strong&gt;$4 per seat&lt;/strong&gt; per month plus used resource charges (CPU, RAM, HDD).&lt;/p&gt;

&lt;p&gt;This approach helps you save money during development and test phases when resource requirements are low, while still giving you the freedom to scale up for production.&lt;/p&gt;

&lt;h2&gt;
  
  
  The New Pricing Details
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Seat pricing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hobby&lt;/strong&gt; : $4/month per seat&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer&lt;/strong&gt; : $9/month per seat&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team&lt;/strong&gt; : $15/month per seat&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Resource usage rates:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CPU&lt;/strong&gt; : $0.015 per core per hour&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RAM&lt;/strong&gt; : $0.0065 per GB per hour&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HDD&lt;/strong&gt; : $0.00035 per GB per hour&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example 1: Development
&lt;/h3&gt;

&lt;p&gt;Developers who are actively working on projects 8 hours per day (160 hours per month) pay only &lt;strong&gt;$11.33 per month&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 2: Production
&lt;/h3&gt;

&lt;p&gt;Here’s a rough example of running a Medusa instance with 1 CPU, 2 GB of RAM, and 8 GB of HDD 24/7 for one month:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Resource costs&lt;/strong&gt; (1 CPUs, 2 GB RAM, 8 GB HDD around the clock): approximately $22.92&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seat price&lt;/strong&gt; (Hobby Plan): $4&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total maximum estimated cost&lt;/strong&gt; : &lt;strong&gt;$26.92&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why the Change?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pay Only for What You Need&lt;/strong&gt; : You no longer have to pay for unused resources. If you’re in early development, you’ll only be charged for minimal usage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparent and Predictable&lt;/strong&gt; : Costs scale with your actual usage. The cost will not break you; autoscaling is disabled by default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community‑Driven&lt;/strong&gt; : We’ve heard your requests—especially from teams and individuals needing to adopt Medusa JS quickly—and have responded with a plan that can adapt as you grow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://nomodo.io/medusajs?ref=blog.nomodo.io#hosting-plans" rel="noopener noreferrer"&gt;Learn more about the new pricing&lt;/a&gt; or &lt;a href="https://admin.nomodo.io/create/medusajs?ref=blog.nomodo.io" rel="noopener noreferrer"&gt;start your free trial today&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try Medusa JS with a new pricing, save costs!
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://admin.nomodo.io/login?ref=blog.nomodo.io" rel="noopener noreferrer"&gt;Start Medusa.js free trial&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Billing Cycle&lt;/strong&gt; : We will invoice monthly based on your actual usage over the prior month. Seats are prorated if you add or remove seats mid‑cycle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seat&lt;/strong&gt; : A seat is any person/account with access to the Nomodo platform. If you collaborate with more developers or contributors, you may need more seats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring &amp;amp; Alerts&lt;/strong&gt; : You’ll be able to set usage alerts and budget caps in your dashboard. No surprise bills!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ongoing Audits&lt;/strong&gt; : Our security team regularly reviews and updates our infrastructure to protect your workloads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Migration:&lt;/strong&gt; If you’re on an older plan, you can stick with it until it expires or switch to this new, usage‑based model whenever you’re ready. Please note that any new features may only be available on the new plans.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto‑scaling&lt;/strong&gt; is optional. Ask us, and we will enable this feature.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrap &lt;strong&gt;‑&lt;/strong&gt; up
&lt;/h2&gt;

&lt;p&gt;Nomodo’s new pricing structure—combining a low monthly seat fee with resource‑based billing—offers unprecedented flexibility, making it easier than ever to build and scale Medusa‑based solutions. Whether you’re a solo developer experimenting for a few hours each week or a large team deploying 24/7, you pay only for the actual resources you use. This transparent, community‑driven approach ensures that you remain in full control of costs while still benefiting from robust security and top‑tier support. We invite you to explore the new pricing model, optimise your workloads, and let Nomodo &lt;a href="https://admin.nomodo.io/create/medusajs?ref=blog.nomodo.io" rel="noopener noreferrer"&gt;empower your Medusa development&lt;/a&gt; journey.&lt;/p&gt;

</description>
      <category>medusajs</category>
    </item>
    <item>
      <title>Extend the Holiday Spirit with Medusa JS 2.0 on Nomodo!</title>
      <dc:creator>Nomodo.io</dc:creator>
      <pubDate>Fri, 27 Dec 2024 09:15:14 +0000</pubDate>
      <link>https://dev.to/nomodo-io/extend-the-holiday-spirit-with-medusa-js-20-on-nomodo-5074</link>
      <guid>https://dev.to/nomodo-io/extend-the-holiday-spirit-with-medusa-js-20-on-nomodo-5074</guid>
      <description>&lt;h2&gt;
  
  
  What’s New in Medusa JS 2.0?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Scalability:&lt;/strong&gt; Effortlessly manage increasing store traffic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streamlined GitHub Integration:&lt;/strong&gt; Sync and deploy your code seamlessly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Monitoring Tools:&lt;/strong&gt; Gain real-time insights into your app's performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customisable Dashboards:&lt;/strong&gt; Personalise your MedusaJS interface to suit your needs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ready-to-Code Setup:&lt;/strong&gt; Begin building your dream store within minutes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a comprehensive list of updates, visit the &lt;a href="https://github.com/medusajs/medusa/releases/tag/v2.0.0?ref=blog.nomodo.io" rel="noopener noreferrer"&gt;MedusaJS GitHub Releases page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Treat Yourself to Hassle-Free Deployment
&lt;/h2&gt;

&lt;p&gt;🎁&lt;/p&gt;

&lt;p&gt;Use code NHMSCVBU for a $5 discount.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://admin.nomodo.io/login?ref=blog.nomodo.io" rel="noopener noreferrer"&gt;Get Started with MedusaJS 2.0 Today&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  New Hosting Plans on Nomodo.io
&lt;/h2&gt;

&lt;p&gt;We’ve listened to your feedback and are excited to announce our switch to a &lt;strong&gt;Pay-as-You-Go&lt;/strong&gt; pricing model! Previously, Nomodo charged a flat fee of $15 per application or $4 per seat plus resource usage. Now, you’ll only pay for the resources you actually use.&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://nomodo.io/medusajs?ref=blog.nomodo.io" rel="noopener noreferrer"&gt;Learn more&lt;/a&gt; about this exciting update and how it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can We Help More?
&lt;/h2&gt;

&lt;p&gt;MedusaJS is currently at version 2.1.3. How challenging is it for you to upgrade from 2.0.0 to 2.1.3? Share your experience with us on &lt;a href="https://discord.gg/ZWnzMDDsAB?ref=blog.nomodo.io" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;. Let’s work together to make your upgrade process smoother.&lt;/p&gt;

&lt;p&gt;Happy holidays and happy coding from all of us at Nomodo.io! 🎄✨&lt;/p&gt;

</description>
      <category>medusajs</category>
    </item>
    <item>
      <title>Changelog 2024/48 aka We 🖤 Svelte 5</title>
      <dc:creator>Nomodo.io</dc:creator>
      <pubDate>Mon, 25 Nov 2024 23:00:00 +0000</pubDate>
      <link>https://dev.to/nomodo-io/changelog-202448-aka-we-svelte-5-2pmn</link>
      <guid>https://dev.to/nomodo-io/changelog-202448-aka-we-svelte-5-2pmn</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;We have rewritten our platform's frontend using Svelte 5, streamlining our workflow and refining our codebase to develop a more flexible and sustainable codebase. The following elements were notable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What We Appreciate in Svelte 5
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Reusable Snippets Replacing Slots&lt;/li&gt;
&lt;li&gt;Callbacks Replacing Dispatchers&lt;/li&gt;
&lt;li&gt;Simplified Prop Handling with $props&lt;/li&gt;
&lt;li&gt;Improved Component Typing&lt;/li&gt;
&lt;li&gt;Explicit Reactivity with Runes&lt;/li&gt;
&lt;li&gt;Reduced Bundle Sizes&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  1. Reusable Snippets Replacing Slots
&lt;/h3&gt;

&lt;p&gt;Svelte 5's new snippets system provides a powerful alternative to the slot-based system from Svelte 4. Where we previously used named slots with &lt;code&gt;&amp;lt;svelte:fragment slot="name"&amp;gt;&lt;/code&gt;, we now leverage the more flexible snippet syntax &lt;code&gt;{#snippet name()}&lt;/code&gt;. This allows passing parameters to template fragments and maintaining reactivity, making complex UI patterns like recursive components and compound components more straightforward. Our modal and dropdown components benefit from this change, as content can be dynamically injected while preserving state and context.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- Parent.svelte --&amp;gt;
&amp;lt;Card&amp;gt;
  &amp;lt;svelte:fragment slot="title"&amp;gt;
    My Card Title
  &amp;lt;/svelte:fragment&amp;gt;
  &amp;lt;svelte:fragment slot="content"&amp;gt;
    Card content here
  &amp;lt;/svelte:fragment&amp;gt;
&amp;lt;/Card&amp;gt;

&amp;lt;!-- Card.svelte --&amp;gt;
&amp;lt;div class="card"&amp;gt;
  &amp;lt;div class="title"&amp;gt;
    &amp;lt;slot name="title" /&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div class="content"&amp;gt;
    &amp;lt;slot name="content" /&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Svelte 4&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- Parent.svelte --&amp;gt;
&amp;lt;Card&amp;gt;
  {#snippet title()}
    My Card Title
  {/snippet}

  {#snippet content()}
    Card content here
  {/snippet}
&amp;lt;/Card&amp;gt;

&amp;lt;!-- Card.svelte --&amp;gt;
&amp;lt;script&amp;gt;
  let { title, content } = $props();
&amp;lt;/script&amp;gt;

&amp;lt;div class="card"&amp;gt;
  &amp;lt;div class="title"&amp;gt;
    {@render title()}
  &amp;lt;/div&amp;gt;
  &amp;lt;div class="content"&amp;gt;
    {@render content()}
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Svelte 5&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Callbacks Replacing Dispatchers
&lt;/h3&gt;

&lt;p&gt;Component communication is more straightforward with Svelte 5's approach to props and callbacks compared to event dispatchers. Where Svelte 4 required using &lt;code&gt;createEventDispatcher&lt;/code&gt; pattern with &lt;code&gt;dispatch('submit', { data })&lt;/code&gt;  and handling it with &lt;code&gt;on:submit&lt;/code&gt; event listeners, Svelte 5 enables passing callback functions directly through props &lt;code&gt;&amp;lt;Child onSubmit={handleSubmission} /&amp;gt;&lt;/code&gt;. This reduces boilerplate, provides better TypeScript integration, and makes data flow more explicit throughout the application.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- Child.svelte --&amp;gt;
&amp;lt;script&amp;gt;
  import { createEventDispatcher } from 'svelte';
  const dispatch = createEventDispatcher();

  function handleSubmit(data) {
    dispatch('submit', { data });
  }
&amp;lt;/script&amp;gt;

&amp;lt;!-- Parent.svelte --&amp;gt;
&amp;lt;Child on:submit={({ detail }) =&amp;gt; handleSubmission(detail.data)} /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Svelte 4&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- Child.svelte --&amp;gt;
&amp;lt;script&amp;gt;
  let { onSubmit } = $props();

  function handleSubmit(data) {
    onSubmit?.(data);
  }
&amp;lt;/script&amp;gt;

&amp;lt;!-- Parent.svelte --&amp;gt;
&amp;lt;Child onSubmit={handleSubmission} /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Svelte 5&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Simplified Prop Handling with $props
&lt;/h3&gt;

&lt;p&gt;Svelte 5's &lt;code&gt;$props&lt;/code&gt; rune brings a cleaner approach to component properties. The verbose &lt;code&gt;export let&lt;/code&gt; syntax from Svelte 4 is replaced with a single destructuring statement &lt;code&gt;let { prop1 = defaultValue, prop2 } = $props()&lt;/code&gt;. This approach significantly reduces code verbosity, improves TypeScript integration, significantly reduces prop-related boilerplate in components, and strengthens type checking.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Improved Component Typing
&lt;/h3&gt;

&lt;p&gt;The typing improvements in Svelte 5 have been another standout feature for us. Built-in typed properties like &lt;code&gt;placeholder&lt;/code&gt; and &lt;code&gt;maxlength&lt;/code&gt; now function seamlessly, while custom traits can be defined with precision to ensure type safety. These enhancements have not only reduced the risk of runtime errors but have also made our code more robust and maintainable. Additionally, the deeper integration with TypeScript has significantly improved productivity and reliability.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Explicit Reactivity with Runes
&lt;/h3&gt;

&lt;p&gt;Svelte 5's runes system represents a fundamental shift in reactivity management. Instead of Svelte 4's implicit reactivity with &lt;code&gt;let&lt;/code&gt; declarations and &lt;code&gt;$:&lt;/code&gt; statements, Svelte 5 uses explicit runes like &lt;code&gt;$state()&lt;/code&gt; and &lt;code&gt;$derived()&lt;/code&gt;. A typical example shows this evolution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Svelte 4
let count = 0;
$: tripled = count * 3;

// Svelte 5
let count = $state(0);
let tripled = $derived(count * 3);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6. Reduced Bundle Sizes
&lt;/h3&gt;

&lt;p&gt;The new compiler in Svelte 5 has brought significant optimisations, leading to bundle size reductions of up to 50% compared to Svelte 4. This efficiency boost not only improves performance but also aligns with our commitment to delivering a lightweight and fast platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Worthwhile?
&lt;/h2&gt;

&lt;p&gt;While adopting Svelte 5 and its new features—like snippets, callbacks, and runes—required some adjustments to our workflow, the results have been well worth the effort. The new features we’ve integrated have allowed us to create a cleaner, more scalable codebase. These changes are already helping us work more efficiently and will undoubtedly lead to fewer bugs and a smoother development experience in the long term.&lt;/p&gt;




&lt;p&gt;To stay updated on what’s new at Nomodo, follow us on &lt;a href="https://x.com/nomodo_io?ref=blog.nomodo.io" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; or join our &lt;a href="https://discord.gg/FeTV3kPSD3?ref=blog.nomodo.io" rel="noopener noreferrer"&gt;Nomodo.io Discord channel&lt;/a&gt;. Also, don’t miss exploring &lt;a href="https://admin.nomodo.io/create/medusajs?ref=blog.nomodo.io" rel="noopener noreferrer"&gt;MedusaJS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;From all of us at Nomodo.io, thank you for being part of our journey!&lt;/p&gt;

</description>
      <category>svelte</category>
      <category>releases</category>
    </item>
    <item>
      <title>Announcing Deployment and Build Logs</title>
      <dc:creator>Nomodo.io</dc:creator>
      <pubDate>Mon, 18 Nov 2024 14:45:45 +0000</pubDate>
      <link>https://dev.to/nomodo-io/announcing-deployment-and-build-logs-5a9c</link>
      <guid>https://dev.to/nomodo-io/announcing-deployment-and-build-logs-5a9c</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd6pg7hl7ijcg7g8khy61.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%2Fd6pg7hl7ijcg7g8khy61.png" width="800" height="934"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why you’ll love it:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clear Deployment Progress:&lt;/strong&gt; See each step of your deployment as it happens, from setup to app launch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detailed Build Insights:&lt;/strong&gt; Easily identify and resolve issues with full build logs, showing every dependency installation and environment configuration.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ol&gt;
&lt;li&gt;Head to the &lt;strong&gt;Deploys&lt;/strong&gt; tab in your app.&lt;/li&gt;
&lt;li&gt;Select the deployment you want and open the details page.&lt;/li&gt;
&lt;li&gt;Scroll down to view &lt;strong&gt;Deployment Logs&lt;/strong&gt; and &lt;strong&gt;Build Logs&lt;/strong&gt; in real time.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Whether you’re tracking progress or solving a problem, all the data you need is now at your fingertips.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ready to Give It a Go?
&lt;/h3&gt;

&lt;p&gt;Log in to &lt;a href="https://admin.nomodo.io/?ref=blog.nomodo.io" rel="noopener noreferrer"&gt;&lt;strong&gt;admin.nomodo.io&lt;/strong&gt;&lt;/a&gt; and try it out today. Got feedback? We’d love to hear from you—drop us a line or join the chat on our &lt;a href="https://discord.gg/eycYCn5tkZ?ref=blog.nomodo.io" rel="noopener noreferrer"&gt;community page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Deploy smarter, not harder! 🚀&lt;/p&gt;

</description>
      <category>medusajs</category>
    </item>
    <item>
      <title>Getting Started with Your Medusa.js on Nomodo</title>
      <dc:creator>Nomodo.io</dc:creator>
      <pubDate>Mon, 28 Oct 2024 14:00:22 +0000</pubDate>
      <link>https://dev.to/nomodo-io/getting-started-with-your-medusajs-on-nomodo-5h5</link>
      <guid>https://dev.to/nomodo-io/getting-started-with-your-medusajs-on-nomodo-5h5</guid>
      <description>&lt;p&gt;By using Medusa.js on Nomodo, you get a powerful backend platform enriched with several Nomodo-specific features, such as automatic backups, easy deployment options, monitoring tools, and IP whitelisting to ensure your store runs smoothly and securely. For full functionality, you will need a file storage plugin to display product thumbnails effectively. We recommend using the S3 bucket plugin, either through our Nomodo solution or your personal AWS account, for optimal performance and accessibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Dive into Your Medusa.js Admin Dashboard
&lt;/h2&gt;

&lt;p&gt;The Admin Dashboard is where you’ll manage every aspect of your application—products, orders, inventory, and more. Once you log in, you can start setting up products, adjusting inventory levels, and configuring various order settings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get Started Tips:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Familiarise yourself with the layout.&lt;/li&gt;
&lt;li&gt;Set up a few test products.&lt;/li&gt;
&lt;li&gt;Play around with managing orders to get comfortable with the system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can find more information on using the Medusa admin dashboard in the &lt;a href="https://medusajs.com/admin/" rel="noopener noreferrer"&gt;official intro&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%2Fy6nwm0do9f2hpyf09yom.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%2Fy6nwm0do9f2hpyf09yom.png" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Customise Medusa.js Locally
&lt;/h2&gt;

&lt;p&gt;To take full control, it’s time to dive into some customisation. Here’s how to get started locally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clone the repository to your local environment.&lt;/li&gt;
&lt;li&gt;Make the changes you want—adjust the design, add functionalities, or remove anything you don’t need.&lt;/li&gt;
&lt;li&gt;Push your changes back to your repository.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Deploy Your Updates
&lt;/h2&gt;

&lt;p&gt;Ready to make your improvements live? Deploying changes ensures that everything you work on locally is reflected in your live version.&lt;/p&gt;

&lt;p&gt;To deploy:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the &lt;strong&gt;Deploys&lt;/strong&gt; tab in Dashboard.&lt;/li&gt;
&lt;li&gt;Click on  &lt;strong&gt;New Deployment&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Sit back and relax while your changes go live!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fal7d92vmwngrr8cq2ooh.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%2Fal7d92vmwngrr8cq2ooh.png" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Add Cloud Storage with S3 Bucket
&lt;/h2&gt;

&lt;p&gt;Managing images, especially when dealing with product photos or other media, requires reliable cloud storage. You can also explore more options for file storage in the &lt;a href="https://docs.medusajs.com/add-plugins/s3" rel="noopener noreferrer"&gt;official list of file plugins&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Additionally, check out our article on &lt;a href="https://blog.nomodo.io/how-to-configure-minio-plugin-for-file-storage-in-medusajs-locally/" rel="noopener noreferrer"&gt;How to Configure MinIO Plugin for File Storage in MedusaJS Locally&lt;/a&gt;, which is a great option if you do not have or do not want to use an AWS account. MinIO allows you to store files in a bucket similar to Amazon S3 but in your own local environment.&lt;/p&gt;

&lt;p&gt;We also have a guide for &lt;a href="https://blog.nomodo.io/aws-s3-setup-medusajs-backend-nomodo/" rel="noopener noreferrer"&gt;Setting up and connecting AWS S3 to the MedusaJS backend&lt;/a&gt;, covering implementation of the required plugins.&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%2Fe9aass4w3y5ybbo1bf0o.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%2Fe9aass4w3y5ybbo1bf0o.png" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Launch Your Storefront
&lt;/h2&gt;

&lt;p&gt;Want to showcase your products? We offer the standard storefront using &lt;a href="https://github.com/medusajs/nextjs-starter-medusa" rel="noopener noreferrer"&gt;The official Next.js DTC Starter by Medusa&lt;/a&gt;, which we can install for you on demand if you do not already have your own frontend solution. The storefront must remain standalone, allowing multiple frontends to connect to the same Medusa backend. These frontends can be written with different frameworks, run on different URLs, and serve different needs. Learn more about available starters in the &lt;a href="https://medusajs.com/starters/" rel="noopener noreferrer"&gt;Medusa documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Have your own storefront on the Vercel? Read this article on &lt;a href="https://blog.nomodo.io/how-to-set-up-medusajs-backend-with-a-storefront-on-vercel/" rel="noopener noreferrer"&gt;How to Set Up MedusaJS Backend with a Storefront on Vercel&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%2F3qlgm7vuaobq1mywkfg3.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%2F3qlgm7vuaobq1mywkfg3.png" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Automatic Backups for Data Safety
&lt;/h2&gt;

&lt;p&gt;Your data is automatically backed up every hour, without any action needed from you. These backups are particularly useful when making changes to the database structure or during data manipulation, ensuring you can always recover your information if needed.&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%2Fjpus2yyxalc1jcw6b7cg.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%2Fjpus2yyxalc1jcw6b7cg.png" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Manage Database Access with IP Whitelisting
&lt;/h2&gt;

&lt;p&gt;IP whitelisting is a default security feature on Nomodo.io, ensuring only authorized IP addresses can access your data. This adds an essential layer of protection, especially for environments handling sensitive information. For more details, check out our article on &lt;a href="https://blog.nomodo.io/ip-whitelisting-default-security-on-nomodo-io/" rel="noopener noreferrer"&gt;IP Whitelisting: Default Security on Nomodo.io&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%2F1l0w23l9t2rg3qnkpqnm.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%2F1l0w23l9t2rg3qnkpqnm.png" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Monitor System Performance
&lt;/h2&gt;

&lt;p&gt;Good performance is key to keeping customers happy. You can monitor your system’s CPU, memory, and disk usage directly from the admin interface to keep an eye out for potential issues before they arise.&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%2F55ketew6kpr5j287q3he.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%2F55ketew6kpr5j287q3he.png" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Debugging with Logs
&lt;/h2&gt;

&lt;p&gt;Logs are an essential tool for tracking down issues and ensuring everything is running as it should. Whether you're a developer or just looking to understand your store better, application and system logs provide insights to fine-tune your setup.&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%2F3e3i6snjq10c50us2ts3.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%2F3e3i6snjq10c50us2ts3.png" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  We’re Here to Help
&lt;/h2&gt;

&lt;p&gt;We know getting started can be a bit overwhelming, but don't worry—we're here for you. If you have any questions, need help, or just want to share your experience, feel free to reach out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Join us on &lt;a href="https://discord.gg/7VVXcqsR8U" rel="noopener noreferrer"&gt;&lt;strong&gt;Discord&lt;/strong&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Shoot us an email at  &lt;strong&gt;&lt;a href="mailto:help@nomodo.io"&gt;help@nomodo.io&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Cheers,&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The Nomodo Team&lt;/p&gt;

</description>
      <category>medusajs</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>IP Whitelisting: Default Security on Nomodo.io</title>
      <dc:creator>Nomodo.io</dc:creator>
      <pubDate>Thu, 24 Oct 2024 06:00:00 +0000</pubDate>
      <link>https://dev.to/nomodo-io/ip-whitelisting-default-security-on-nomodoio-23bp</link>
      <guid>https://dev.to/nomodo-io/ip-whitelisting-default-security-on-nomodoio-23bp</guid>
      <description>&lt;h2&gt;
  
  
  When Will You Need to Whitelist an IP?
&lt;/h2&gt;

&lt;p&gt;If you're running a local instance (like from &lt;code&gt;localhost&lt;/code&gt;) or need to connect external apps or services, you’ll need to manually add their IP addresses to the whitelist.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Whitelist an IP on Nomodo.io
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Database&lt;/strong&gt;  &amp;gt;  &lt;strong&gt;Access Management&lt;/strong&gt; in your app detail.&lt;/li&gt;
&lt;li&gt;Choose “TCP” in the Protocol select.&lt;/li&gt;
&lt;li&gt;Put the IP string into “CIDR address”. A tool like &lt;a href="https://ipinfo.io/" rel="noopener noreferrer"&gt;ipinfo.io&lt;/a&gt; helps find your IP or the public IP of the app/service.&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;/0&lt;/code&gt; to allow access from a wide range of IPs, or use &lt;code&gt;/32&lt;/code&gt; to restrict access to a single IP address.&lt;/li&gt;
&lt;li&gt;In the “Port” input, paste the value from “DB Port” in the tab  &lt;strong&gt;Database&lt;/strong&gt;  &amp;gt;  &lt;strong&gt;Database Info&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fboah75o2a8djxpwi5uf3.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%2Fboah75o2a8djxpwi5uf3.png" width="800" height="554"&gt;&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%2Flw2t0v5cs1xhlemslh5w.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%2Flw2t0v5cs1xhlemslh5w.png" width="800" height="554"&gt;&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%2Fb1bsuylqkm871lmc26bh.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%2Fb1bsuylqkm871lmc26bh.png" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Does This Matter?
&lt;/h3&gt;

&lt;p&gt;Whitelisting ensures that only trusted sources can connect to your database—keeping unwanted access at bay. So, every time you work in a new environment or add new services, don’t forget to update your whitelist.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: IP addresses may change over time, so ensure your current address is always updated. If you cannot connect, check if your IP is still listed.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>medusajs</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Heroku vs. Nomodo: A Comprehensive Comparison</title>
      <dc:creator>Nomodo.io</dc:creator>
      <pubDate>Tue, 22 Oct 2024 10:00:00 +0000</pubDate>
      <link>https://dev.to/nomodo-io/heroku-vs-nomodo-a-comprehensive-comparison-6jf</link>
      <guid>https://dev.to/nomodo-io/heroku-vs-nomodo-a-comprehensive-comparison-6jf</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;Heroku is a popular cloud Platform as a Service (PaaS) known for simplifying app deployment with its container-based "Dynos." It supports multiple programming languages like Node.js and Ruby. While effective, it requires technical expertise, which Nomodo simplifies with its developer-first approach.&lt;/p&gt;

&lt;h3&gt;
  
  
  Heroku
&lt;/h3&gt;

&lt;p&gt;Heroku simplifies infrastructure management, offering deployment services, automatic scaling, and database options like Heroku Postgres and Redis. However, developers must manually configure and maintain Dynos, as well as integrate additional services to meet project requirements. While suitable for many teams, this approach demands technical expertise and ongoing oversight.&lt;/p&gt;

&lt;h3&gt;
  
  
  Nomodo
&lt;/h3&gt;

&lt;p&gt;Nomodo focuses on a developer-first approach, providing pre-configured open-source applications as a service. With Nomodo, developers can deploy apps without delving into the intricacies of infrastructure, containerisation, or scaling. The platform manages setup, scaling, and maintenance, allowing teams to focus solely on their projects. Whether it’s Medusa, Grav, PostgreSQL, or other applications, Nomodo handles the heavy lifting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison of Features
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Heroku&lt;/th&gt;
&lt;th&gt;Nomodo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Type of Service&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PaaS&lt;/td&gt;
&lt;td&gt;Open-source apps as a service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Supported Tech&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Node.js, PHP, Ruby, Python&lt;/td&gt;
&lt;td&gt;Varies by app&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Container System&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dynos&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Database Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Heroku Postgres, Redis, etc.&lt;/td&gt;
&lt;td&gt;PostgreSQL, Redis, Kafka, MySQL, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scaling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automatic, with manual setup&lt;/td&gt;
&lt;td&gt;Fully automatic, no configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Add-ons&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Extensive but manual setup&lt;/td&gt;
&lt;td&gt;Pre-installed, tailored plugins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Audience&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Developers, Enterprises&lt;/td&gt;
&lt;td&gt;Developers, open-source teams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DevOps Complexity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Requires knowledge&lt;/td&gt;
&lt;td&gt;Minimal to none&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Addressing Developer Challenges
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Common Issues with Heroku:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Complex Installation &amp;amp; Setup&lt;/strong&gt;: Time-intensive and requires expertise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server maintenance burden&lt;/strong&gt;: consumes resources and developer focus.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DevOps Overhead&lt;/strong&gt;: Scaling and monitoring add complexity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vendor Lock-In&lt;/strong&gt;: Limited options for scalability beyond Heroku's ecosystem.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  How Nomodo Solves These:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;One-Click Deployments&lt;/strong&gt;: Deploy in seconds without technical know-how.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Managed Infrastructure&lt;/strong&gt;: No server management is needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated DevOps&lt;/strong&gt;: Fully automated scaling, updates, and backups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Cloud Flexibility&lt;/strong&gt;: Avoid vendor lock-in by choosing your cloud provider.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;While Heroku remains a robust choice for many developers, Nomodo redefines app deployment for those seeking simplicity, flexibility, and time savings. Whether you're a seasoned developer or new to app hosting, Nomodo empowers you to focus on building exceptional products rather than managing infrastructure.&lt;/p&gt;

&lt;p&gt;Start exploring how Nomodo can elevate your development experience today!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Configure MinIO Plugin for File Storage in MedusaJS Locally</title>
      <dc:creator>Nomodo.io</dc:creator>
      <pubDate>Fri, 18 Oct 2024 06:30:13 +0000</pubDate>
      <link>https://dev.to/nomodo-io/how-to-configure-minio-plugin-for-file-storage-in-medusajs-locally-328h</link>
      <guid>https://dev.to/nomodo-io/how-to-configure-minio-plugin-for-file-storage-in-medusajs-locally-328h</guid>
      <description>&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Knowledge of environment variables&lt;/li&gt;
&lt;li&gt;Installed MedusaJS project&lt;/li&gt;
&lt;li&gt;Access to Nomodo.io for receiving MinIO credentials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set up environment variables.&lt;/li&gt;
&lt;li&gt;Install the MinIO plugin via npm.&lt;/li&gt;
&lt;li&gt;Add the plugin to your Medusa config file.&lt;/li&gt;
&lt;li&gt;Test the configuration locally.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 1: Set Up Environment Variables
&lt;/h2&gt;

&lt;p&gt;To connect your local Medusa project to MinIO for file storage, you'll need certain environment variables. These are provided by Nomodo.io when you set up your instance. Here's an example of what the environment variables might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MINIO_ENDPOINT="https://s3.nomodo.io/your-instance-id"
MINIO_BUCKET="your-instance-id"
MINIO_ACCESS_KEY="your-access-key"
MINIO_SECRET_KEY="your-secret-key"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Note: You will receive the actual values for these variables from Nomodo. Do not use the placeholders above.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Add these values to your local &lt;code&gt;.env&lt;/code&gt; file. This will allow Medusa to use them during local development.&lt;/p&gt;

&lt;p&gt;Example &lt;code&gt;.env&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MINIO_ENDPOINT="https://s3.nomodo.io/medcs0elg85iop2o82rj3n0"
MINIO_BUCKET="medcs0elg85iop2o82rj3n0"
MINIO_ACCESS_KEY="Your_Access_Key_Here"
MINIO_SECRET_KEY="Your_Secret_Key_Here"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Install the MinIO Plugin
&lt;/h2&gt;

&lt;p&gt;Next, you'll need to install the &lt;code&gt;medusa-file-minio&lt;/code&gt; plugin, which adds support for MinIO as a file storage solution for your Medusa backend.&lt;/p&gt;

&lt;p&gt;Use npm to install the plugin by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install medusa-file-minio
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;This plugin enables your Medusa backend to seamlessly upload and store files on your MinIO instance. For further information and advanced configuration options, check out the&lt;/em&gt; &lt;a href="https://medusajs.com/plugins/medusa-file-minio/" rel="noopener noreferrer"&gt;&lt;em&gt;official &lt;code&gt;medusa-file-minio&lt;/code&gt; plugin documentation&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Add MinIO Plugin to Your Medusa Configuration
&lt;/h2&gt;

&lt;p&gt;Once the plugin is installed, you’ll need to configure it by adding it to your Medusa config file. Open your Medusa configuration file (&lt;code&gt;medusa-config.js&lt;/code&gt; or &lt;code&gt;medusa-config.ts&lt;/code&gt;), and include the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  resolve: 'medusa-file-minio',
  options: {
    endpoint: process.env.MINIO_ENDPOINT,
    bucket: process.env.MINIO_BUCKET,
    access_key_id: process.env.MINIO_ACCESS_KEY,
    secret_access_key: process.env.MINIO_SECRET_KEY,
  },
},
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This configuration allows Medusa to use the MinIO plugin for file storage, leveraging the environment variables you defined earlier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Test the Local Setup
&lt;/h2&gt;

&lt;p&gt;After configuring the plugin, it’s time to test if everything is working correctly. Start your local Medusa server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, try uploading a file through the Medusa admin panel or your store’s frontend. If everything is configured properly, the file should be successfully uploaded to your MinIO bucket.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Troubleshooting&lt;/strong&gt; : If the file upload fails, ensure that the environment variables are correctly set and check the logs for errors. Also, verify that your access keys and secrets are valid.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploy—put it live
&lt;/h2&gt;

&lt;p&gt;Once your changes are ready, commit and push them to the remote repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add .
git commit -m "Your message"
git push origin master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy these ENV variables into &lt;strong&gt;Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;Environment Variables&lt;/strong&gt; app detail. After you’ve filled in all the variables, press the “Reload” button, which will run a new deployment in the background. Until the deployment is complete, the Medusa.js backend will not be available, but don’t worry, it will only take a few seconds.&lt;/p&gt;

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

&lt;p&gt;Setting up file storage for your MedusaJS store using the MinIO plugin locally is a straightforward process. With the environment variables provided by Nomodo.io and a quick plugin installation, you’ll be ready to handle file uploads seamlessly.&lt;/p&gt;

&lt;p&gt;This setup allows you to offload file management to MinIO’s robust storage infrastructure while keeping your Medusa backend clean and efficient. Try it out, and if you need more help, don’t hesitate to reach out to the Nomodo support team!&lt;/p&gt;

&lt;h2&gt;
  
  
  Try Medusa.js
&lt;/h2&gt;

&lt;p&gt;Use code B0OZUUYW for a discount. We 💙 our readers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://admin.nomodo.io/login" rel="noopener noreferrer"&gt;Start Medusa.js free trial&lt;/a&gt;&lt;/p&gt;

</description>
      <category>medusajs</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Develop MedusaJS Locally and Deploy Live</title>
      <dc:creator>Nomodo.io</dc:creator>
      <pubDate>Fri, 18 Oct 2024 05:30:47 +0000</pubDate>
      <link>https://dev.to/nomodo-io/how-to-develop-medusajs-locally-and-deploy-live-457j</link>
      <guid>https://dev.to/nomodo-io/how-to-develop-medusajs-locally-and-deploy-live-457j</guid>
      <description>&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Knowledge of Git and environment variables&lt;/li&gt;
&lt;li&gt;Access to a Nomodo.io account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone the MedusaJS repository&lt;/li&gt;
&lt;li&gt;Install dependencies and build packages&lt;/li&gt;
&lt;li&gt;Optionally link with the live instance on Nomodo&lt;/li&gt;
&lt;li&gt;Commit, push changes, and deploy your app live&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 1: Clone the MedusaJS Repository
&lt;/h2&gt;

&lt;p&gt;Go to &lt;strong&gt;Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;Git Integration&lt;/strong&gt; in your Nomodo dashboard. If you see &lt;code&gt;nomodoapp/&lt;/code&gt; at the start of the repository name, you previously chose deployment without GitHub integration—ask support for access.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Clone repository
git clone https://github.com/cebreus/MyAwesome_medcs6bn6g5iopbvf9mdo80.git

# Go to project repository
cd MyAwesomeMedusa_medcs6bn6g5iopbvf9mdo80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Example Tip: Ensure you have the correct permissions to access the repository.&lt;/em&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%2Fhtyz035ryzk03qwnyp1m.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%2Fhtyz035ryzk03qwnyp1m.png" width="800" height="554"&gt;&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%2Fhvanb8rihcx5jgu4s4k8.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%2Fhvanb8rihcx5jgu4s4k8.png" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Install Dependencies and Build Packages
&lt;/h2&gt;

&lt;p&gt;Install the required dependencies to run MedusaJS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Install dependencies, e.g. with the pnpm&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tip: For more information on configuring local development, check out the&lt;/em&gt; &lt;a href="https://docs.medusajs.com/development/fundamentals/local-development" rel="noopener noreferrer"&gt;&lt;em&gt;official documentation&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Optionally Link with a Live Instance on Nomodo
&lt;/h2&gt;

&lt;p&gt;To connect your local project to a live instance, go to &lt;strong&gt;Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;Environment Variables&lt;/strong&gt; in Nomodo and copy the variables into your local &lt;code&gt;.env&lt;/code&gt; file. The Source of truth of the &lt;strong&gt;DB connection string&lt;/strong&gt; is in the tab &lt;strong&gt;Database&lt;/strong&gt; &amp;gt; &lt;strong&gt;Database Info&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DATABASE_URL="postgres://postgres:s3f6syra58jphm492a07ii@3.121.231.62:5432/medcs6bn6g5iopbvf9mdo80"
REDIS_URL="redis://:m5pnv313yq7fbgeuquhl91&amp;amp;3.121.231.62:6379"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Example of .env file&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Access Management&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;For security reasons, Nomodo.io blocks external requests to the database. You must add your current IP address (in CIDR format) under &lt;strong&gt;Database&lt;/strong&gt; &amp;gt; &lt;strong&gt;Access Management&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Choose “TCP” in the Protocol select&lt;/li&gt;
&lt;li&gt;Find your actual IP address (e.g., via &lt;a href="https://ipinfo.io/" rel="noopener noreferrer"&gt;ipinfo.io&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;/0&lt;/code&gt; to allow access from a wide range of IPs, or use &lt;code&gt;/32&lt;/code&gt; to restrict access to a single IP address.&lt;/li&gt;
&lt;li&gt;Put this string into “CIDR address”&lt;/li&gt;
&lt;li&gt;In the “Port” input paste value from “DB Port” in the tab &lt;strong&gt;Database&lt;/strong&gt; &amp;gt; &lt;strong&gt;Database Info&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Note: IP addresses may change over time, so ensure your current address is always updated. If you cannot connect, check if your IP is still listed.&lt;/em&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%2Fnu3om4l4zrhnk0mx6jnh.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%2Fnu3om4l4zrhnk0mx6jnh.png" width="800" height="554"&gt;&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%2Fkl32356f3bji6n5mo7o5.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%2Fkl32356f3bji6n5mo7o5.png" width="800" height="554"&gt;&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%2Fegciaq5yoj11dintg95t.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%2Fegciaq5yoj11dintg95t.png" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Run, Push, Deploy
&lt;/h2&gt;

&lt;p&gt;Run your code locally using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once your changes are ready, commit and push them to the remote repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add .
git commit -m "Your message"
git push origin master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From the Nomodo dashboard, go to &lt;strong&gt;Deploys&lt;/strong&gt; and click on &lt;strong&gt;New Deployment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If errors occur (such as environment variable issues), update them in &lt;strong&gt;Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;Environment Variables&lt;/strong&gt;. You may also need to run migration scripts if your changes involve modifying the database structure. Go to &lt;strong&gt;Database&lt;/strong&gt; &amp;gt; &lt;strong&gt;Migrations&lt;/strong&gt; to handle this.&lt;/p&gt;

&lt;p&gt;If things go wrong, you can roll back to a previous working state from the deployment history.&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%2Fw669psx0hldt1g9nt37a.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%2Fw669psx0hldt1g9nt37a.png" width="800" height="554"&gt;&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%2Fdyc6z3ns59u2vabkwi3q.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%2Fdyc6z3ns59u2vabkwi3q.png" width="800" height="554"&gt;&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%2Fytira41jr7fzrvsgg5xf.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%2Fytira41jr7fzrvsgg5xf.png" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Developing and deploying MedusaJS on Nomodo.io is a straightforward process, made easier with features like &lt;strong&gt;automatic database backups&lt;/strong&gt; , &lt;strong&gt;easy environment management&lt;/strong&gt; , and the ability to &lt;strong&gt;roll back deployments&lt;/strong&gt; if needed. Whether you’re pushing small updates or significant changes requiring migrations, Nomodo.io simplifies the entire process, allowing you to focus on building your e-commerce solution without worrying about infrastructure.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Try Medusa.js
&lt;/h2&gt;

&lt;p&gt;Use code B0OZUUYW for a discount. We 💙 our readers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://admin.nomodo.io/login" rel="noopener noreferrer"&gt;Start Medusa.js free trial&lt;/a&gt;&lt;/p&gt;

</description>
      <category>medusajs</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>26 Global Regions for MedusaJS Hosting on Nomodo.io!</title>
      <dc:creator>Nomodo.io</dc:creator>
      <pubDate>Wed, 28 Aug 2024 13:00:53 +0000</pubDate>
      <link>https://dev.to/nomodo-io/26-global-regions-for-medusajs-hosting-on-nomodoio-323o</link>
      <guid>https://dev.to/nomodo-io/26-global-regions-for-medusajs-hosting-on-nomodoio-323o</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Global connectivity with MedusaJS as we introduce 25 new hosting regions across the globe. Now, your e-commerce platform can deliver top-tier performance, no matter where your customers are. Discover how this expansion empowers your business with faster, more reliable, and compliant operations.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;Nomodo.io now supports hosting your MedusaJS backend in the following regions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;North America&lt;/strong&gt; :

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;US East&lt;/strong&gt; : N. Virginia, Ohio&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;US West&lt;/strong&gt; : N. California, Oregon, Canada (Central and Calgery)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;South America&lt;/strong&gt; : São Paulo&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Europe&lt;/strong&gt; : Frankfurt, Ireland, London, Milan, Paris, Stockholm, Spain&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Africa&lt;/strong&gt; : Cape Town&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Asia Pacific&lt;/strong&gt; : Hong Kong, Mumbai, Osaka-Local, Seoul, Singapore, Sydney, Tokyo, Jakarta, Melbourne, Malaysia, Hyderabad&lt;/li&gt;

&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;With the addition of these regions, you can now deploy your MedusaJS backend closer to your customer base, minimising latency and ensuring faster load times. This is especially crucial for businesses operating globally, where performance and reliability are key to customer satisfaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Affordable, Scalable Solutions
&lt;/h2&gt;

&lt;p&gt;Our hosting plans are designed to be flexible and scalable, catering to startups and growing businesses alike. &lt;strong&gt;Prices range from $10&lt;/strong&gt; to $30 per month, depending on your specific needs. Plus, with our &lt;strong&gt;7-day free trial&lt;/strong&gt; , you can experience the power of MedusaJS on Nomodo.io without any upfront commitment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready to Get Started?
&lt;/h2&gt;

&lt;p&gt;Deploying your MedusaJS backend in these new regions is as easy as a few clicks. Whether you’re a developer or a business owner, Nomodo.io simplifies the process, allowing you to focus on what matters most—building and scaling your business.&lt;/p&gt;

&lt;p&gt;Try it out today and take advantage of our global network to deliver the best possible experience to your users!&lt;/p&gt;

&lt;h2&gt;
  
  
  Try Medusa.js
&lt;/h2&gt;

&lt;p&gt;Use code MedusaJSYT5 for a $5 discount.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://admin.nomodo.io/login?ref=blog.nomodo.io" rel="noopener noreferrer"&gt;Start Medusa.js free trial&lt;/a&gt;&lt;/p&gt;

</description>
      <category>medusajs</category>
    </item>
    <item>
      <title>How to setup Stripe plugin in Medusa.js on Nomodo: Step‑by‑Step Guide</title>
      <dc:creator>Nomodo.io</dc:creator>
      <pubDate>Wed, 28 Aug 2024 06:00:37 +0000</pubDate>
      <link>https://dev.to/nomodo-io/how-to-setup-stripe-plugin-in-medusajs-on-nomodo-step-by-step-guide-2ld8</link>
      <guid>https://dev.to/nomodo-io/how-to-setup-stripe-plugin-in-medusajs-on-nomodo-step-by-step-guide-2ld8</guid>
      <description>&lt;p&gt;Prerequisites:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;MedusaJS instance on &lt;a href="https://admin.nomodo.io/create/medusajs" rel="noopener noreferrer"&gt;nomodo.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Stripe account&lt;/li&gt;
&lt;li&gt;Front-end MedusaJS store.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This guide has three steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install and configure the Stripe plugin.&lt;/li&gt;
&lt;li&gt;Change environment variables and deploy via Nomodo admin&lt;/li&gt;
&lt;li&gt;Configuring stripe environment variables according to the Stripe documentation and restarting the application&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  1. Install and configure the Stripe plugin.
&lt;/h2&gt;

&lt;p&gt;To  begin, we expect that you have an already running medusajs project on Nomodo, and a running medusajs project on your local machine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8VKcqigx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXf59qU2VBlIQv5LEo_Ryaa2a7BSTAE5f0dhwpgHnJkJJffccDng3T3NsFFTslCCra3iZL68g2hp0q2AfP7X9SybIDbCPadXPrJeamOr91muQ9IU3GWVzWLLdsb4LoWgsyjjX-w87NDqep3JaoQglaN333cy%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8VKcqigx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXf59qU2VBlIQv5LEo_Ryaa2a7BSTAE5f0dhwpgHnJkJJffccDng3T3NsFFTslCCra3iZL68g2hp0q2AfP7X9SybIDbCPadXPrJeamOr91muQ9IU3GWVzWLLdsb4LoWgsyjjX-w87NDqep3JaoQglaN333cy%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="800" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s continue by installing the stripe plugin, run the command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i medusa-payment-stripe@^6.0.10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the installation is successful, the stripe plugin will be added to your &lt;code&gt;package.json&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AxSTkThN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXc6iPafRPFcXNWUoevT6dlszRNg2KhjHq4-WHU4nuXzC-wIWSDdIQpbzBVp6A-iRsM4Z2zA5ZXfvIvoBBuevgqDR9IKRHgk06y2C1pePESy_9pIKk1-gNEm6OgHNKEPYoyZG-phy9rPvaqIEr1AFINnz7m6%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AxSTkThN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXc6iPafRPFcXNWUoevT6dlszRNg2KhjHq4-WHU4nuXzC-wIWSDdIQpbzBVp6A-iRsM4Z2zA5ZXfvIvoBBuevgqDR9IKRHgk06y2C1pePESy_9pIKk1-gNEm6OgHNKEPYoyZG-phy9rPvaqIEr1AFINnz7m6%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="800" height="50"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To configure the plugin, open the &lt;code&gt;medusa-config.js&lt;/code&gt; file and add the following at the end of the plugins array:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const plugins = [
 // ....
 {
   resolve: `medusa-payment-stripe`,
   options: {
     api_key: process.env.STRIPE_API_KEY,
     webhook_secret: process.env.STRIPE_WEBHOOK_SECRET,
   },
 },
];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1.1 Get and store Stripe API keys
&lt;/h3&gt;

&lt;p&gt;The plugin accepts an &lt;strong&gt;&lt;code&gt;api_key&lt;/code&gt;&lt;/strong&gt; , necessary for both your development and production environments, and &lt;strong&gt;&lt;code&gt;webhook_secret&lt;/code&gt;&lt;/strong&gt; required for your production environment.&lt;/p&gt;

&lt;p&gt;To get your &lt;code&gt;api_key&lt;/code&gt; go to your &lt;a href="https://dashboard.stripe.com/test/dashboard" rel="noopener noreferrer"&gt;Stripe’s&lt;/a&gt; account dashboard and create a new account for your MedusaJS project: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H2kY4qY5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXc6kXxoTWfnU3n8Vglu_aHKkoQUuS5kVCXWG3dJYp8e1RNzF6swbulPZYkq0vZji4vUjrLdT4pUc3rTZIqenVeCemMKo7tAWqzHMVVVAxoNozaPxpcEpURFe_xblXkEKYBSjaKhKEAu19H7aRKmyE4x2WBR%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H2kY4qY5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXc6kXxoTWfnU3n8Vglu_aHKkoQUuS5kVCXWG3dJYp8e1RNzF6swbulPZYkq0vZji4vUjrLdT4pUc3rTZIqenVeCemMKo7tAWqzHMVVVAxoNozaPxpcEpURFe_xblXkEKYBSjaKhKEAu19H7aRKmyE4x2WBR%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iUYf4j4i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXcv5ckrwgCxp8ZK1I0uWIg1Xqa62byS3KN7kvh42St-18EqtP_GJUt3Ovnr7lZ8ND8XiV8D17v3Yz_rRs60kq4B9NG143xFnt-ix0Rm7VEOGLyzJYkoU6f9Ed7_dODw9HMXpQqwSTtgKpWurikyLmRH_njD%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iUYf4j4i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXcv5ckrwgCxp8ZK1I0uWIg1Xqa62byS3KN7kvh42St-18EqtP_GJUt3Ovnr7lZ8ND8XiV8D17v3Yz_rRs60kq4B9NG143xFnt-ix0Rm7VEOGLyzJYkoU6f9Ed7_dODw9HMXpQqwSTtgKpWurikyLmRH_njD%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once your account is created, click on the &lt;strong&gt;developers&lt;/strong&gt; tab, then &lt;strong&gt;API keys&lt;/strong&gt; section under it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oCvpePve--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXfOgr0Q22X46o4TxwSNW8v-WY_B6WNt03_fRaRUnqf9nO8XO69J49c0EWZLQgZpDOx9ThAyj1ew4sSJSBtyrpdVVhf5d5ZTORvSQwj-IqTEsk67cfL0QCfjXPLJTZ_SudErPce6idZRi0Ugsluji5qCE_g%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oCvpePve--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXfOgr0Q22X46o4TxwSNW8v-WY_B6WNt03_fRaRUnqf9nO8XO69J49c0EWZLQgZpDOx9ThAyj1ew4sSJSBtyrpdVVhf5d5ZTORvSQwj-IqTEsk67cfL0QCfjXPLJTZ_SudErPce6idZRi0Ugsluji5qCE_g%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click to reveal your secret key:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FA1Du6uI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXcD9Frqrc9hCvaHG3awqQwOT3lIXcS9bNDGnyeFmigzECdl_KCVanJSWhXYIGv_8bbYwMk8ja5hIo92Xtaal3jeu23vkcJV4iYTFnBPpdDB6IxoxX_gbnJxLSV2N7wKxEquk4yccdYc6B5F5Uia70-np0KM%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FA1Du6uI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXcD9Frqrc9hCvaHG3awqQwOT3lIXcS9bNDGnyeFmigzECdl_KCVanJSWhXYIGv_8bbYwMk8ja5hIo92Xtaal3jeu23vkcJV4iYTFnBPpdDB6IxoxX_gbnJxLSV2N7wKxEquk4yccdYc6B5F5Uia70-np0KM%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="800" height="29"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click to copy the key, add to your medusa backend &lt;strong&gt;&lt;code&gt;.env.local&lt;/code&gt;&lt;/strong&gt; file in your local machine.&lt;/p&gt;

&lt;p&gt;Once done, restart your medusa js locally with &lt;strong&gt;&lt;code&gt;npm run start&lt;/code&gt;&lt;/strong&gt; , and open the Medusa admin on &lt;strong&gt;&lt;code&gt;localhost:7001&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RFIJQZxQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXeDqWdRPMrDC8e_y4Kag6LTXDkfIyq0K1KzGEVXZE8p_9R8q_lyMLEfwOeqUw-Pn56lOUst48Eso0zL7PPAm_rwOpGwJacyL_-WW6vsgKukP9ZGNc7YvipoK2SxMAS9HHhnrbg2apKNu5HIlTURfUVSJKwt%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RFIJQZxQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXeDqWdRPMrDC8e_y4Kag6LTXDkfIyq0K1KzGEVXZE8p_9R8q_lyMLEfwOeqUw-Pn56lOUst48Eso0zL7PPAm_rwOpGwJacyL_-WW6vsgKukP9ZGNc7YvipoK2SxMAS9HHhnrbg2apKNu5HIlTURfUVSJKwt%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2. Updating Environment Variables in Nomodo.io admin
&lt;/h3&gt;

&lt;p&gt;These Stripe’s environment variables, the &lt;strong&gt;&lt;code&gt;secret_key&lt;/code&gt;&lt;/strong&gt; and the &lt;strong&gt;&lt;code&gt;webhook_secret&lt;/code&gt;&lt;/strong&gt; must also be saved in the nomodo.io admin; go to &lt;strong&gt;Settings&lt;/strong&gt; → &lt;strong&gt;Environmental variables&lt;/strong&gt;  and add accordingly. Once done, you can click on &lt;strong&gt;Restart&lt;/strong&gt; or &lt;strong&gt;Redeploy&lt;/strong&gt; to propagate the changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.3 Adding Regions in Medusa.js
&lt;/h3&gt;

&lt;p&gt;In this section, we will learn how to manage stripe payments as per region, this enables a customer to select Stripe as a payment provider during checkout to complete their purchases.&lt;/p&gt;

&lt;p&gt;Go to the &lt;strong&gt;Settings&lt;/strong&gt; section on the sidebar and select &lt;strong&gt;Regions&lt;/strong&gt; :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zET4a5QO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXept7Q4GCzdHFGBjyXLrzz4BntUEqB1NCwhuQAj5po_YigxuHzlo-K-_bx2U5jFgzSajRcXoN7mEkqs6fQ1fUj_uG3_w1r8raCOfA9CGBzqQdRttqxqNTMmLo75oqyq2G-vW7oObmp4zAWppwoVAZPCHzo%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zET4a5QO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXept7Q4GCzdHFGBjyXLrzz4BntUEqB1NCwhuQAj5po_YigxuHzlo-K-_bx2U5jFgzSajRcXoN7mEkqs6fQ1fUj_uG3_w1r8raCOfA9CGBzqQdRttqxqNTMmLo75oqyq2G-vW7oObmp4zAWppwoVAZPCHzo%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on the &lt;strong&gt;+&lt;/strong&gt; icon to add a new region&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BOCihPCA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXe-11rSY8hjnyQpd0z65B7wykRTpGLSPgIkJiJyu7rkk_MKOMJ4TkZ0hYCoewjd3RqyfhCNa-YBbLeHnFmMTJ965E_ZSQRBOe9VaWiuZ_3LqMFs9ZewKOH-euhWOZVOuSjvu4qwfnpC4yQMOCsZOKGY51Y%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BOCihPCA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXe-11rSY8hjnyQpd0z65B7wykRTpGLSPgIkJiJyu7rkk_MKOMJ4TkZ0hYCoewjd3RqyfhCNa-YBbLeHnFmMTJ965E_ZSQRBOe9VaWiuZ_3LqMFs9ZewKOH-euhWOZVOuSjvu4qwfnpC4yQMOCsZOKGY51Y%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="800" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will be required to add region details, including currency, taxes, payment, and fulfilment providers. &lt;/p&gt;

&lt;p&gt;On the &lt;strong&gt;Payment Providers&lt;/strong&gt; dropdown list, select &lt;strong&gt;Stripe&lt;/strong&gt; , and on the &lt;strong&gt;Fulfilment Providers&lt;/strong&gt; dropdown list select the &lt;strong&gt;Manual&lt;/strong&gt; option. Save and close.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xezZpxcG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXeK-Hr4yz3RO4Ppzv24a37TMEIO1uxXAKjogGd5HXxz0ZGXX8E-zeY3XQ9C3U4zIksWzsNSYzy48ylCIobliP9vYGw-c4j3VH_z-2K3rB6HbCV97xU2nPcvvUi1JUy4LkmPZjKJNhfX7FD9SufzzcJmKPdh%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xezZpxcG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXeK-Hr4yz3RO4Ppzv24a37TMEIO1uxXAKjogGd5HXxz0ZGXX8E-zeY3XQ9C3U4zIksWzsNSYzy48ylCIobliP9vYGw-c4j3VH_z-2K3rB6HbCV97xU2nPcvvUi1JUy4LkmPZjKJNhfX7FD9SufzzcJmKPdh%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To view the region details created, click on Region’s top right hand, then click &lt;strong&gt;Edit Region Details&lt;/strong&gt; button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rlm1TK4w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXdP06GLYYdio5DTKZqtu2GMB1Hgw5gUOfizjOv0gfno848GD5AwIz3t92qwB9QiQRMMe5u37DTGMVx5dYTL9LXIMz2euz9Jm3nYCkolSmMMYEZIqUe5ld_h4xNoJ-Hh_ChUmwaQ0YITaY5qVpXrQeCpAnfz%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rlm1TK4w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXdP06GLYYdio5DTKZqtu2GMB1Hgw5gUOfizjOv0gfno848GD5AwIz3t92qwB9QiQRMMe5u37DTGMVx5dYTL9LXIMz2euz9Jm3nYCkolSmMMYEZIqUe5ld_h4xNoJ-Hh_ChUmwaQ0YITaY5qVpXrQeCpAnfz%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Po9YE3jz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXf2K2OjoPATghyr3GPQwIivo8W-AcUJujyPSqGh2A9UT8URPbqLjGaGLuuVZhP4HeGtVG-iVN2pi-2nTigUf_zQ_EXIgr4bTzDk1OJXrKt2-5hOh-lePYDSn8YSagCOaxAUrEYv4vseyjthOs1Rp6U_m76T%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Po9YE3jz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXf2K2OjoPATghyr3GPQwIivo8W-AcUJujyPSqGh2A9UT8URPbqLjGaGLuuVZhP4HeGtVG-iVN2pi-2nTigUf_zQ_EXIgr4bTzDk1OJXrKt2-5hOh-lePYDSn8YSagCOaxAUrEYv4vseyjthOs1Rp6U_m76T%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this point, everything in the MedusaJS backend is now configured.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rjujyKfA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXf6-FeJy0Qku9RrvMDAoTJSxYdGXr8CLSLTbgbO0rjjVDdsATxt2QjmTo7MtN0mkam-AL4ebBV3wyBaaJkgm_iqeD2X9lbJsBpizPwuoaRQAQ7InjOUCWOUvg6jE6vpneS710T6bZbDnbdN-e9gI4j88tYr%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rjujyKfA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXf6-FeJy0Qku9RrvMDAoTJSxYdGXr8CLSLTbgbO0rjjVDdsATxt2QjmTo7MtN0mkam-AL4ebBV3wyBaaJkgm_iqeD2X9lbJsBpizPwuoaRQAQ7InjOUCWOUvg6jE6vpneS710T6bZbDnbdN-e9gI4j88tYr%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="800" height="80"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1.4 Adding Stripe in Frontend
&lt;/h3&gt;

&lt;p&gt;If you have no frontend repository, a quick setup guide is provided &lt;a href="https://docs.medusajs.com/starters/nextjs-medusa-starter" rel="noopener noreferrer"&gt;&lt;u&gt;here&lt;/u&gt;&lt;/a&gt;, use the 2nd option as you already have a running medusa backend, follow the instructions to create a Next.js storefront separately.&lt;/p&gt;

&lt;p&gt;For the stripe payment to work on the front-end, you need to get stripe’s “ &lt;strong&gt;publishable key&lt;/strong&gt; ” from the developers tab under api keys in your stripe account dashboard: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bXopD8N7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXfpn7O4O3UJwG0VRkXhTqVjRUvZjxcMBPhX4p1EdVOfrE0dOqlrfgv8qkE1_iixq9UhzbdZCGOsrNiW_wfR03hBoIISdCk7yqz9LhHEo2EgXJ4DhFyhZnvOpEsIki7B5-BR7fZtDb-LzMmKKuw4ywowgbyl%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bXopD8N7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXfpn7O4O3UJwG0VRkXhTqVjRUvZjxcMBPhX4p1EdVOfrE0dOqlrfgv8qkE1_iixq9UhzbdZCGOsrNiW_wfR03hBoIISdCk7yqz9LhHEo2EgXJ4DhFyhZnvOpEsIki7B5-BR7fZtDb-LzMmKKuw4ywowgbyl%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="716" height="91"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the key in the &lt;strong&gt;&lt;code&gt;.env.local&lt;/code&gt;&lt;/strong&gt; file in your front-end code, this will help in testing the stripe payment method from the UI, and restart the frontend server.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.5. Test Stripe integration on frontend
&lt;/h3&gt;

&lt;p&gt;To test stripe payment method, go to the store catalogue, in this case &lt;a href="http://localhost:8000/us/store" rel="noopener noreferrer"&gt;&lt;u&gt;http://localhost:8000/us/store&lt;/u&gt;&lt;/a&gt;, this displays a list of items in “ &lt;strong&gt;us”&lt;/strong&gt; store, “ &lt;strong&gt;us&lt;/strong&gt; ” being the default region set in our &lt;strong&gt;&lt;code&gt;.env.local&lt;/code&gt;&lt;/strong&gt; file with the &lt;strong&gt;&lt;code&gt;NEXT_PUBLIC_DEFAULT_REGION&lt;/code&gt;&lt;/strong&gt; key, select an item and add to cart.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SJl0QGan--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXfaBHQDEcSWdCZZJe3U3yN1ZKirWnZDehoETlcwAR1Yb6yLsOoL6CsMvItadXduA5EzxJdBkNKP_WYyz2BpB0fK5rJtHClHi3LOX-Mvf8BzIBwDslo3uNIf1taa5-YmOq2MW6Q26dpD8VfAnPkr6fLzOcaf%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SJl0QGan--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXfaBHQDEcSWdCZZJe3U3yN1ZKirWnZDehoETlcwAR1Yb6yLsOoL6CsMvItadXduA5EzxJdBkNKP_WYyz2BpB0fK5rJtHClHi3LOX-Mvf8BzIBwDslo3uNIf1taa5-YmOq2MW6Q26dpD8VfAnPkr6fLzOcaf%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Navigate to &lt;strong&gt;Cart&lt;/strong&gt; to checkout the items.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qBLEl-HN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXeoIFe9IPx3bds9rY2AdXuU3T6wDP2XjLKXsCFdW1hCmb7lBc6SbsCZYDeL3QT2MWzHAFYUU9AqLzWi2JT0TpNDpDBh7YbNTMKr1sp-7ECFU1_lo-aCM4ZRm_3xiaYe9HjMvxpgeFcQ90SxsponhV3l2_fF%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qBLEl-HN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXeoIFe9IPx3bds9rY2AdXuU3T6wDP2XjLKXsCFdW1hCmb7lBc6SbsCZYDeL3QT2MWzHAFYUU9AqLzWi2JT0TpNDpDBh7YbNTMKr1sp-7ECFU1_lo-aCM4ZRm_3xiaYe9HjMvxpgeFcQ90SxsponhV3l2_fF%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To checkout, click &lt;strong&gt;Go to checkout&lt;/strong&gt; , add your shipping address, delivery method and click &lt;strong&gt;Continue to payment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UCe7H4_6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXdS9G83AjkQoK6V0Q-uTh9kHfq7h-OtAvOM3NmRzdqKS57CJbxFHJpMt789RgV7dg8iJL1-jfeF-qzPq4DDRbjTdXf26UVt_Pc_JOylsRle-uJEdVB2R5MolDlyu2ra9BVBtrcjGPSFGaMbz0mKLvzb4ik%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UCe7H4_6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXdS9G83AjkQoK6V0Q-uTh9kHfq7h-OtAvOM3NmRzdqKS57CJbxFHJpMt789RgV7dg8iJL1-jfeF-qzPq4DDRbjTdXf26UVt_Pc_JOylsRle-uJEdVB2R5MolDlyu2ra9BVBtrcjGPSFGaMbz0mKLvzb4ik%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An option to add credit card details is now shown, we will use Stripe’s test card number.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9GIzNQxl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXc60Q705faLva0QfULpztJWQn-x6JqXs4o5QsTv3XBfMhc87C9KLLxiqMNGg_Vav_F70eQli_9unXt9kyAkMCkoE6Fnz3CxhCMjKhe1JO0CWlGhzn_GwDcz3gN-iJKaWjnryeL-gY-Qv2lytkOAQNeA8_dj%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9GIzNQxl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXc60Q705faLva0QfULpztJWQn-x6JqXs4o5QsTv3XBfMhc87C9KLLxiqMNGg_Vav_F70eQli_9unXt9kyAkMCkoE6Fnz3CxhCMjKhe1JO0CWlGhzn_GwDcz3gN-iJKaWjnryeL-gY-Qv2lytkOAQNeA8_dj%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once payment is added, click &lt;strong&gt;Continue to review&lt;/strong&gt; , and finally &lt;strong&gt;Place the order&lt;/strong&gt; to complete the checkout process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bGGx6p_J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXeI7JHxxKHjJ5uYRgEMaN4KR3pSH_P6MZo5d_2CGoAjPjm8JOkpbDjY8rngmkM_tXfQeNCEWkUYrajiJNvz-_0lF4R4lL3BuFf1H4BC01TZwzYDvxBmkMwr7rLL7pwL49mNFZaCRUeddczM2vPqDroLUt4%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bGGx6p_J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://lh7-rt.googleusercontent.com/docsz/AD_4nXeI7JHxxKHjJ5uYRgEMaN4KR3pSH_P6MZo5d_2CGoAjPjm8JOkpbDjY8rngmkM_tXfQeNCEWkUYrajiJNvz-_0lF4R4lL3BuFf1H4BC01TZwzYDvxBmkMwr7rLL7pwL49mNFZaCRUeddczM2vPqDroLUt4%3Fkey%3D7XOB_LoxPDOV41ZboZte7g" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Deploy the new version via Nomodo admin.
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Push your local changes to your GitHub remote repository.&lt;/li&gt;
&lt;li&gt;Open the applications’s Nomodo admin instance, go to &lt;strong&gt;Settings&lt;/strong&gt; → &lt;strong&gt;Environmental variables&lt;/strong&gt; and add the Stripe’s Environment variables.&lt;/li&gt;
&lt;li&gt;Click on the &lt;strong&gt;Restart&lt;/strong&gt; button to propagate the changes.&lt;/li&gt;
&lt;li&gt;If you want to deploy and make all changes available, perform a deploy (App Details, Deployments tab).&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  3. Configure Stripe’s Environment variables and restart the application.
&lt;/h2&gt;

&lt;p&gt;Stripe provides two main environments, development and production environments, which each require different setups. A complete guide is provided in the &lt;a href="https://docs.stripe.com/get-started" rel="noopener noreferrer"&gt;&lt;u&gt;Stripe’s official documentation&lt;/u&gt;&lt;/a&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  3.1 Testing Environment
&lt;/h3&gt;

&lt;p&gt;For the development environment, Stripe provides an &lt;strong&gt;&lt;code&gt;api_key&lt;/code&gt;&lt;/strong&gt; , that will help you simulate real-world transactions, with a variety of test card numbers to test for various payment scenarios, like successful payments, failed payments and refunds.&lt;/p&gt;

&lt;p&gt;It also provides &lt;code&gt;webhook_secret&lt;/code&gt;, this hook can be pointed to your MedusaJS backend local server &lt;code&gt;{BACKEND_URL}/stripe/hooks&lt;/code&gt;  and set to listen to selected events Stripe sends after a transaction is completed.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.2 Production Environment
&lt;/h3&gt;

&lt;p&gt;In production environment, Stripe provides &lt;strong&gt;live API keys&lt;/strong&gt; which handle real transactions, it also provides &lt;code&gt;webhook_secret&lt;/code&gt;, the &lt;code&gt;webhook_secret&lt;/code&gt; is now configured to point to your production server. The webhook handles real events related to payments, disputes, refunds, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.3 Deployment to Nomodo.io
&lt;/h3&gt;

&lt;p&gt;Deployment to any stripe environment, is just a few clicks using the nomodo.io admin. Go to &lt;strong&gt;Settings&lt;/strong&gt; → &lt;strong&gt;Environmental variables&lt;/strong&gt; and update Stripe’s environment variables. Once done, you can click on &lt;strong&gt;Restart&lt;/strong&gt; or &lt;strong&gt;Redeploy&lt;/strong&gt; to propagate the changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;You’ve now successfully set up stripe plugin as a payment method for your MedusaJS project, and deploying it to Nomodo is just few clicks. Thanks to Nomodo, you can stop worrying about your business revenue management cycle and instead focus on creating amazing experiences for your customers. Give Nomodo a try and experience seamless deployment today!&lt;/p&gt;

&lt;h2&gt;
  
  
  Try this integration with Medusa.js free trial
&lt;/h2&gt;

&lt;p&gt;Use code MedusaJSYT5 for a $5 discount.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://admin.nomodo.io/login?ref=blog.nomodo.io" rel="noopener noreferrer"&gt;Start Medusa.js free trial&lt;/a&gt;&lt;/p&gt;

</description>
      <category>medusajs</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
