<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: amycutlip</title>
    <description>The latest articles on Forem by amycutlip (@amycutlip).</description>
    <link>https://forem.com/amycutlip</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%2F1094475%2F5324c8d3-4cba-423f-9904-890fa71b69a8.png</url>
      <title>Forem: amycutlip</title>
      <link>https://forem.com/amycutlip</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/amycutlip"/>
    <language>en</language>
    <item>
      <title>Customize Jira's Advanced Planning Tool for Multiple Teams &amp; Projects</title>
      <dc:creator>amycutlip</dc:creator>
      <pubDate>Tue, 10 Sep 2024 15:40:04 +0000</pubDate>
      <link>https://forem.com/bitovi/customize-jiras-advanced-planning-tool-for-multiple-teams-projects-3ma0</link>
      <guid>https://forem.com/bitovi/customize-jiras-advanced-planning-tool-for-multiple-teams-projects-3ma0</guid>
      <description>&lt;p&gt;&lt;a href="https://www.atlassian.com/software/jira/guides/advanced-roadmaps/overview#what-is-advanced-planning" rel="noopener noreferrer"&gt;Jira’s Advanced Planning&lt;/a&gt; tool (the artist formerly known as Advanced Roadmaps) allows users to manage work across multiple projects, products, and teams. However, if you try to use Advanced Planning at scale, it is &lt;strong&gt;impossible&lt;/strong&gt; to set up plans that give each organizational unit what it &lt;strong&gt;needs&lt;/strong&gt;—a plan that shows their work and how it relates to other teams' work.&lt;/p&gt;

&lt;p&gt;We’ve created &lt;a href="https://github.com/bitovi/jira-plan-weaver-automations" rel="noopener noreferrer"&gt;PlanWeaver&lt;/a&gt;, a handful of open source Jira automations that give projects, products, and teams the ability to separate and report on the work of each unit or team involved in their program.&lt;/p&gt;

&lt;p&gt;In this article, you’ll learn why PlanWeaver is necessary for managing advanced plans at scale and how to implement the automations that make reporting on programs easier and more intuitive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is PlanWeaver needed?
&lt;/h2&gt;

&lt;p&gt;In most large organizations, multiple projects, products, and teams coordinate in various ways. In this article, we’ll use a fictional restaurant technology company called FastCo to illustrate how PlanWeaver can improve clarity within an organization.&lt;/p&gt;

&lt;p&gt;In our example, FastCo has multiple products serviced by multiple teams:&lt;/p&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%2Fwg3i22j08hwoz9ygbzdl.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%2Fwg3i22j08hwoz9ygbzdl.png" alt="Teams and Products" width="751" height="104"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;FastCo’s products and teams need to support multiple projects, programs, and initiatives that can vary in size and complexity. FastCo has multiple simultaneous implementation programs: Good Burger and Sunny Sushi. Each program contains initiatives that need to be completed by various teams:&lt;/p&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%2F68d7ydij3xcqghqgy025.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%2F68d7ydij3xcqghqgy025.png" alt="Teams and Programs" width="754" height="286"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Out of the box, Advanced Planning doesn’t provide an easy way to visualize all projects on a &lt;strong&gt;team&lt;/strong&gt; or &lt;strong&gt;program&lt;/strong&gt; level.&lt;/p&gt;

&lt;h3&gt;
  
  
  Team Level
&lt;/h3&gt;

&lt;p&gt;A team wants to see all the projects they are involved in and the other teams in those projects (so dependencies can be mapped).&lt;/p&gt;

&lt;p&gt;The image below shows all the initiatives that the &lt;code&gt;Order&lt;/code&gt; team is involved in, as well as the work of other teams in those initiatives.&lt;/p&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%2Fv34tieq2gdkfu9okecuu.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%2Fv34tieq2gdkfu9okecuu.png" alt="Order View" width="800" height="696"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Program Level
&lt;/h3&gt;

&lt;p&gt;A program wants to see all work within the program, across all of the program's initiatives. The image below shows Sunny Sushi’s work plan; a view not easily available out of box.&lt;/p&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%2Frrfe9e03vhrfsvx0dc67.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%2Frrfe9e03vhrfsvx0dc67.png" alt="Sunny Sushi View" width="800" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The PlanWeaver automations simplify the creation of complex plans by tagging issues. These tags allow you to build the plans as shown above.&lt;/p&gt;

&lt;h2&gt;
  
  
  Program-level views with Parent Tags
&lt;/h2&gt;

&lt;p&gt;Enter Parent and Child Tags. The PlanWeaver automations add two fields to issues that are Epic or higher in the issue hierarchy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Parent Tags&lt;/code&gt; - The project key of all parent issues of the current issue&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Child Tags&lt;/code&gt; - The project key of all children of the current issue (and the project key of epic siblings)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's see how PlanWeaver’s tags work individually to create useful plans.&lt;/p&gt;

&lt;h3&gt;
  
  
  Program-level views with Parent Tags
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Parent Tags&lt;/code&gt; help you build a program or project-level view. Every child of a higher-order issue is tagged with that issue’s project key.&lt;/p&gt;

&lt;p&gt;In the image below, Parent Tags allow users to see all of the work related to the Good Burger program. We can see multiple initiatives and their related epics across various teams. Simply querying by the parent tag allows a user to see an organized view of the work planned for the program.&lt;/p&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%2Fu462cyuarlo3hse0qg8n.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%2Fu462cyuarlo3hse0qg8n.png" alt="Parent Tag Roadmap" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use the following filter for this Advanced Timeline Plan view:&lt;/p&gt;

&lt;p&gt;"Parent Tags[Labels]" = GOODBURGER or project = "Good Burger"&lt;/p&gt;

&lt;p&gt;There are two automation files for Parent Tags: one that updates Parent Tags when an issue is changed, and one that populates the Parent Tags in parent issues.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.bitovi.com/hubfs/Jira%20Parent%20Child%20Automation%20Blog/jira-plan-weaver-automations-main.zip" rel="noopener noreferrer"&gt;⬇️ Download JSON file&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Team views with Child Tags
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Child Tags&lt;/code&gt; help you build a view of not only a team’s work but also related work from other projects. Child tags improve the Advanced Plans view when a single team has work across multiple programs or projects and needs a way to view it all along with the dependencies.&lt;/p&gt;

&lt;p&gt;Below is a view for the Order team, displaying not only the work for the team across multiple initiatives but also the work from other teams that may have dependencies with the Order team’s work:&lt;/p&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%2F7r4aq0834jdfnm4jrz3p.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%2F7r4aq0834jdfnm4jrz3p.png" alt="Child Example Roadmap" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use the following filter for this Advanced Timeline Plan view:&lt;/p&gt;

&lt;p&gt;"Child Tags[Labels]" = ORDER&lt;/p&gt;

&lt;p&gt;There are three JSON files for Child Tags: one to update Child Tags when a parent issue is changed, another to update Child Tags when an issue is moved, and a final automation to update a parent issue's tags when Child Tags change.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.bitovi.com/hubfs/Jira%20Parent%20Child%20Automation%20Blog/jira-plan-weaver-automations-main.zip" rel="noopener noreferrer"&gt;⬇️ Download JSON file&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Out of the box, it's a challenge to use Jira’s Advanced Planning at an enterprise scale. With our open source PlanWeaver add-on, Advanced Planning becomes more useful for teams to view their work across programs. Adding Epic-level tags enhances reporting and allows program managers and teams to view their work—and how their work impacts other teams—more intuitively.&lt;/p&gt;

&lt;p&gt;At Bitovi, we focus on helping our clients make the right decisions for their products and company. Developing new ways to view work, like our PlanWeaver automation, is another way we’re working to perfect product delivery. We’ll have another post soon walking through how to import and use the PlanWeaver automations. In the meantime, be sure to join our &lt;a href="https://discord.gg/J7ejFsZnJ4" rel="noopener noreferrer"&gt;Community Discord&lt;/a&gt; for support and inspiration. Happy planning!&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>product</category>
      <category>agile</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Protect Your Business from IT Disasters: Lessons from the CrowdStrike Outage</title>
      <dc:creator>amycutlip</dc:creator>
      <pubDate>Thu, 25 Jul 2024 19:32:26 +0000</pubDate>
      <link>https://forem.com/bitovi/protect-your-business-from-it-disasters-lessons-from-the-crowdstrike-outage-12hm</link>
      <guid>https://forem.com/bitovi/protect-your-business-from-it-disasters-lessons-from-the-crowdstrike-outage-12hm</guid>
      <description>&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%2F89flkq7r5b450q93i0pj.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%2F89flkq7r5b450q93i0pj.png" alt="Image description" width="800" height="418"&gt;&lt;/a&gt;&lt;br&gt;
Businesses heavily rely on IT infrastructure for smooth operations and security, but what happens when that infrastructure breaks? Thousands of companies were blindsided by a sudden CrowdStrike outage on Friday, July 19th, leading to a projected cost of &lt;a href="https://www.cnn.com/2024/07/21/business/crowdstrike-outage-cost/index.html" rel="noopener noreferrer"&gt;$1 Billion&lt;/a&gt;. With an estimated 8.5 million devices impacted by the outage, over 5,000 canceled flights, and hundreds of hospital computer systems offline, you’re probably wondering: &lt;em&gt;What can I do to prevent a CrowdStrike-level business disruption?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In this blog, you’ll learn the business impacts of IT disasters, how to prevent them, and the steps you can take today to protect your organization from similar threats.&lt;/p&gt;

&lt;h3&gt;
  
  
  Up first: Who is Bitovi?
&lt;/h3&gt;

&lt;p&gt;Bitovi is a digital product consultancy dedicated to perfecting product delivery. We’ve provided &lt;a href="https://www.bitovi.com/services/quality-engineering-consulting" rel="noopener noreferrer"&gt;Quality Engineering Consulting&lt;/a&gt; to businesses of all sizes—from lean startups to Fortune 500 enterprises. We write about improving software engineering and delivery practices.&lt;/p&gt;

&lt;p&gt;Learn more about Bitovi’s &lt;a href="https://www.bitovi.com/digital-consulting-services" rel="noopener noreferrer"&gt;digital consulting services&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Business disruptions and financial losses from IT outages
&lt;/h2&gt;

&lt;p&gt;The CrowdStrike outage serves as a wake-up call to businesses about the severe disruptions that IT failures can cause. Financial losses, operational disruptions, and reputation damage—&lt;strong&gt;when critical IT infrastructure fails, the ripple effects can be vast and costly.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Financial losses from IT disasters like the CrowdStrike outage
&lt;/h3&gt;

&lt;p&gt;During the CrowdStrike outage, businesses faced immediate operational challenges. With over 8.5 million devices affected globally, revenue loss during the downtime period was a severe blow to many companies' financial health.&lt;/p&gt;

&lt;p&gt;The estimated $1 billion cost reflects not only lost productivity but also the emergency IT remediation efforts required to address the outage. Businesses had to bear the costs associated with restoring operations, including overtime payments to IT staff and, in some cases, hiring specialized consultants.&lt;/p&gt;

&lt;p&gt;The financial impacts of IT disruptions are overwhelming, but there is a way forward. Investing in a robust Quality Engineering practice allows organizations to prevent significant disruptions and address them quickly if they do occur.&lt;/p&gt;

&lt;p&gt;“In light of the CrowdStrike outage, investing in Quality Engineering is essential. It helps prevent disruptions and ensures quick recovery, minimizing financial losses and protecting business reputation,” says Bitovi’s Director of &lt;a href="https://www.bitovi.com/services/quality-engineering-consulting" rel="noopener noreferrer"&gt;Quality Engineering Consulting&lt;/a&gt;, Denison Luz.&lt;/p&gt;

&lt;h3&gt;
  
  
  Operational disruptions caused by IT outages
&lt;/h3&gt;

&lt;p&gt;On a human level, the operational disruptions were more devastating than the financial impacts. Industries that depend on real-time data and continuous operations, like airlines, healthcare, and banking, were particularly hard hit. The outage led to the cancellation of over 5,000 flights, causing widespread travel chaos and leaving passengers stranded in airports worldwide. Hospitals struggled to maintain patient care as critical computer systems went offline, forcing staff to revert to manual processes prone to errors and inefficiencies. The impact on patient safety and care quality was a stark reminder of how dependent modern healthcare systems are on reliable IT infrastructure.&lt;/p&gt;

&lt;p&gt;[nurse quote, verifying with sources]&lt;/p&gt;

&lt;p&gt;These disruptions underscored the need for robust and resilient IT systems that can withstand unexpected failures. Quality Engineering establishes safeguards like regression testing, which ensures new updates are compatible with older systems, keeping systems online and providing critical services.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reputation damage caused by IT infrastructure failures
&lt;/h3&gt;

&lt;p&gt;Reputation damage is another critical aspect that businesses must consider. For businesses, trust is paramount. An outage that compromises security or disrupts services can erode customer confidence and damage a company’s reputation. The long-term impact on customer trust can be even more damaging than the immediate financial losses. Companies that experience significant outages often face backlash from customers and negative media coverage, which can take years to recover from.&lt;/p&gt;

&lt;p&gt;The CrowdStrike outage is a potent reminder that &lt;strong&gt;IT resilience is not just a technical issue but a critical business priority&lt;/strong&gt;. Ensuring that your IT systems are robust and capable of withstanding failures can protect your business from severe financial losses and operational disruptions. It is essential for business leaders to prioritize Quality Engineering and proactive measures to safeguard their organizations against similar threats. Not sure where to start? It’s not too late to preserve your reputation for quality—Bitovi’s &lt;a href="https://www.bitovi.com/digital-consulting-services" rel="noopener noreferrer"&gt;Quality Engineering Consultants&lt;/a&gt; are available to help enhance your testing practices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementing Quality Engineering to prevent IT outages
&lt;/h2&gt;

&lt;p&gt;People sleeping in airports, plunging stock prices, healthcare disruptions—the CrowdStrike outage made waves beyond the tech industry, affecting millions of businesses and individuals worldwide.&lt;/p&gt;

&lt;p&gt;Establishing robust IT infrastructure and proactive measures to prevent such disasters has never been more important. Businesses must recognize the vulnerabilities in their systems and the need for continuous monitoring and quality engineering to ensure resilience.&lt;/p&gt;

&lt;p&gt;Investing in advanced Quality Engineering practices and implementing regular quality checks can help in identifying potential points of failure before they lead to significant disruptions. Moreover, having a well-defined incident response plan can mitigate the impact when an outage does occur. Proactive measures like stress testing systems and regular drills can prepare businesses to handle unexpected IT failures more effectively, minimizing downtime and associated costs.&lt;/p&gt;

&lt;p&gt;Bitovi can help establish the safeguards to protect your business from IT disruptions. Contact our &lt;a href="https://www.bitovi.com/services/quality-engineering-consulting" rel="noopener noreferrer"&gt;Quality Engineering Consulting&lt;/a&gt; experts for a free consultation.&lt;/p&gt;

</description>
      <category>qa</category>
      <category>news</category>
      <category>qualityengineering</category>
    </item>
    <item>
      <title>Meet React to Web Component (R2WC) v2</title>
      <dc:creator>amycutlip</dc:creator>
      <pubDate>Tue, 06 Jun 2023 15:03:00 +0000</pubDate>
      <link>https://forem.com/amycutlip/meet-react-to-web-component-r2wc-v2-34bl</link>
      <guid>https://forem.com/amycutlip/meet-react-to-web-component-r2wc-v2-34bl</guid>
      <description>&lt;p&gt;Greetings, dev community! The highly-anticipated release of the new R2WC (&lt;a href="https://www.bitovi.com/open-source/react-to-web-component" rel="noopener noreferrer"&gt;react-to-web-component&lt;/a&gt;) API is here! We have been thrilled by the level of adoption version 1.0 has attained within the developer community. You have provided great feedback in our &lt;a href="https://discord.gg/J7ejFsZnJ4" rel="noopener noreferrer"&gt;Discord&lt;/a&gt; and &lt;a href="https://github.com/bitovi/react-to-web-component/issues" rel="noopener noreferrer"&gt;GitHub issues&lt;/a&gt; on your pain points and the ways in which we can improve R2WC. And we listened!&lt;/p&gt;

&lt;h2&gt;
  
  
  What is R2WC?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.bitovi.com/open-source/r2wc" rel="noopener noreferrer"&gt;React to Web Component&lt;/a&gt; is the best way to encapsulate React components into standalone Web Components. It lets you use React anywhere! React to Web Component is especially useful for microfrontends and dropping React code into otherwise static sites. &lt;/p&gt;

&lt;p&gt;Gone are the days of redeveloping components for the web. Now you can wrap any component from your React component library and use it in any project that uses HTML, regardless of its framework or library. &lt;/p&gt;

&lt;h2&gt;
  
  
  Updates and New Features
&lt;/h2&gt;

&lt;p&gt;Let’s get to the good stuff! Check out the new features in &lt;a href="https://github.com/bitovi/react-to-web-component" rel="noopener noreferrer"&gt;R2WC v2&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript Support&lt;/li&gt;
&lt;li&gt;Simplified API&lt;/li&gt;
&lt;li&gt;Improved Syncing&lt;/li&gt;
&lt;li&gt;New npm Namespace&lt;/li&gt;
&lt;li&gt;Continued Support for React 16, 17, and 18&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  TypeScript Support
&lt;/h3&gt;

&lt;p&gt;We are elated to announce that R2WC has full TypeScript support! TypeScript has cemented itself as a staple in the dev community thanks to its enhanced type safety. Now you’ll be able to see warnings and make changes to your React components accordingly. &lt;/p&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%2Fbshew73xs3p5k0dyd0v6.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%2Fbshew73xs3p5k0dyd0v6.png" alt="Image showing TypeScript in use in React to Web Component" width="719" height="170"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Simplified API
&lt;/h3&gt;

&lt;p&gt;In R2WC v1, you had to pass in an instance of React and ReactDOM to the function call. Not anymore! We have added React and ReactDOM as peer dependencies for R2WC, with support for v16, 17, and 18 for React and ReactDOM. Now you can get started using R2WC even faster. &lt;/p&gt;

&lt;p&gt;Here’s how calling R2WC worked in v1:&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="nx"&gt;React&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;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ReactDOM&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;react-dom/client&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;// if using React 18&lt;/span&gt;
&lt;span class="c1"&gt;// import ReactDOM from "react-dom" // if using React 17&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;r2wc&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;react-to-webcomponent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;WebGreeting&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;r2wc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Greeting&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ReactDOM&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;customElements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;web-greeting&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;WebGreeting&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And here's how calling R2WC works in v2! It's that simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import r2wc from "@r2wc/react-to-web-component"

const WebGreeting = r2wc(Greeting)

customElements.define("web-greeting", WebGreeting)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Improved Syncing
&lt;/h3&gt;

&lt;p&gt;One of the most common issues reported to us about R2WC version 1.0 is that props were not being accepted by the created web component in production. This is because propTypes are generally removed from a React project when it is built for production.&lt;/p&gt;

&lt;p&gt;We are happy to announce that the internal functionality of R2WC no longer depends on propTypes! Instead, we have given you two ways to pass props to R2WC—as an array of prop names as strings or an object with key-value pairs being your prop names and their corresponding types.&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="nx"&gt;r2wc&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;@r2wc/react-to-web-component&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;GreetingProps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Greeting&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;FC&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;GreetingProps&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h2&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;Hello&lt;/span&gt;&lt;span class="p"&gt;,&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h2&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;


&lt;span class="c1"&gt;// Recommended&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;GreetingWebComponent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;r2wc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Greeting&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}})&lt;/span&gt;

&lt;span class="c1"&gt;// OR for simpler needs&lt;/span&gt;
&lt;span class="cm"&gt;/*
const GreetingWebComponent = r2wc(Greeting, { props: ["name"] })
*/&lt;/span&gt;

&lt;span class="nx"&gt;customElements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;greeting-wc&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;GreetingWebComponent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;R2WC now takes two parameters—a &lt;code&gt;ReactComponent&lt;/code&gt; and an &lt;code&gt;options&lt;/code&gt; object. The &lt;code&gt;options&lt;/code&gt; object has two keys - &lt;code&gt;shadow&lt;/code&gt; and &lt;code&gt;props&lt;/code&gt;. The shadow key can be one of two values - &lt;code&gt;“open" | "closed"&lt;/code&gt; - while the props key can either be an array of strings representing your prop names or an object with key-value pairs of your props and their types.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If the &lt;code&gt;props&lt;/code&gt; option is passed in as an array of prop names, R2WC will treat all these props as &lt;code&gt;strings&lt;/code&gt;. If passed in as an object, the keys represent the names of your props (camel cased), and the values can be one of &lt;code&gt;"string" | "number" | "boolean" | "function" | "json"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Here's an example of how the new &lt;code&gt;props&lt;/code&gt; option works in R2WC v2:&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="nx"&gt;r2wc&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;@r2wc/react-to-web-component&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ListProps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
  &lt;span class="na"&gt;items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;SimpleList&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;FC&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ListProps&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;items&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="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h3&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h3&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ul&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;item&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="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;li&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/li&amp;gt;&lt;/span&gt;&lt;span class="err"&gt; 
&lt;/span&gt;        &lt;span class="p"&gt;})}&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/ul&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ListWC&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;r2wc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;SimpleList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; 
    &lt;span class="na"&gt;shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;open&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="nx"&gt;customElements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-list&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ListWC&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="cm"&gt;/* in your index.html */&lt;/span&gt;

&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;my&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hobbies&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;['swimming', 'coding', 'reading blogs']&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/my-list&amp;gt;&lt;/span&gt;&lt;span class="err"&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  New npm Namespace
&lt;/h3&gt;

&lt;p&gt;The new version of R2WC lives in a &lt;a href="https://www.npmjs.com/package/@r2wc/react-to-web-component" rel="noopener noreferrer"&gt;new namespace on npm&lt;/a&gt; called &lt;code&gt;'@r2wc/react-to-web-component'&lt;/code&gt; and utilizes another package called &lt;code&gt;'@r2wc/core'&lt;/code&gt;, which contains the meat of the functionality for the new version.&lt;/p&gt;

&lt;p&gt;Our legacy version will still live in the namespace &lt;code&gt;'react-to-webcomponent'&lt;/code&gt; on npm and will also receive an update to utilize the new core. This means that it will also receive TypeScript support, freedom from propType issues, and benefit from the new syncing mechanism between attributes, properties, and props. However, to avoid breaking your current codebase, the legacy &lt;code&gt;'react-to-webcomponent'&lt;/code&gt; package will still take React and ReactDOM as parameters. See type definition below.&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;r2wc&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Props&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ReactComponent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ComponentType&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Props&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ReactType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ReactDOM&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ReactDOMRootType&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;ReactDOMRenderType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;R2WCOptions&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Props&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;CustomElementConstructor&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Continued Support for React 16, 17, and 18
&lt;/h3&gt;

&lt;p&gt;The new R2WC API from &lt;code&gt;'@r2wc/react-to-web-component'&lt;/code&gt; will support the current version of React (v18 as of the writing of this article) and versions 16 and 17. &lt;/p&gt;

&lt;p&gt;Our new package has been released in two versions. If you’re using React 16 or 17, you should use v1, &lt;code&gt;'react-to-webcomponent'&lt;/code&gt;. This version utilizes React’s older rendering API for mounting your &lt;code&gt;ReactComponent&lt;/code&gt; to the web component. &lt;/p&gt;

&lt;p&gt;If you’re on React 18, you can use v2 namespace &lt;code&gt;'@r2wc/react-to-web-component'&lt;/code&gt; and utilize React’s newer mounting mechanism of first creating a &lt;code&gt;root&lt;/code&gt; container that then renders the &lt;code&gt;ReactComponent&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try React to Web Component yourself!
&lt;/h2&gt;

&lt;p&gt;We are excited to have you all start using our new API and look forward to your feedback. Head on over to our &lt;a href="https://codesandbox.io/s/checklist-r2wc-example-y3nqwx" rel="noopener noreferrer"&gt;CodeSandbox&lt;/a&gt; to play with R2WC. Happy coding! 😁&lt;/p&gt;

&lt;h3&gt;
  
  
  What do you think?
&lt;/h3&gt;

&lt;p&gt;Drop into our &lt;a href="https://discord.gg/J7ejFsZnJ4" rel="noopener noreferrer"&gt;Community Discord&lt;/a&gt; and let us know what you think of &lt;a href="https://www.bitovi.com/open-source/react-to-web-component" rel="noopener noreferrer"&gt;React to Web Component&lt;/a&gt; v2. We’d love to hear your thoughts, help you troubleshoot, and see what you’re working on!&lt;/p&gt;

</description>
      <category>react</category>
      <category>webcomponents</category>
      <category>opensource</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
