3 ms·
Show HN: Joystick – A Full-Stack JavaScript Framework
Howdy folks. My name is Ryan. I've been building Joystick for the last three years. A few weeks back, I shipped the RC1 release.
tl;dr Joystick is a full-stack JavaScript framework. It combines a component framework with a batteries-included Node.js back-end into one wholistic system. It also has a built-in testing framework so you can do TDD out of the box. It supports MacOS, Windows, and Linux (please file bug reports on Github so I can get them sorted).
My goal is to get a final 1.0 out by the Fall/Winter. After that, the core APIs will be frozen with only new features being added so you don't have to worry about wasting time on surprise refactors (i.e., I won’t be changing how you build your app—just under the hood performance/security stuff).
---
Joystick has been a ~3 year labor (following ~2 years of research/prototyping). I started work on it because I was using the Meteor JavaScript framework as the foundation for apps I was building with students and for clients as part of my old company, Clever Beagle (before that, I wrote tutorials for Meteor as The Meteor Chef).
When Meteor started to fall out of favor/got sold off, I was looking around for something comparable but nothing took. The next closest option was...Next, but it was missing a lot of what drew me to Meteor. Dissatisfied, I started to ask "could I build my own framework?"
Fast-forward a couple of years and the answer was yes. I initially planned on shipping with support for React, Vue, etc., but I noticed a trend toward their APIs becoming more, not less, complicated (simple on the surface, complex once you get into implementation details). I sketched out a component API akin to React 1.0 (h/t Jordan Walke), adding in some missing features that I constantly had to reinvent the wheel to implement on each app (e.g., URL access, data-fetching, etc). Once I had a working prototype: I didn't look back.
As the idea took shape, I started to think about the idea of building an end-to-end stack for shipping apps with JavaScript (a proper response to Ruby on Rails for JavaScript). There were others that had tried, but again, their APIs were lacking that sweet spot I was looking for.
Once I had a solid back-end to front-end combo, I moved on to deployments. Having been burned relentlessly by deployments in the past (culminating in my K8S cluster being decimated by a forced cluster upgrade at DigitalOcean), I decided to go back to basics and see what old tech was available. I was able to get a working deployment using a combo of HAProxy and systemd scripts (which was and continues to be remarkably stable). Instead of using Docker, I do vanilla bootstrapping on the box and have deployments set up to go out to three providers: DigitalOcean, Vultr, or Linode. That service is called Push [1] and is currently in private beta.
Next in my sights is CSS. I'm technically a UI designer (I only started doing JS development because I was tired of building static mockups) and have wanted to build a CSS framework for years. I love the style of Tailwind but the utility class stuff gives me nightmares (both from a maintenance perspective and the thought of future developers being clueless about how to actually write/maintain CSS). That framework will be called Mod [2] and is dropping this summer. It will be responsive, component-based, and feature a vanilla CSS/JS option as well as components built as Joystick components.
---
That's all for now. Drop questions below (see the FAQ first) and I will answer over the next couple of days. If you want to send something privately (e.g., hate mail), just email business@cheatcode.co.
Ryan
[1] https://cheatcode.co/push https://cheatcode.co/push
[2] https://cheatcode.co/mod https://cheatcode.co/mod
- rglover 3y agoHey folks, author of Joystick here. A quick FAQ if you're curious: > Another framework, seriously? Yes. If you dig it, use it. If you don't, that’s cool, too. > Why would I use this and not React/Vue/Svelte/etc? Because it makes sense to you. Ergonomically, I designed Joystick components to be a beginner-friendly alternative to React (I worked with it from 2015-2021 and got tired of the constant API rug pulls). Joystick will either "click" for you or it won't. Feature-wise, it's far more robust than React while maintaining the same behavior (e.g., reactivity via state, passing props, etc). Performance-wise, I'd currently call Joystick "good enough for most stuff" and have plans to focus in on this more deeply as the framework reaches 1.0. > Why not web components? Two reasons: my OCD wouldn't let me do the dashed component names (along with forcing developers to provider a name) and the Shadow DOM thing was a brain teaser when I tried to use web components during the early prototyping stages of Joystick’s components. I would love to see a future version of Joystick use web components under the hood, but as of today: it's a "close but no cigar" for me. > Why not TypeScript? I love the idea of having types in JavaScript, I hate the idea of only being able to get that via a superset controlled by a corporation (however aligned with OSS values they might be). I think TypeScript is a brilliant idea, horribly implemented. I want Joystick to be as standards-aligned and easy to pick up as possible and TypeScript breaks both of those rules. As of today, TypeScript is a no-go for me in favor of vanilla JS. > Why would I trust an indie, solo-developer framework? Don't. Or do. I'm indifferent as long as you find value in what I've created. I want to build a solid business around Joystick (see the site for how) to support my efforts. That's the best guarantee I can offer. Short of getting rolled by a city bus (i.e., The Bus Factor), my sights are on 10 years out. In the words of Townes Van Zandt "I'll be here in the morning." > Why your own license? I love the idea of open source, but I've seen far too many pure-hearted, talented developers get run into the ground by it. I don't want to repeat their fate. I'd like to be able to earn a living from my work on Joystick beyond a job, sponsorships, or client work. To protect that as best as I can with limited resources, I wrote the SAUCR License (Source Available Under Commercial Restriction) [1]. It's designed as a happy medium: you can audit the source code to your heart's content and use it 100% free to build your apps, but reappropriating it is a no-go. [1] https://saucr.org https://saucr.org