releases // Aug 14, 2025

Release: Joystick RC3

Announcing the release of Joystick RC3.

Release: Joystick RC3

About 4 1/2 years ago, I set out to make Joystick the “Honda Civic of JavaScript frameworks.”

With RC1 last year, we crossed an important milestone: Joystick was no longer an experiment—it was stable, production-ready, and something you could bet your app (and sanity) on.

Since then, I’ve been heads-down polishing the edges, adding some long-awaited features, and making sure Joystick feels even closer to that “it just works” ideal.

Today, I’m excited to announce the release of Joystick RC3 (yes, I had to skip RC2 due to an npm hiccup—thanks, Microsoft).

If you want to skip ahead, you can install the latest version of Joystick with npm i -g @joystick.js/cli@latest (if you already have a Joystick app, just run joystick update from the root).

Joystick, but with a tan and more muscles

This is a massive release.

I intended to release it far sooner, but instead of rushing out the next release, I wanted to spend time getting the details right. Now, after over a year of work, we have what I think is a really solid, stable set of tools.

Because there is so much in this release, I wanted to give a quick overview and then talk about what comes next.

What’s new

Here’s a quick rundown of new features and improvements that you’ll find in the RC3 release:

  • Integrated tests – Run real tests against your app and database with joystick start --tests—no mocks, no fragile scaffolding.
  • Client-side cookies – Access and manage cookies in the browser via instance.cookies (powered by js-cookie).
  • HTML render method – Enables template literal syntax highlighting in your IDE for component markup.
  • Node caches – Create server-side, in-memory caches for faster querying and data handling.
  • Wrapper attributes – Assign arrays of custom attributes to component wrappers.
  • Track external processes – Keep tabs on process IDs spawned in development and clean them up automatically.
  • Head style tags – Add style tags directly via the res.render() head object.
  • Self-managed database binaries – Joystick will now download and run its own canonical binaries for MongoDB, PostgreSQL, and Redis when needed.
  • Custom copy paths – Specify additional project paths to include during builds.
  • Build environment supportjoystick build now fully respects environment flags, with production builds automatically minified.
  • Dynamic components – Render components on-demand for SPA-style navigation without the overhead.
  • Server-side caching for SSR – Cache translations, index.html, components, and email templates in memory for faster renders.
  • Improved session handling – Reduced unnecessary database usage for session creation & validation.
  • Context-aware middleware – Avoid unnecessary middleware calls by splitting built-ins between UI and API routes.
  • Smarter dependency mapping – Handle case changes in file paths without breaking rebuilds.
  • Bug fixes across the board – From global state initialization, CSS & SVG re-rendering, and translation paths to upload validation, input checks, and Windows build compatibility.

Coming soon: Push

I’ve been teasing Push, the deployment service for Joystick for awhile now. With Push, deployments are dirt simple: just cd into your project locally and run joystick push -d [domain]. Everything else is handled via the Push dashboard.

With this release, support for the joystick push command has been added. I still have a few things I’d like to tune before I open the floor gates, but I’m anticipating a late-August/September release for this.

What’s next

Now my eyes are firmly on 1.0. Due to the NPM hiccup, I’m pretty eager to get off the release candidate track so I can start rolling out features, fixes, and improvements faster.

The good news: Joystick in its current state is worthy of stable production use (it’s powering all apps and websites that I currently work on). Most of the work I want to do on 1.0 involves implementing robust testing (at the framework level) and getting a few edge-case bugs closed out.

I’m overdue for a “what I learned” post for Joystick, so keep an eye out for that on the horizon, too.

Onward,
Ryan

Written By
Ryan Glover

Ryan Glover

CEO/CTO @ CheatCode