<?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: Jose Quintero</title>
    <description>The latest articles on DEV Community by Jose Quintero (@josejuanqm).</description>
    <link>https://dev.to/josejuanqm</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%2F115086%2F2aaba34c-8bc5-43ba-aa2f-9b94b74594d8.jpeg</url>
      <title>DEV Community: Jose Quintero</title>
      <link>https://dev.to/josejuanqm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/josejuanqm"/>
    <language>en</language>
    <item>
      <title>I built a framework that lets you write native apps with YAML and Lua</title>
      <dc:creator>Jose Quintero</dc:creator>
      <pubDate>Mon, 23 Feb 2026 23:56:02 +0000</pubDate>
      <link>https://dev.to/josejuanqm/i-built-a-framework-that-lets-you-write-native-apps-with-yaml-and-lua-38lf</link>
      <guid>https://dev.to/josejuanqm/i-built-a-framework-that-lets-you-write-native-apps-with-yaml-and-lua-38lf</guid>
      <description>&lt;p&gt;I've been doing native mobile development for a while and one thing that always bugged me was the tradeoff between cross-platform tools and actual native UI. Flutter and React Native solve the "write once" problem but you're not really getting native components. And writing everything twice in Swift and Kotlin is just exhausting.&lt;/p&gt;

&lt;p&gt;So I built Melody. You define your UI in YAML, write your logic in Lua, and it renders real SwiftUI on Apple platforms and Jetpack Compose on Android. No web views, no bridge, no JS runtime.&lt;/p&gt;

&lt;p&gt;Here's what a full screen looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;screens&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;home&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt;
    &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Home&lt;/span&gt;
    &lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;

    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;text&lt;/span&gt;
        &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'Tapped&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;..&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;state.count&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;..&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;times'&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
        &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;24&lt;/span&gt;
          &lt;span class="na"&gt;fontWeight&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bold&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;button&lt;/span&gt;
        &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Tap me&lt;/span&gt;
        &lt;span class="na"&gt;onTap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;state.count = state.count + 1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That's it. Change the YAML, hot reload picks it up over WebSocket, and the app updates instantly.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why YAML and Lua?
&lt;/h2&gt;

&lt;p&gt;YAML handles the layout. It's declarative, easy to read, and easy to diff in git. Lua handles the logic — it's tiny, fast, and embeddable. No npm, no bundler, no node_modules. The whole dev experience is just editing files and saving them.&lt;/p&gt;
&lt;h2&gt;
  
  
  What's in the box
&lt;/h2&gt;

&lt;p&gt;There are 23+ built-in components that map directly to native views — text, buttons, stacks, lists, grids, forms, charts, toggles, pickers, sliders, inputs, and more. Styling is inline in a &lt;code&gt;style&lt;/code&gt; block with support for padding, colors, shadows, border radius, animations, etc. You reference theme colors with &lt;code&gt;"theme.colorName"&lt;/code&gt; and they resolve automatically including dark mode.&lt;/p&gt;

&lt;p&gt;State is reactive. You assign to &lt;code&gt;state.key&lt;/code&gt; in Lua and only the components that reference that key re-render. No diffing, no virtual DOM.&lt;/p&gt;

&lt;p&gt;Networking is built in with &lt;code&gt;melody.fetch()&lt;/code&gt; which is non-blocking under the hood using coroutines, so your Lua reads linearly but doesn't freeze the UI. There's also WebSocket support, persistence, cross-screen events, timers, and clipboard access.&lt;/p&gt;
&lt;h2&gt;
  
  
  Navigation
&lt;/h2&gt;

&lt;p&gt;Navigation is path-based with dynamic route params:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;profile&lt;/span&gt;
  &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/profile/:id&lt;/span&gt;
  &lt;span class="na"&gt;onMount&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;local res = melody.fetch("https://api.example.com/user/" .. params.id)&lt;/span&gt;
    &lt;span class="s"&gt;if res.ok then state.user = res.data end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Tab bars, sheets, alerts, and full navigation stacks are all supported. Tabs even adapt between sidebar on iPad/Mac and tab bar on iPhone with a single config.&lt;/p&gt;
&lt;h2&gt;
  
  
  Custom components
&lt;/h2&gt;

&lt;p&gt;Custom components work like you'd expect — define once in YAML with props, use them anywhere:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;components&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;UserCard&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
      &lt;span class="na"&gt;avatar&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;stack&lt;/span&gt;
        &lt;span class="na"&gt;direction&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;horizontal&lt;/span&gt;
        &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;spacing&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;12&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;padding&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;16&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
        &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;image&lt;/span&gt;
            &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;props.avatar&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
            &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;width&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;48&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;height&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;48&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;borderRadius&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;24&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;text&lt;/span&gt;
            &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;props.name&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Plugins
&lt;/h2&gt;

&lt;p&gt;Plugins let you extend Melody with native code. A plugin is a git repo with Swift and Kotlin implementations that register functions into Lua under their own namespace. You declare them in &lt;code&gt;app.yaml&lt;/code&gt; and run &lt;code&gt;melody plugins install&lt;/code&gt;. Useful for things like keychain access, analytics, or anything that needs platform APIs.&lt;/p&gt;
&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;p&gt;Install the CLI with Homebrew, scaffold a project, and run it:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew tap josejuanqm/tap
brew install melody
melody create MyApp
cd MyApp
melody dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It generates the Xcode project and Android boilerplate for you. The dev server handles hot reload.&lt;/p&gt;

&lt;p&gt;I'm currently using Melody to build a real app so this isn't just a toy — it's been tested against real use cases with networking, auth flows, dynamic lists, and complex navigation.&lt;/p&gt;

&lt;p&gt;It supports iOS, iPadOS, macOS, tvOS, visionOS, and Android. &lt;/p&gt;

&lt;p&gt;Web, Windows, and Linux support is planned and I'd love to work on it if theres traction.&lt;/p&gt;

&lt;p&gt;The repo is here: 

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/josejuanqm" rel="noopener noreferrer"&gt;
        josejuanqm
      &lt;/a&gt; / &lt;a href="https://github.com/josejuanqm/melody" rel="noopener noreferrer"&gt;
        melody
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A declarative UI framework that interprets YAML configuration and Lua scripting into fully native SwiftUI and Jetpack Compose — no web views, no hybrid layers.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/40b4c2a601799c4960a7d4acce5885c99e37ce452346235d29aa1daa42acffd1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f694f5325323031372532422d626c7565"&gt;&lt;img src="https://camo.githubusercontent.com/40b4c2a601799c4960a7d4acce5885c99e37ce452346235d29aa1daa42acffd1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f694f5325323031372532422d626c7565"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/45ec5eee52ca658f5db9164cce9755e17ad9a9e22e250013d8d9d0240adbee7b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f695061644f5325323031372532422d626c7565"&gt;&lt;img src="https://camo.githubusercontent.com/45ec5eee52ca658f5db9164cce9755e17ad9a9e22e250013d8d9d0240adbee7b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f695061644f5325323031372532422d626c7565"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/ffc5ba0fa4e7a38aa6b87889d57a929f674ac289bbfd4bd44af3c95181162838/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d61634f5325323031342532422d626c7565"&gt;&lt;img src="https://camo.githubusercontent.com/ffc5ba0fa4e7a38aa6b87889d57a929f674ac289bbfd4bd44af3c95181162838/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d61634f5325323031342532422d626c7565"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/f51d885fbb9dd6308bcf992608adefd4dc25f47cda1d768294d7aa0f107b6950/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f74764f5325323032362532422d626c7565"&gt;&lt;img src="https://camo.githubusercontent.com/f51d885fbb9dd6308bcf992608adefd4dc25f47cda1d768294d7aa0f107b6950/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f74764f5325323032362532422d626c7565"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/3b27a1d42e16c13864d22c9c7bf4b10a6ea286b18e789b483c5372a2b4a6b71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f766973696f6e4f53253230322532422d626c7565"&gt;&lt;img src="https://camo.githubusercontent.com/3b27a1d42e16c13864d22c9c7bf4b10a6ea286b18e789b483c5372a2b4a6b71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f766973696f6e4f53253230322532422d626c7565"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/130d9cf53a1da2ad20ffe55b55006d5fddbc3c8c768378d8dfb0ba2ff8e762e8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f416e64726f69642d333443373539"&gt;&lt;img src="https://camo.githubusercontent.com/130d9cf53a1da2ad20ffe55b55006d5fddbc3c8c768378d8dfb0ba2ff8e762e8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f416e64726f69642d333443373539"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/53c0574a432941af6993fa6ac847bb3cbbc08516415ebc8f952e7ed711a20d55/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c75612d352e342d707572706c65"&gt;&lt;img src="https://camo.githubusercontent.com/53c0574a432941af6993fa6ac847bb3cbbc08516415ebc8f952e7ed711a20d55/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c75612d352e342d707572706c65"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Melody&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Build native apps with YAML and Lua. One codebase, every Apple platform + Android.&lt;/p&gt;

&lt;p&gt;No JSX, no bridge, no bundler — describe your UI in YAML, write your logic in Lua, and Melody renders it as real native UI. SwiftUI on Apple platforms, Jetpack Compose on Android.&lt;/p&gt;

&lt;div class="highlight highlight-source-yaml notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-ent"&gt;app&lt;/span&gt;:
  &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;MyApp&lt;/span&gt;
  &lt;span class="pl-ent"&gt;theme&lt;/span&gt;:
    &lt;span class="pl-ent"&gt;primary&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;#6366f1&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;

&lt;span class="pl-ent"&gt;screens&lt;/span&gt;:
  - &lt;span class="pl-ent"&gt;id&lt;/span&gt;: &lt;span class="pl-s"&gt;home&lt;/span&gt;
    &lt;span class="pl-ent"&gt;path&lt;/span&gt;: &lt;span class="pl-s"&gt;/&lt;/span&gt;
    &lt;span class="pl-ent"&gt;title&lt;/span&gt;: &lt;span class="pl-s"&gt;Home&lt;/span&gt;
    &lt;span class="pl-ent"&gt;state&lt;/span&gt;:
      &lt;span class="pl-ent"&gt;count&lt;/span&gt;: &lt;span class="pl-c1"&gt;0&lt;/span&gt;

    &lt;span class="pl-ent"&gt;body&lt;/span&gt;:
      - &lt;span class="pl-ent"&gt;component&lt;/span&gt;: &lt;span class="pl-s"&gt;text&lt;/span&gt;
        &lt;span class="pl-ent"&gt;text&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;{{ 'Tapped ' .. state.count .. ' times' }}&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;
        &lt;span class="pl-ent"&gt;style&lt;/span&gt;:
          &lt;span class="pl-ent"&gt;fontSize&lt;/span&gt;: &lt;span class="pl-c1"&gt;24&lt;/span&gt;
          &lt;span class="pl-ent"&gt;fontWeight&lt;/span&gt;: &lt;span class="pl-s"&gt;bold&lt;/span&gt;

      - &lt;span class="pl-ent"&gt;component&lt;/span&gt;: &lt;span class="pl-s"&gt;button&lt;/span&gt;
        &lt;span class="pl-ent"&gt;label&lt;/span&gt;: &lt;span class="pl-s"&gt;Tap me&lt;/span&gt;
        &lt;span class="pl-ent"&gt;onTap&lt;/span&gt;: &lt;span class="pl-s"&gt;|&lt;/span&gt;
&lt;span class="pl-s"&gt;          state.count = state.count + 1&lt;/span&gt;
&lt;span class="pl-s"&gt;          melody.log("count is now " .. state.count)&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;That's a full screen. Change the YAML, hot reload, see it instantly.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;I wanted to build apps fast without fighting tooling. React Native…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/josejuanqm/melody" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;





&lt;p&gt;Would love to hear any feedback or questions.&lt;/p&gt;

</description>
      <category>swift</category>
      <category>kotlin</category>
      <category>mobile</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
