Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: Solo Dev Stack of 2022?
40 points by jstummbillig on Oct 1, 2022 | hide | past | favorite | 81 comments
I am mostly interested in what ties together backend and frontend, the later necessarily including web + android/ios, in the most time effective way possible in 2022.

Things I am looking for:

* The web/app one man show stack. What's the most reasonable way to get there, alone, assuming you start from scratch with now expectations about the tech you are going to use.

* Flexibility, initial dev speed and maintainability. I am looking for a stack that can work reasonably well for websites and apps, on the web + android + ios, or any subset of those. The less redundancy and additional parts to learn to make it all work, the better.

Things I am willing to give up:

* App speed and performance, specially on the client side. webviews are okay, if it eases the dev process.

* Matureness. I assume if something had already won in this space it would be apparent.

* Beginner-friendliness. I don't need any amount of no code, and I don't care if it's easy to pick up (but if it's not I do expect something tangible in return for my additional brain cells. I am not looking for something exotic, for the sake of being exotic. If there's two solutions that check all the other boxes equally, for this particular exercise, I am going to pick the one that's simpler.)

Things I am currently looking at include Flutter and Meteor, and maybe Rails with Hotwire (as soon as Strada is released). There's no need for all the required tech to fly under one name, but I'll probably grow increasingly suspicious the longer the list grows.

EDIT: If you take the time to respond, that's super cool, but if you are actually trying to answer the question, please be specific and point at the individual components.

Rails (if you like Ruby).

Buy this: https://jumpstartrails.com/

Then also use either TailwindUI or Flowbite.

~$400 later, you probably saved 100+ hours of boilerplate setup, and you can pump out realtime web apps with a reliable tech stack and can fairly easily port to mobile with Turbo-iOS/Android.

You don't need to wait for Strada, they've said it's just going to be some additional helpers. You can build mobile apps now with Rails and Turbo.

+1 for rails.

While Strada isn’t fully released yet, it seems like it won’t require much additional effort to integrate! [1] the maturity is a plus, and having a feature-equivalent web app as a bonus is pretty sweet.

[1] https://news.ycombinator.com/item?id=33038485

Super interesting write-up, thanks


We need to get Tailwind and others to provide imba.io components. I feel weightless using your framework, but my design chops are still finger-painting level. I've attempted to 'be inspired by' these components and visually recreate them, but the time saved with having them premade would change life itself for me.

Can you make a case for imba.io in this context? How does it bridge to android/ios?

This is what I am using right now. It is quick for prototype. Saved a lot of time.

I dont really like the Admin panel. It has performance issues when we have more than 100k rows of data (due to the limitation of Administrate). We had to customize it to make it run normally.

Admin panel gems in Rails world have bad UI with a lot of problems.

Yeah, we're going to replace Administrate sometime soon with our own admin. Most of the admin gems don't do a great job surprisingly.

Curious, how do you feel about admin frameworks vs admin generators/scaffolding? I wonder how much of the let down of most admin frameworks (with DSLs) is just because of how damn hard it is to build something that can meet all those use cases, versus just having boiler-plate killing scaffolding tools that you can then modify the code of however you want.

If you like Python, I can recommend this:

  - Start with SaaS Pegasus https://www.saaspegasus.com/
  - Deploy to Heroku
  - Get comfortable with "X-in-HTML" frameworks - Tailwind, HTMX, Alpine
  - Deliver your mobile app as a PWA https://web.dev/what-are-pwas/
Opinionated thoughts -> https://davidkell.substack.com/p/davids-opinionated-guide-fo...

(Nowadays I'd replace Turbo/Stimulus -> HTMX/Alpine)

Special thanks to Cory for his excellent guides on Django + JS: https://www.saaspegasus.com/guides/

Thanks for the shout out David!

Not surprisingly, this is also the stack I'd recommend for a solo developer, though I will also sprinkle in React as it makes sense (not as an SPA / decoupled app, but instead embedded in Django as I describe in the JS guides).

Also, I'm pretty agnostic on CSS. Tailwind is nice but I'd use it with a UIkit (Pegasus uses https://daisyui.com/) or TailwindUI. I also think Bootstrap, Material and Bulma are totally fine options if you aren't interested in laying out everything with your own flexes and grids.

Last time I checked push notifications were a bit iffy with PWAs. Has that been solved?

i have a dog in this fight, but I would recommend whatever back-end you are most comfortable with that addresses the domain you are dealing with best + https://htmx.org

you basically have HTML++, very gentle learning curve, you can leverage your back-end (which is where you are going to add the most value) and just get on with it without a huge investment in front end architecture

i am the creator of htmx

I was similarly going to recommend HTMX — think the ease-of-use and beginner-friendliness is exactly what OP is looking for. (The Rails comment mentioning Turbo is basically the same thing as HTMX, so feels like a few of us are in agreement.)

How will htmx help to inclusively solve the app side of things? Given the objective, hotwire seems like the simpler, more inclusive way to solve this, but I would be happy to see you argue otherwise.

I have the same question! Htmx is fantastic but I really wish there was an equivalent of strada/turbo-ios in the django/htmx world. I am not an app developer so in the past have just gone the pwa/add to home screen. I guess if I absolutely had to do an app now I would do backend in django ninja and app in capacitor or react native.

Try Unpoly. It's the opinionated, batteries included alternative to htmx. But still in the same spirit.

+1 for unpoly, I like it a lot as well

I tried htmx first, and later hotwire because the promise of better integration on mobile sounds appealing.

Htmx is super-simple to get it work. Zero setup, literally.

I can't make work the simples thing on hotwire. In my mind, is like htmx=vue and hotwire=angular, ie: one is truly simple to use, integrate and is orthogonal to your current stack, the other is his own philosophy & world.

Not saying hotwire is bad, just that it like is part of a setup.

Htmx literally don't care about your server-side thing.

htmx makes sense if you have a server-side framework you are already comfortable with and that effectively addresses the problem domain at hand (e.g. if you already know django)

if you are starting from zero knowledge of any server side technology and want a front-end/back-end integrated solution, rails + hotwire or laravel livewire will be better

I'm working on a project with Laravel + Unpoly. It's an extremely easy and straight forward stack. And I knew zero PHP when I started, but I don't find it difficult at all.

Can you draw any first hand comparison to Rails (and maybe some additional comparative tooling like Hotwire)?

I never used Rails other than doing it's tutorial, etc. And I only know hotwire by their docs, so I can't do a real life / production code comparison.

But from my understanding, Unpoly manages to achieve almost the same thing that Turbo + turbo frames can do, plus some other extra goodies such as modals (now layers), forms validation, etc. I honestly like Unpoly a lot more, and it also works with any backend framework "as is", given it does not require any special behaviour from the backend. That's a big win in my opinion...learning a tool that can be used everywhere can't be a bad thing.

The only thing I miss in Unpoly, is something equivalent to Stimulus. You do have "compilers" which allow you to attach custom JavaScript to any Dom element, but everything you do there is pretty manual and imperative. For these use cases I also use Alpine.

Thanks for htmx! I used intercooler and it was great but htmx is even better.

I’m currently building one by myself in Elixir/Phoenix/Liveview/Tailwind using Fly.io for deployment. Elixir has been amazing for more complicated app dev. A lot of previous ruby people there. Liveview gives a React like experience without the extra complexity. Tesla is great for building api integrations. Knock has a great elixir api for notifications and emails. Telemetry is built into most things. Livebook is Jupiter notebooks but better, great for quick prototyping or doing adhoc data analysis.

You can get most of this from just using https://legendaryframework.org/

Want native apps? LiveView Native is a thing https://native.live/. One app to do it all.

> Want native apps? LiveView Native is a thing https://native.live/. One app to do it all.

I have been here before – and still confused. There is no actual... code repo? Is it hidden in the Slack channel or does it simply not exist yet?

EDIT: Okay, I guess it's just still very early into the Native stuff.

I was away from PHP for years but in my search for a stack that would just let me get things done as fast as possible I found InertiaJs https://inertiajs.com/

It lets me use vue js as laravel views and pass data around without the need of an API. This just makes development super fast.

I went even further and used laravel jetstream, that comes with inertia js and with Auth and other useful stuff already solved

I'm surprised no one has pitched Clojure yet, so I guess I'll do it. However, for solo development in a new venture and the most time effective way, it's generally a good idea to use tools you're already very familiar with. Considering what you're willing to give up though, here goes:

Clojure for web stuff is fairly mature. Cross compilation between Clojure and Clojurescript allows you to write code that runs both on JVM and Browser. There are endless attempts at web frameworks for Clojure(script) to get you off the ground faster. My suggestion would be Luminus if you are not incredibly experienced with it.

Speaking from experience, the expressive nature of Clojure, as well as functional programming, lends itself to concise syntax, suitable for solo development.

You may find less mature tooling in Clojure land when it comes to mobile development. There is a react native library for Clojurescript called Krell though I can't speak to how well it works because I haven't used it before.

If you don't have experience with JS/JVM, you'll have a steeper learning curve as a lot of Clojure(script) libraries suffer from software rot (probably) requiring the use of Java or Javascript libraries via Clojure's interop feature. Interop works well, but you'd still need to be mindful of the host (JS/JVM) quirks like managing state and constructing objects.

Based on my own experience here is what I use.

I write backends with either a static server, AWS Lambda, Python aiohttp or Java with JAX-RS. The last two basically work like Sinatra. I have used Java at work since Java was in beta so I am comfortable with it and I have almost as much experience with Python. I have a lot of fun developing little applications for myself (a party controller for my music system, a workflow application for handling job applications, a similar system for constructing machine learning data sets.). Java though rules the roost in terms of being reliable under heavy load. I really have a lot of fun though with websockets in aiohttp.

For front end I have been using React, use MobX when appropriate, but I am thinking about how to transition to WebGL (maybe react-three-fiber) because I am inspired by video game interfaces, AR, and such.

I’d say that any shoestring project needs a lot of de-risking and you have to balance time spent learning and doing. If you are learning a language and framework that is radically different from what you know then you are going to do very little. Thus I’d tell people to stick with something they know if they like it. If you project is ambitious and time is limited you just add something new (like the WebGL stuff for me) only if it lets you do something that would otherwise be impossible.

Ruby on Rails, Hotwire, Postgres, Redis

Does anyone have experience with https://github.com/hotwired/turbo-ios or https://github.com/hotwired/turbo-android ?

We use these both for https://jumpstartrails.com and it works great. You have to build your own authentication and native navigation, but for launching your app on mobile and the web, it's hard to beat.

I'll give a vote of confidence for Flutter here. I've been using it as a one man show to develop a game ( markmywordsgame.com ) in the trickle of spare time I get. I use Firebase for back end.

Flutter is a dream to work with. Very rapid development with hot reload. Firebase is great for abstracting away almost all the dev ops bs. You can use local emulators for rapid development there too. It's quite a nice stack.

I happen to love Dart, and tolerate Typescript. I get to almost completely escape the js build hell, but Firebase functions do still require either JavaScript or Typescript.

I will include the caveat that Flutter web is not the best target for forms/text heavy projects. Flutter does all is own rendering so you don't get the html stuff like Ctrl f, copyable text, css "for free".

But for true apps that you don't just want to look like a word press site, it's awesome.

> Flutter does all is own rendering so you don't get the html stuff like Ctrl f,

Do you know if that is also true for the html renderer? That would definitely be a deal breaker for my use case.

I am a solo amateur developer for 20 years. I mainly build tools for home automation, my own dashboard that gathers data from calendars, buses, meteo etc. and displays this on the living room for the famil, and more recently a simple smart lock.

Most of these are back + front.

After a lot of experiments, I ended up with the idea that once I know a hammer (framework, language) I will see everything as a nail.

So I went for

Front: Quasar (quasar.dev). It is based on Vue and recently also on Vite. Use that combo. Also Typescript.

Pros: very complete, has everything you need for an average front, including PWA or of the box. Very good documentation.

Cons: the community is meh. Rarely someone respond and the SO tag does not have a lot of traction.

Back: I used to be pure Python, now I try to do everything in Go (after an initial strong dislike I learned to like the down to earth code)

Infra: everything goes into a docker container, this makes dev and deployment sooooo much easier.

There was a similar thread a week ago, which was informative.

> Ask HN: Companies of one, what is your tech stack? - https://news.ycombinator.com/item?id=32960033

I was hoping someone would compile all the responses into a table or chart. Surprisingly, the top-voted comment is about WordPress.

If you're aiming for web + Android/iOS, I would say React and React Native with shared API(s). The backend could be external or custom built, most likely a combination, written in any preferred language like JavaScript, Go, etc.

… it was a long time ago but I made a site that earned over $1000 a month from AdSense with Wordpress so I won’t knock it. So long as you use SuperCache the performance is just great. Most of the ‘brains’ of my application was a system that generated content apart from Wordpress and inserted it via an API.

In the spirit of Steve Ballmer, JavaScript, JavaScript, JavaScript, JavaScript (voice growing hoarse and weak)

How many people really run a JavaScript web server? Most of us who are doing front end work are using a lot of node.is code as part of the build process but I think most of us are using some other platform for the server.

It is not so fashionable to talk about but everywhere I have worked since 2007 or so decade (consumer-oriented startups, enterprise-oriented startups, more staid organizations) has used either the JVM or .NET as a back end.

From my limited experience, I wild day that this is more for modern and new projects that embrace devops and other fashionable trends (no irony). They can start from scratch and give some freedom.

I tried once, with the idea of "one code base" but it ended up being two code bases without strong links (I was certainly doing it wrong)

Enterprise software, au least in my industry (large, well established high tech) is dreadful. It is so complex that everyone is scared of prodding it to much and obviously you wild not change the core web server. It is some tomcat anyway.

I am not a pro dev but work in information security (and develop for fun at home) but even to the untrained eye this does not look good.

I am a nodejs engineer so 100% of the last 5 companies I've worked for used node as a server.

JS or more so TS backend ecosystem is improving. Tools to generate type definitions from db schema and vice versa. Mature toolchain is -- specify db schema and get proper swagger doc and type contracts auto-generated for you.

I never worker at a company or served a client or heard of any in my circles that use .net or jvm for their backend. As of recently most use nodejs and thus js.

Laravel for backend is pretty nice, look into its middleware and resource/collection wrapping. Its ecosystem has some good solutions to common things as well, like auth and roles, and Nova is nice to get an easy view into things while developing without having to write a dashboard.

I'm using it with React, but any frontend framework would work with it. It grew up along with Rails so there's some similar thinking, and you can choose which level of bare metal or magic that you want depending on what you're doing.

I've been using node/react for a lots of years. This year I started working on a project built with Laravel. I can confirm it is a GREAT framework. Suddenly everything is reasonably easy again.

Have you tried filament backend for laravel? Speeds up development 200%.

I'm not much of a fan of livewire, although I've just played with it.

I prefer Unpoly, which I already know. Or inertia if I have to go full Js.

+livewire or inertiajs

It’s Php

PHP builds $1 billion companies.

What's your point?

I’d say supabase for the backend. Super quick to get set up, self hostable if you want and the dev velocity is pretty high. For the front end, I’d go with react-native and react-native-web. If you are building something very “app” like on the web and are going the SPA route, a single shared codebase using react-native and react-native-web is the way to go. If the web site is going to be more of a traditional style, I’d go with next.js but still use react-native-web to share components with the native side.

I would use whatever back-end you’re most comfortable with. For me that’s probably C#, but any solid language will do.

I also recommend considering something like GraphQL for your API interface as it will reduce the amount of times you have to dip back into the back-end to add a single property to a response or write a new optimized endpoint for a particular view.

Front-end IMO it really depends on what you’re trying to build, React Native doesn’t really reduce your overall work IMO so much as the cognitive load. You still end up not only having a separate codebase from your web UI but also have to at times dip into xcode and angular studio to write some platform-specific code. I would probably explore Flutter if I really needed to write something once, but I can’t really comment on it today. For the stuff I work on I usually just try and make the web experience as mobile-friendly as it can be and leave it at that. For B2B customers that’s almost always sufficient anyway. I tend to work in Angular more often than React and have been pretty happy with the amount of reuse I get between projects and the quickness of the dev loop.

SvelteKit fails the maturity test but is something I'd use in a heartbeat once a stable version is released. It's what I've always dreamed of — one framework all in one language (JS/TS) that gracefully bridges the front/backend gap built on web standards:


From the docs:

> Building an app with all the modern best practices is fiendishly complicated. Those practices include build optimizations, so that you load only the minimal required code; offline support; prefetching pages before the user initiates navigation; and configurable rendering that allows you to render your app on the server or in the browser at runtime or at build-time. SvelteKit does all the boring stuff for you so that you can get on with the creative part.

I find this very interesting. I wonder how Svelte Native gets woven into it, while doing the least amount of duplicate work possible. Is it just basically like any other API + Svelte Native, or does SvelteKit offer some bridging/features that make this combination simpler?

Check the docs! https://kit.svelte.dev/docs/introduction They're still a little rough but should give you an idea.

Yeah, from what I can find, there is no mention of anything Svelte Native in the SvelteKit docs. Thanks anyway for the pointer, looks interesting enough still!

I use for my MVPs nextjs+vercel+prisma+posgresql (supabase)

A backend you're comfortable with as others has said.

App support is the tricky part in my experience. I haven't found a workflow that I love yet.

Developing for web and creating an app that wraps the website works fine. The problem is that you'll likely get rejected when submitting to the app store & play store.

You could go with Flutter for app & web or react-native-web but it's still very early days and there's lots of issues. I find it's not worth the effort.

The best compromise I do right now is React for web. And then a separate react-native app. Realistically, you could have similar architecture for handling data. However, the rest will still be different. Eg: Routing & Display components.

I’m surprised no one has mentioned this so, I’ve built a very easy to use and modify stack based on PostgreSQL (or SQLite) depending on needs fed into a Flask Python BE. You can ORM it with SQLAlchemy if you like or just run raw queries. You’re running that basically out of as little as one file and you have your API and DB.

At that point you’re free to decide how you want to run your client side, I tend to start with HTML and avoid JS until it’s necessary, then convert where relevant into React. As other posters have mentioned Tailwind is awesome for avoiding writing custom css, there’s a class for literally everything.

Clear separation between your API and your FE pays off down the line.

I use Go, JavaScript (vanilla no framework) for the front-end, PostgreSQL, DigitalOcean

go, clojurescript, and aws. all three of these have problems, but like linux are the least bad of the available options. from some angles they are even quite good.

- go, a natural fit for backend with types and compilers and speed

- clojurescript (and react via reagent), a natural fit for frontend with dynamism, flexibility, and data centrism

- aws, a natural fit for infra. like linux, literally everyone is using it. if you avoid architect advice and tape over most of the knobs, it’s quite good



I've been enjoying developing on top of PostGraphile. https://www.graphile.org/

Good starter: https://github.com/graphile/starter

I can add a column the the db, and my frontend gets that autimagically (in dev mode, it generates a graphql schema out of the db, and from that it creates composables for my frontend wiht graphql-codegen). On the frontend I use Vue 3, the starter is build with nextjs/react.

Elixir/Phoenix/LiveView - there is no second place to this stack.

> ... there is no second place to this stack.

Wat? This means the stack is dead last. You probably meant to say "it's second to none"

Not sure how you read that as it being dead last. It reads to me that the stack is first and nothing comes even close enough to it to be ranked as a second.

Hm, I've never seen this usage before, and I couldn't find any references to this phrase online. You can guess what the poster wanted to say from the context, and interpret the phrase in your way, but to me, as long as there are several entities competing, no mater how far behind the follower is, it's still second in relation to the next higher up. The only way to satisfy "there is no second place to this stack" is for "this stack" to be last.

If you wanted to convey that something is so incredibly ahead of its rivals, you could say "this stack has no competition" or "this stack is in a league of its own"

How does this solve the app part? If it does not, what does?

I use MERN stack - huge community and libraries for everything. I like the "everything as JS" approach I can take with React as I never liked jumping between html/js/css.

Additionally, I found Firebase to be a really great way to start and run projects. The most important piece of that is Firebase Auth which solves a complex and important problem without costing an arm and a leg. Other services such as Hosting, storage, and functions were really easy to start with.

The thing that I don’t like about that stack is the absurd amount of cruft that comes with it.

Take a look at the node_modules directory for just the React app. It’s huge! Combined with the boilerplate of the other parts of the stack, the amount of code that the developer has no insight into is absurd.

It really depends on what you are building.

Vue with Quasar is pretty good for getting you a good development velocity in the front end and has a lot of useful build targets. I like to build fat clients to minimize what the server is doing. If you can just convert an image to the proper sizing in the front end, why not just do it there? Lowers your cloud costs and makes what there is nice and responsive, just need validation.

The backend can be whatever you prefer.

Recommend Meteor + Svelte. It checks all your boxes. I haven’t spent time with Flutter though. Feel free to DM me if you have any questions.

I'm curious if there are any out there that come with all the tools needed for a login/auth system. I know django does, I'm hoping for alternatives.

it's the most boring part of a system to me, but if it's not built in from the start then it's a terrible time trying to back it in. it's one of those things that stops me from ever starting a project.

My stack relies on Typescript Express apps on Google App Engine. One for the API, and one for the front end.

For database I use Datastore and for storage I use Cloud Storage.

Front end uses an express app that routes the marketing pages to static html pages and then routes everything starting /app to a generic html file that uses React to render everything / sort out routing.

Maybe Vercel for web, Expo (React Native) for mobile.

Still looking for what the best database-as-a-service is though.

Yep I have a similar preference: React/Next.js + Vercel + Cloudflare (for CDN and image resizing) for web and React Native/Expo for mobile.

The combination of PlanetScale for the database & TypeScript Prisma for ORM is really a joy to work with.

Hm... Next.js at the core or any web or mobile app? Interesting. What the best things about PlanetScale to you?

There’s not a perfect solution yet (I want someone to release preview DBs) but I currently use Supabase since they provide a regular Postgres instance with a connection pooler out of the box.

If perf isn't a concern then go deep on Js everything.

For an option with the fewest moving parts, Firebase + React (web and/or native). All JS, and minimal devops to worry about.

I would look at .NET

For the web, you have ASP.NET Core. It feels like Rails or Django, but with static typing that makes a lot of things easier. You can do things like `db.Books.Where(b => b.PublishedAt < DateTime.Now && b.Rating > 3 && b.AuthorId == 101)` and you get all the normal auto-completion because it's statically typed. With .NET, you can compile down to a single, self-contained binary which makes it really easy to deploy a simple app and Microsoft has really easy Docker container setups if you want to deploy with Fly.io or anything else. You also get the benefit of more speed than you'll get from Ruby or Python. That's certainly not a deal-breaker with other languages, but it's always nice to have something that is just a bit faster.

ASP.NET also makes it really easy to get started. I think a lot of things that aren't named Rails or Django don't make it easy to get started - or they make it easy to get to "Hello World," but then you're left with "uh, how do I connect to a database? I guess I find my own library for this? Is there a template engine? Wait, do I need to choose a JSON serializer?" One of the things that makes Rails and Django so great is that they offer you a great starting experience. ASP.NET offers that Rails/Django-like experience.

It's also simple to return JSON from your endpoints to create an API for your front-end (if you want to use React or something) or your mobile apps.

C# feels a lot like Kotlin to me. It's a Java-like language that has made practical decisions that make it a lot easier to use. There's a lot of things that just make it pleasant to use, if you're looking for the imperative/OO style of programming you'd get with a Ruby/Kotlin/Python/Java/etc. If you're looking for Lisp, it's not Lisp.

C# and .NET are both very mature and Microsoft is putting a ton of work into the ecosystem. Performance is already top-notch (which basically means equivalent to Java and Go in the GC world) and they're continually improving it every year. They're investing in a lot of great stuff like Blazor which is basically a replacement for things like React and Vue, but using C# and Razor templates via WASM (and that can also be executed on the server).

`dotnet watch` is just great. It'll hot-reload your code when you change things and when there are edits it can't hot-reload, it'll recompile and relaunch in a second or two.

.NET offers MAUI (Multi-platform App UI). Basically, write your apps in C# and MAUI and get native apps for Android, iOS, Windows, Mac, Tizen, and likely community-support for Linux. MAUI has some rough edges, but it's getting better and you can always web-view your website to begin. At the same time, Microsoft is putting a lot of effort behind it and I think it will pay off with nice apps that use native widgets without requiring two separate code bases. You've noted Flutter and that's probably the biggest alternative, but Flutter doesn't use native widgets. That's not necessarily bad, but it does mean that the apps are probably going to feel a bit less at home on iOS. There's also the chance to basically share the objects that you're returning as JSON from your backend with your mobile app. Instead of having your backend `Book` class and then making sure your Dart front-end's `Book` class remains in sync with any changes, you just have a single `Book` and don't have to worry about it. You talked about "redundancy and additional parts" and while keeping that stuff in sync isn't necessarily hard, it can be an annoying task that doesn't bring joy. Heck, one of the big things about Rails was that so many stacks made you do tasks that weren't necessarily "hard", but really didn't bring joy - especially when you were searching for a typo that just made things not work.

The great thing about Rails is how productive it lets one person be. You aren't spending your time choosing libraries and wiring things together. I think ASP.NET Core offers that and more - static typing, great performance, and dead-simple deployment with self-contained binaries.

Personally, I'm liking HTMX for adding interactivity to my app. I don't have the most experience with JS out there and I'm not looking to create something that needs the level of interactivity that might require React and it allows me to do the things that will be nice for users.

If I were looking for more interactivity and didn't mind giving up a little "App speed and performance, specially on the client side", I think I'd reach for Blazor. I believe .NET 7 (coming in November) will be making improvements in Blazor performance and client download size, but it's still decent with .NET 6. Plus, improvements to WASM will make Blazor a lot better. Right now, GC'd languages need to ship their garbage collector as WASM code in the download, but it looks like WASM will handle garbage collection natively in the future. Blazor is around half as fast as React and the download sizes will likely be 3 times as large, but as Microsoft improves Blazor and WASM gets better the gap will likely narrow. Plus, with Blazor, you can just create a .NET MAUI Blazor app and now you have your iOS/Android apps. Later, if you want a more native experience on iOS/Android, you can shift to a native .NET MAUI app (rather than web-view powered).

What are the downsides of the .NET/C# ecosystem. First, I'd say that if you're not on Windows, you're going to want to pay for JetBrains' Rider ($150/$120/$90 per year for first, second, third+ years). It just works and it's wonderful. There is a Visual Studio for Mac which is decent and better than a lot of IDE/editor ecosystems out there for other languages. There is VSCode with its C#/.NET support and again it can be decent if you're used to working with an editor that doesn't help you 100% of the time. Rider can just be so pleasant though. Also, once you get over a certain amount of revenue or employees, Visual Studio Community isn't free. If you have over 250 PCs or $1M in annual revenue, you have to pay the $500 for Visual Studio Professional. That isn't much compared to the $100,000-300,000 per year you're paying a developer or even the $150/year you're likely paying Slack, but it can certainly be a turn-off to some people. There is always VSCode which is decent and free and Rider which is just wonderful (and only $250/year for businesses from the third year on), but I know some people just hate the idea that the best editor experience might cost some money (and that most people in the C# world will just pay $100-500 a year to get it rather than fighting the system for open source).

Second, I'd say that nothing really matches Rails' asset pipeline in terms of letting a backend-heavy programmer have a decent front-end setup without having to dive into the whole world of Grunt/Webpack/Gulp/Browserify/etc. It's been a while since I've used Rails, but I remember that being such a nice addition. Microsoft does have some docs (https://learn.microsoft.com/en-us/aspnet/core/client-side/bu...) and you can always use Gulp or Webpack or whatnot and LigerShark's WebOptimizer will let you minify and bundle things in C# (and handle TypeScript compilation, Sass, vendor prefixing, etc), but I remember Rails' opinionatedness being kinda nice for this.

Finally, I'd say that C# and .NET can be annoying if you care about little things. For example, I've heard a lot of people debate significant whitespace vs. opening/closing braces or tags. If you care about those things, C# might be a bit annoying. I'll give you an example to illustrate. This is what a simple data class would look like in C#:

    class Person
        public string Name { get; set; }
        public int? Age { get; set; }
        public boolean IsAdmin { get; set; }

"Omg, the variables are PascalCase like classes." "I hate that I see the `{ get; set; }`" (I just type `prop` in my IDE and it creates the property so I don't even have to type it all). "How could they put the opening brace on a new line!"

I get complaints like that, but it's also stuff that kinda falls into the background when you're actually trying to get work done. Java beans didn't fall into the background. You'd be fighting constant little cuts and it would be hard to differentiate a class that had special behavior from one that was just a basic bean. The properties in C# are easy to see that they have no special behavior and easy to see when they do have special behavior (you can just do `{ get => _age + 10; set => _age = value; }` if you want a custom getter).

ASP.NET Core really grabs so much of the best ideas out there in a language that's really good with great IDE support and dead-simple deployment as a single binary - and all with one of the biggest companies out there funding people to make it better, write docs, etc. And it takes time to write great, in-depth posts like this: https://devblogs.microsoft.com/dotnet/performance_improvemen.... I find it a pleasant place to develop where I can just focus on my work.

I really don’t understand why dotnet core stack isn’t popular. What is your take on this?


personally i prefer javascript front end and node.js backend. all vanilla.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact