7 ms·
Ask HN: What stack would you use to build a CRUD web app on the JVM today?
2015 thread: https://news.ycombinator.com/item?id=10302879. How have things changed since?
- emrah 5y agoAs always, the answer is, it doesn't matter. Whichever stack gets you to build your mvp fastest, or the one you already know and enjoy, or the new shiny one you've been dying to try out, or the one your buddy challenged you to use.. They are just tools, which you pick is a matter of preference. Just pick one unless you enjoy spending your time thinking about which to pick rather than get to work and build your project
- zcw100 5y agoI get the sentiment and it’s appealing to just pick something and go with it. I work with people that constantly churn on frameworks. They pick one and the first semi-difficult roadblock and they’re changing things up. To balence that out though. Picking something involves a significant investment and a long term commitment. That advice wouldn’t sound as good if you said,”Don’t worry about who you marry. Just pick one and go with it and make things work”
- emrah 5y agoOP didn't provide any context so it's hard to answer. Is it for a personal project? Is it for a startup? For example, Clojure is a very expressive and fun programming language but I would never build a startup on that as it would be far more challenging to find experienced developers. I think I misunderstood the sentiment of the question anyway. It was trying to start a discussion rather than get a pragmatic answer :-)
- homarp 5y agospring boot works. https://news.ycombinator.com/item?id=10302913 https://news.ycombinator.com/item?id=10302913
- croo 5y agoSpring Boot. But that's because I don't mind big binaries, fastest to be productive(for me!), every tool is just another autoconfigured include... I would consider trading these for faster build times... I heard good things about javalin. I would definelty use Java. I like it and there are tonns of new features in the 11+ versions. Boilerplate is greatly reduced by Lombok. I would consider Kotlin for even less boilerplate and null handling.
- videogreg93 5y agoI don't have much backend background, but I worked with Spring before, and coming from that Ktor was a lot more fun to work with. I don't think I would use it in a huge project, as I feel there a lot of things still missing, but eventually I think it'll be great. Otherwise, Spring Boot + Kotlin is still a great combo.
- noughtme 5y agoWould anyone use Scala? If so, any recommendations on server libraries or frameworks? Had an interview with a relatively new company and surprised their backend was all Scala (Data science company so maybe it expanded from just using it for Spark).
- blandflakes 5y agoI would use it at work because I know it. There are a LOT of libraries in Scala for HTTP up to database stuff, and it really depends on what kind of ecosystem you're walking into: * Scala as Python: https://github.com/com-lihaoyi/cask https://github.com/com-lihaoyi/cask, maybe https://github.com/getquill/quill https://github.com/getquill/quill * Scala as Haskell: HTTP4s, https://tpolecat.github.io/doobie/ https://tpolecat.github.io/doobie/ * Scala as Rails: Play Play is the closest thing to Rails-like CRUD productivity IMO, and honestly for CRUD most times I would like to write as little code as possible and just get it done, even using low/no-code solutions (postgrest, hasura, htmx), but that wasn't the question :)
- yen223 5y agoPlease understand that this is subjective - some people will have good experiences with a language, and some people won't, and thats okay. That's the nature of languages. But yeah, I use Scala at work for what should be a simple crud app, and I absolutely hate it. Never felt less productive in my life. The biggest problem with Scala is the type system. Types are great for catching bugs _within_ a program, but don't really help much for catching bugs when the program interacts with the outside world, which CRUD apps do a lot with a database. So I'm paying the cost of having to learn this complex type system and all the wacky ways the type checker can fail, but I'm not reaping much of the benefits that comes from actually using Scala's type system. And if I'm not using Scala's type system, then what's the compelling reason for choosing it over Kotlin, or even Java?
- lrobinovitch 5y agoMy work was doing the same (scala for crud app) and I gave a lightning talk at about exactly this - the expressiveness of the type system is hamstrung by the capabilities/quirks/documentation quality of the various serdes required to move scala objects into some other domain and back. Made everything so much harder than it should be.
- fabbari 5y agoI think if I had to start new project based on Java I would definitely have Micronaut [0] on my shortlist. I have used it in small personal projects and I have to say that it was a nice change of pace compared to Spring Boot. My understanding is that Micronaut and Spring can be used together [1]. [0] https://micronaut.io/ https://micronaut.io/ [1] https://micronaut-projects.github.io/micronaut-spring/latest/guide/ https://micronaut-projects.github.io/micronaut-spring/latest...
- karanbhangui 5y agoClojure(script) with re-frame and figwheel, nothing else comes even close
- sfifs 5y agoI'm experimenting with Ktor and Kotlin. Ktor seems really well featured with baked in co-routines based concurrency and Kotlin feels a far more sophisticated and productive as a server side language than Go or Python.
- yamellasmallela 5y agoStep 1: Pick anything other than JVM language
- exabrial 5y agoMicroprofile or Quarkus world be my votes. Java is still the performance king, and Java 17 in the fall is going to further cement that position.
- varispeed 5y agoI managed to skip few years of front end development. The last time I was at it, the Go was all rage and express JS. What would you use today to be valuable on the job market?
- aristofun 5y agoWhy people like suffering so much? ) Sorry for being emotional and slightly off topic, but why would you fire a cannon at sparrows? “Today” some things changed, new more team-scalable and simple languages matured. Old one got more performant and stable (like nodejs, ruby etc). What’s there in CRUD that you win with jvm?
- throwaway189262 5y agoI don't think an ask thread is a good spot for a rant, but the JVM languages have changed a lot over the years. You imply that Java is big and heavy when JS/Node Python and Ruby use more ram and run slower than Java in basically every benchmark. And V8 runtime and JS language complexity is just as big as Java these days. Java is very scalable. If I was force to work on a million+ line project I would pray it was Java or C#. Java ain't going to win any beauty pageants but it's a solid all rounder. The guy you keep on roster because he can fill any position, not because he's the star hitter.
- aristofun 5y agoJava is too scalable for simple crud. That’s my point. I’ve worked a lot both with java and nodejs. Your words about js complexity “just as big” are simply wrong. Think about multithreading for starter. And all the bugs and developer mental overhead that comes with it.
- throwaway189262 5y agoMulti threading has zero overhead in normal Java web frameworks. It's thread-per-request so you don't need to worry about thread safety any more than you do in JS. That you didn't know that implies you haven't worked with many Java web frameworks. JS has become a huge language, just as big as Java. So is the runtime, V8 is gigantic, comparable to JVM. I use both every day. Vert.X is nearly identical to Express JS including all the callback stuff. And that's one of the harder Java frameworks to use
- 5y ago
- blntechie 5y agoQuarkus would be my choice.
- throwaway189262 5y agoDropWizard is great. Spring Boot was based off it. It's a nice mix of simplicity and effectiveness. If you want performance above all else, Vert.X isn't too hard to use. But the async API's are a PITA, much like ExpressJS.
- preordained 5y agoClojure with usual suspects; e.g. Ring, etc.
- harryvederci 5y ago- Backend: Clojure (with Reitit[0] for the API) - Database: Postgres or SQLite - Frontend: None, the backend serves html + js by combining htmx[1] and hiccup[2] [0] https://github.com/metosin/reitit https://github.com/metosin/reitit [1] https://htmx.org/ https://htmx.org/ [2] https://github.com/weavejester/hiccup https://github.com/weavejester/hiccup
- fayten 5y agoI highly recommend the following stack: JVM Language: Java 11+ Webserver: https://javalin.io/ https://javalin.io/ Templating: https://j2html.com/ https://j2html.com/ Enhanced html attributes: https://htmx.org/ https://htmx.org/ Database helper: http://jdbi.org/ http://jdbi.org/ Database: Sqlite or Postgres depending on the expected scale. The startup time is very fast. I usually see times under a second, which makes iterative changes significantly less painful than something like Spring. Also setup is ridiculously simple, just throw those libraries in a pom file and use a CDN for htmx. No front end build tools needed since htmx removes the need for most if not all of your javascript. The whole setup feels kind of old school, but man it makes developing CRUD apps dead simple again. Lastly, project onboarding is as simple as having someone download intelij and pulling the project. The built in maven and jdk to intelij is all they need. That is as long as you don't need them to run their own Dev database instance, but that's not the end of the world if you utilize docker. Even if you decide on something else take a look at the above libraries, they're all pretty fantastic.
- ajdoingnothing 5y agoSpring Boot or Quarkus.
- bdcravens 5y agoLucee application server, with ColdBox framework.
- sarabad2021 5y ago100% Lucee is amazing! However I prefer Wheels framework for more of a Ruby on Rails feel.
- bdcravens 5y agoWhy not just use Rails then? Several years ago, I attempted to rewrite our main app (running on Railo and FW/1) in Wheels, and ultimately, that process led me to determine that Rails was a better fit for our project.
- sarabad2021 5y agoDeveloper quality of life. Lucee and CFWheels gives you the best of both worlds. Also, I hate Ruby syntax. I’d sooner use Golang.
- surajcm 5y agoSpring boot, Java 15+, Gradle, Tomcat (in built), Thymeleaf
- sarabad2021 5y agoLucee.io all the way. It was featured here on hn awhile back. Basically dynamic ecmascript on the JVM. Great for quickly prototyping apps with. I’ve also built many highly scalable enterprise applications with it.
- 5cott0 5y agoSpring/Lombok/Postgres/React - exactly the same as I would have used in 2015.
- pjmlp 5y agoJEE, or if you prefer Jakarta EE, as always. If a CMS solution is required, LifeRay or Adobe Experience Manager. Preferably with Oracle as database, and most performance critical queries written in PL/SQL. Although I am sure this is a not welcomed solution in this side of Internet.