Ruby Native apps are running on 100,000+ devices
And how Herb, now bundled with Rails 8.2, keeps the native apps from breaking.
All of Joe Masilotti's writing, covering Hotwire Native, Ruby on Rails, and running a thriving independent business without sacrificing family time.
And how Herb, now bundled with Rails 8.2, keeps the native apps from breaking.
Yesterday Ruby Native launched. Today the first customer app went live. And the developer never opened Xcode.
Ship your Rails app to the App Store without opening Xcode. $100 off through May 18.
The five rules I'd hand to my past self to save months of mobile-prep refactoring.
And didn't open Xcode once.
Six months with AI and the code got easier. But something else got more difficult.
Two podcast appearances, zero polished takes, and a whole lot of thinking out loud.
What I learned supporting ERB, React, and Vue from a single Ruby gem. And how I keep it from breaking with automated iOS tests.
Ruby Native isn't a traditional SaaS. So it shouldn't be priced like one.
Ruby Native turns your Rails app into an iOS app. No Xcode required.
My son got a day off from school. I got a reminder of why I chose this life.
A practical, step-by-step guide to submitting your first Hotwire Native app. From setting up your developer account to hitting Submit for Review.
And what I tell my clients when they ask which framework to use for their Rails business.
Understand the benefits and tradeoffs of native, React Native, PWAs, Hotwire Native, and Ruby Native.
Why I threw away 20,000+ lines of working code and started over with nothing.
A new podcast with Colleen Schnettler about building independent businesses on your own terms in the age of AI.
What happens when code becomes the easy part? Excitement, dread, and what this means for my solo-run business.
The full flow from HTML paywall to real-time success message, and how a single UUID is all it takes to tie it together.
Native payment sheets on iOS and Android. Subscription data in your Rails database.
For the first time, I built things that can stand on their own.
Practical ways to make your Hotwire Native app feel right at home on iOS and Android.
From a blank Xcode project to a working Hotwire Native prototype.
I made $6,000 in product sales last week and it changed how I think about my business.
Discounts on my book, Bridge Components PRO, Jumpstart Pro, and more.
Native push notifications are tricky because there's a ton of moving pieces to get right. Here's my step-by-step process to get them working in your Hotwire Native apps.
Links to articles on debugging Hotwire Native, deep links, Google Sign-In, and more from other Hotwire Native developers.
One great question in office hours led me to delete a whole class.
And an official GitHub Project to share what components are coming next.
Yesterday I hosted my first live stream on Substack. And it was kind of a failure.
Apple just announced the first preview release of Swift for Android. Does this mean we can finally build mobile apps with only one native language?
How to handle authentication across web, iOS, and Android. All without writing tons of native code or adding new API endpoints.
How a small service worker unlocks offline mode for your Rails-powered mobile app.
Reuse your existing HTML, CSS, and business logic to go from web to the app stores faster than ever.
Introducing a new API for communicating with components. And one breaking change.
Perfect picks for pre-readers that make dining out easier (and more fun).
Lazy tabs, animated replace actions, custom error views, and more.
Introducing official package support for my Bridge Components library on web, iOS, and Android.
My book is available for sale on Amazon and at your local book store.
I moved my newsletter to Substack. Here's why and what that means for you.
My Rails World keynote recording is live - watch how we're making native apps possible for small teams.
Hotwire Native takes the Rails World 2025 keynote stage, plus updates on Ruby Friends for Android, native-feeling modals, and community projects.
Hotwire Native workshop recording, new bridge component tutorial, and Ruby Friends v1.2 with QR scanning, Universal Links, push, and Wallet integration.
250+ Rubyists have already joined. Want to make a new friend next time you say "hello world"?
Reflecting on RailsConf chats, building Ruby Friends, and learning new things in the Ruby community!
Join me at RailsConf for a Hotwire Native workshop and a book meet-up later!
A quick update on the latest Hotwire Native releases and a countdown to RailsConf.
Apple's iOS 26 debuts Liquid Glass, enhancing Hotwire Native apps with no code changes required!
Summer kicks off in Portland with a new Hotwire Native LIVE episode and a book sale!
Join me Thursday for Hotwire Native Live to build features and get coding tips in real time!
A two-line fix for web content rendering "through" your transparent top and bottom bars (navigation bar and tab bar).
Use HotwireTabBarController to configure a native UITabBar to switch between contexts in an iOS app.
Hotwire Native means maintainable software - yes or no? Also, a new speaking announcement.
Get rid of duplicate page titles and make your app feel more native with a Tailwind CSS custom variant.
Set up a remote path configuration to dynamically render pages as modals, helping isolate tasks and align with native UX patterns.
Make your Hotwire Native apps feel more native with dynamic screen titles - all from your Rails codebase.
Hotwire Native v1.2 launches with two exciting updates: new tab bar components and a fresh demo app!
I've launched a new Hotwire Native tutorial series, updated my bridge library, and will speak at RailsConf 2025!
Announcing a collection of iOS and Android bridge components to drop into your Hotwire Native apps, all extracted from real-world applications.
New bridge components are here, my book is finished, and I chatted with Dave Thomas about mobile MVPs!
Two new chapters from my book on Hotwire Native, my recent podcast recordings, and some highlighted community content.
Curious about my new book? Here's a chapter-by-chapter breakdown of what you'll learn, with screenshots.
Learn how to build mobile apps powered by Ruby on Rails. The beta release of Hotwire Native for Rails Developers is here.
This release simplifies configuration, resolves bugs, and introduces new features, making it easier to build web-first native apps with Rails.
After a decade of building Hotwire Native apps, I’m sharing my top 10 tips to help you keep logic on the server and make hybrid app development even easier.
Big news: Turbo Native is officially retired in favor of Hotwire Native. Plus, I’m back from parental leave and sharing book updates on Hotwire Native for Rails Developers.
How I crammed 12 months of work into 5 and, as expected, burned out hard.
Level up your Turbo Native apps by moving behavior to the server with remote path configuration.
Three different ways to handle authentication in Rails: from quick gem installs to custom-built recipes and flexible generators.
How to set up pull-to-refresh in Turbo Native apps for iOS and Android via path configuration rules.
A quick-start guide to building Turbo Native apps for Ruby on Rails developers, no Swift or Kotlin experience necessary.
A cleaner, easier to read approach to nested data attributes for Turbo and Strada when creating anchor tags in Rails.
Explore Hotwire Native: a game-changer for launching your Rails app on iOS and Android, blending speed and simplicity with real success stories.
The approach I follow for every Hotwire Native app I build, including which app store to submit to first and how to prioritize work.
Rails 7.1 introduced strict locals which we can use to make our partials safer and easier to work with.
The story of Daily Log, a web and iOS app that I built and launched to the App Store in 7 days.
A step-by-step Rails and iOS guide to integrating Strada with your Turbo Native app powered by Turbo Navigator.
Turbo Native gives Rails developers superpowers. Learn how in the recording of my Rails World talk in Amsterdam.
Turbo Navigator is making progress to merge into turbo-ios, reducing boilerplate code and introducing new features.
A first look at Strada, the last missing piece of Hotwire. Let's explore how it unlocks native components driven by the web in Turbo Native apps.
Deciding when to go native and when to use web views in Hotwire Native apps, from experience.
How I recognize when I need a break as a solopreneur and the benefits of taking time off.
App Store Review Guidelines to watch out for when submitting your own apps to the App Store.
Learn how to add a native tab bar to a Turbo Native app. And some hints for fixing common gotchas.
Build a native UIMenu from existing HTML elements on your server, powered by a Stimulus controller.
Wire up your iOS app to call Swift code from events triggered in Stimulus controllers, like native share sheets, push notifications, and more.
Learn how to handle data-turbo-confirm in your iOS app so you can render native Swift alerts directly from your Rails code.
A low-maintenance approach to interacting with Stimulus controllers from native Swift code.
A copy-pasteable code snippet to bring a little Rails magic to your iOS app.
Learn two ways to conditionally show web content in your Turbo Native app. One quick and dirty and one cache-friendly.
If you're a Ruby or Rails developer looking to dive into iOS development, this crash course on Swift is exactly what you need! Ideal for anyone interested in Turbo Native development.
How to attach a Safari debugger to the simulator with some tips on dealing with "No Inspectable Applications".
And I’m not returning until I know that opening the app will make me feel better, not worse. Here's how to keep in touch until then.
Every contribution to the RailsDevs codebase will now reward $25 or more to the developer.
How crossing more items off my to-do list somehow makes it fill up even faster.
How I decide when to double down and when to move on from a new idea.
Hotwire Native is a game changer for small teams. Here's how folks are leveraging native SDKs to enhance their hybrid apps.
How a single message kick started my consulting business, personal brand, and niche expertise.
Too many days last year ended with me feeling like "I didn’t get anything done." Here's how I'm hoping to fix that in 2023.
I use online communities to ask for help, offer advice, and keep up to date with the latest trends. Here are 10+ of my favorites.
The podcasts I listen to every week – mostly about Ruby on Rails and bootstrapping.
New record! I ported a client’s Ruby on Rails app to iOS and went live in the App Store in 7 weeks.
TIL about ActiveSupport::OrderedOptions and config_for. Here's how I'm using them to configure my Rails app.
I was on another podcast! We talked about building RailsDevs in public, challenges I have faced, and the technical decisions I am proud of. Also, a bit about my upcoming workshop.
My approach on how I keep my test fixtures manageable, sane, and obvious. Not hard and fast rules, but guidelines to help you implement the same in your app.
It is not OK that RailsDevs represents 180+ developers but fewer than 10 identify as women. This is how I'm learning to create a more inclusive platform.
I built an MVP in one month and grew the product for a year. But now it’s time to pass the torch. It’s official, I sold Mugshot Bot! Here’s how it all went down.
How to build hybrid iOS apps with Turbo and Ruby on Rails. An ongoing series covering authentication, the JavaScript bridge, architecture, and more.
Tips and tricks I’ve picked up over the years that help make the app feel more native and development easier.
Authenticated requests, how to share cookies, and Devise-specific helpers to implement native authentication.
The JavaScript bridge is the intersection of client and server. It enables passing messages between the two worlds without waiting for someone to tap a link.
How to install Turbo in Rails 6, custom iOS form handling, and web-based authentication in hybrid apps.
Part 2 covers visit actions, path configuration, error handling, native view controllers, and more with Turbo iOS.
Hybrid mobile apps powered by Turbo: Basecamp's not-so-secret formula for producing large scale apps with small teams.
10+ of my favorite techniques that I've picked up over the past few years of testing Swift code.
5 lines of code go a long way in making your test names much more readable.
Learn how to avoid force unwrapping optionals in your test suite without any trade-offs.
Learn how to "set" a computed property by taking advantage of the internals of WKWebView.
How to verify which messages a Swift mock receives with less boilerplate and no third-party code.
How to reduce boilerplate by abusing inheritance to create mocks in Swift.
Our own DI without third-party libraries. Build a robust, extendible micro-framework you can use in all your apps.
Feature tests: three techniques to try before reaching for XCUITest.
A single Rails route gets you what you need, but watch out for a small gotcha.
A tiny tip to make regexes with multiple slashes a bit more readable in Ruby.
Yesterday I was the #5 product of the day on Product Hunt. Here's what I learned.
A month ago I ran into a problem. One week later I solved it. And three weeks after that I turned it into a (tiny) business.
It’s been a busy month! I’ve gone all in on Tailwind CSS, launched a new product, and started building a newsletter. Here’s what’s been keeping me busy.
Embedding a tiny HTTP server inside our test suite opens up a world of opportunity.
A step-by-step journey on how I refactored an app to handle any number of sheets with ObservableObject and an enum.
How I built a landing page and redesigned my blog in Tailwind CSS over the weekend. And why I’ll never go back.
BGA, TTS, Steam?! This guide is for anyone who wants to play board games online with your friends but isn’t sure where to start.
Ideas and best practices for real world Swift testing, including protocols, dependency injection, and Equatable.
Deck-builders, card games, tile placement, and more. Some of my favorite board games to play with only two players.
1249 records in prod. 3775 records in dev. Something's not right.
Learn how to test UIAlertController with protocols, mocks, and dependency injection. No swizzling required.
How our small team supports 600k+ monthly users on four platforms with Turbolinks.
What has Joe been up to since his last post?
Waiting is hard, and waiting in Xcode is no exception. Learn a new approach with classes introduced in Xcode.
Apple has officially sent me a cease and desist letter to take down my host of the XCTest Documentation.
Earlier this month week I spoke on the SwiftCoders podcast. The host and I talked about getting started in Swift, and, obviously, testing.
A type-safe approach to testing dictionaries in Swift with clean failure messages.
Learn how to stub network data when running UI Tests with the magic of some "secret" XCTest APIs.
Shave time off your test suite by flattening asynchronous tests. Learn how to mock more of URLSession to test response data, network errors, and status codes.
All the stuff I'm enjoying right now: iOS apps and games, Mac productivity apps, card games, and programming books.
Not owning a class doesn't mean you can't mock it! Learn how to unit test URLSession with Swift and protocol-oriented programming.
Last week I spoke on the Concepts in Code podcast. The cohosts and I chatted about testing in Swift, TDD, and pair programming.
How to extract XCTest helper methods and keep sane failure messages.
Answers to common "How do I test this with UI Testing?" questions. A quick reference for everything from tapping buttons to reordering table cells.
Generic querying syntax, first-class support, and native asynchronous assertions make for a great TDD experience on iOS.
Flatten out your asynchronous tests with and_do_block().
Better dependency injection on iOS with NS_UNAVAILABLE.
How to navigate around an lightly documented but powerful framework in Xcode 12.
Create and modify dates by taking advantage of iOS 8's NSCalendar APIs.
Build and manipulate complex URLs with NSURLQueryItems. No more ugly string concatenation to append query items to URLs.
Use familiar HTML testing tools to test drive PDF generation by combining wicked_pdf with some asset pipeline knowledge.