# \#webapps

**URL:** https://clojureverse.org/tag/webapps/39.md

[Latest](https://clojureverse.org/latest.md) · [Categories](https://clojureverse.org/categories.md) · [Tags](https://clojureverse.org/tags.md)

---

## [Make a web or webapp in 2024 with Clojure and Clojurescript](https://clojureverse.org/t/make-a-web-or-webapp-in-2024-with-clojure-and-clojurescript/10529)

<div class="topic-metadata">

**Author:** [@maxxcan](https://clojureverse.org/u/maxxcan)\
**Replies:** 14\
**Last updated:** [July 22, 2024, 10:32pm UTC](https://clojureverse.org/t/make-a-web-or-webapp-in-2024-with-clojure-and-clojurescript/10529 "2024-07-22T22:32:41Z")

</div>

Hello everyone and thanks for your time. I have had a lot of time without using Clojure. But, my company is asking me to make a small web or webapp that uses to a sqlite database. I want to make it using Clojure or Cloj…

---

## [Goose Now Supports Batch Processing in Clojure!](https://clojureverse.org/t/goose-now-supports-batch-processing-in-clojure/10425)

<div class="topic-metadata">

**Author:** [@siripr](https://clojureverse.org/u/siripr)\
**Replies:** 0\
**Last updated:** [November 16, 2023, 12:10pm UTC](https://clojureverse.org/t/goose-now-supports-batch-processing-in-clojure/10425 "2023-11-16T12:10:37Z")

</div>

We are delighted to announce that Goose now includes batch processing as a feature. This makes Goose the very first background processing library in Clojure to offer this capability, and we couldn’t be more excited to br…

---

## [Why Enlive is not used more as an html template engine?](https://clojureverse.org/t/why-enlive-is-not-used-more-as-an-html-template-engine/9889)

<div class="topic-metadata">

**Author:** [@Alejandro](https://clojureverse.org/u/Alejandro)\
**Replies:** 18\
**Last updated:** [March 21, 2023, 6:44pm UTC](https://clojureverse.org/t/why-enlive-is-not-used-more-as-an-html-template-engine/9889 "2023-03-21T18:44:06Z")

</div>

Enlive or anything similar. Once it clicks, all the api abstraction makes sense. It’s just plain html, you inject parts into it using css selectors, enlive gives you good tools for making templates. The workflow I imag…

---

## [A message-broker agnostic background processing library for Clojure](https://clojureverse.org/t/a-message-broker-agnostic-background-processing-library-for-clojure/9560)

<div class="topic-metadata">

**Author:** [@olttwa](https://clojureverse.org/u/olttwa)\
**Replies:** 1\
**Last updated:** [March 8, 2023, 5:23pm UTC](https://clojureverse.org/t/a-message-broker-agnostic-background-processing-library-for-clojure/9560 "2023-03-08T17:23:44Z")

</div>

Goose 0.3.0 is out! :tada::tada::tada: Message brokers are now pluggable! This version comes with support for RabbitMQ (0.2 only had Redis support), and lays down a protocol that allows you to integrate any backend like…

---

## [Architecture of big applications](https://clojureverse.org/t/architecture-of-big-applications/9574)

<div class="topic-metadata">

**Author:** [@NoahTheDuke](https://clojureverse.org/u/NoahTheDuke)\
**Replies:** 29\
**Last updated:** [January 7, 2023, 1:12am UTC](https://clojureverse.org/t/architecture-of-big-applications/9574 "2023-01-07T01:12:20Z")

</div>

There are many example/demo repos for Clojure demonstrating a small slice of how a web app might be structured. Most notable is @seancorfield’s usermanager-example, which has many forks and variations (using reitit, inte…

---

## [Simple web application demo exposing Open Weather API](https://clojureverse.org/t/simple-web-application-demo-exposing-open-weather-api/9208)

<div class="topic-metadata">

**Author:** [@MrDallOca](https://clojureverse.org/u/MrDallOca)\
**Replies:** 0\
**Last updated:** [August 8, 2022, 1:32am UTC](https://clojureverse.org/t/simple-web-application-demo-exposing-open-weather-api/9208 "2022-08-08T01:32:41Z")

</div>

city-weather-clj Although simple in functionality, this small web application demo makes use of fundamental design principles that makes it easy to test, maintain and extend. To anyone interested, I think this might a g…

---

## [Error "Not found" compojure.route](https://clojureverse.org/t/error-not-found-compojure-route/8978)

<div class="topic-metadata">

**Author:** [@2FO](https://clojureverse.org/u/2FO)\
**Replies:** 2\
**Last updated:** [May 24, 2022, 1:34pm UTC](https://clojureverse.org/t/error-not-found-compojure-route/8978 "2022-05-24T13:34:31Z")

</div>

I have an update article route in a blog application. It should submit a POST request with the updated post params then redirect to the newly updated post itself. Instead it redirects to a “Not found” page where the UR…

---

## [Automated database migrations?](https://clojureverse.org/t/automated-database-migrations/8657)

<div class="topic-metadata">

**Author:** [@zmitchell](https://clojureverse.org/u/zmitchell)\
**Replies:** 4\
**Last updated:** [February 21, 2022, 4:20pm UTC](https://clojureverse.org/t/automated-database-migrations/8657 "2022-02-21T16:20:24Z")

</div>

I’m learning about web development and I’m still learning about working with databases. From what I’ve read it seems like a good idea to develop my database schema over time with migrations. However, I’m not sure when to…

---

## [Passing dependencies into ring handlers ... on request map, or \`partial\`ed into the handler?](https://clojureverse.org/t/passing-dependencies-into-ring-handlers-on-request-map-or-partial-ed-into-the-handler/8540)

<div class="topic-metadata">

**Author:** [@rgm](https://clojureverse.org/u/rgm)\
**Replies:** 9\
**Last updated:** [February 3, 2022, 7:30pm UTC](https://clojureverse.org/t/passing-dependencies-into-ring-handlers-on-request-map-or-partial-ed-into-the-handler/8540 "2022-02-03T19:30:31Z")

</div>

I’m curious if anyone has strong opinions one way or another on the (air quotes) best way to provide dependencies like a database connection into a Ring request handler, when working with one of the dependency-injection …

---

## [How to execute and handle file-uploads with Re-frame and Reitit?](https://clojureverse.org/t/how-to-execute-and-handle-file-uploads-with-re-frame-and-reitit/8318)

<div class="topic-metadata">

**Author:** [@Webdev\_Tory](https://clojureverse.org/u/Webdev_Tory)\
**Replies:** 7\
**Last updated:** [December 18, 2021, 3:41pm UTC](https://clojureverse.org/t/how-to-execute-and-handle-file-uploads-with-re-frame-and-reitit/8318 "2021-12-18T15:41:47Z")

</div>

We have an application using re-frame, re-frame-http-fx, and reitit on the backend. At length we were finally able to get the upload to attach an file to some FormData, but we are having a hard time receiving it on the b…

---

## [Switching out "dev" and "prod" environments with deps.edn](https://clojureverse.org/t/switching-out-dev-and-prod-environments-with-deps-edn/8282)

<div class="topic-metadata">

**Author:** [@zmitchell](https://clojureverse.org/u/zmitchell)\
**Replies:** 9\
**Last updated:** [October 29, 2021, 5:06pm UTC](https://clojureverse.org/t/switching-out-dev-and-prod-environments-with-deps-edn/8282 "2021-10-29T17:06:15Z")

</div>

I’m learning web development at the moment and I’m using “Web Development with Clojure” as a resource, but the book is written around the Luminus framework. Luminus does a lot of things for you and is still based on Lein…

---

## [Isn't Clojure overkill for small web apps?](https://clojureverse.org/t/isnt-clojure-overkill-for-small-web-apps/6444)

<div class="topic-metadata">

**Author:** [@josefrichter](https://clojureverse.org/u/josefrichter)\
**Replies:** 48\
**Last updated:** [August 31, 2021, 4:48am UTC](https://clojureverse.org/t/isnt-clojure-overkill-for-small-web-apps/6444 "2021-08-31T04:48:45Z")

</div>

Hi folks, May I ask for your opinion and advice, please? Is Clojure a reasonable choice for simple web apps? I am talking about hobby projects, mostly CRUD stuff, dozens of users. Things like a simple booking system for…

---

## [Ctmx - super lightweight web dev](https://clojureverse.org/t/ctmx-super-lightweight-web-dev/7962)

<div class="topic-metadata">

**Author:** [@Matthew\_Molloy](https://clojureverse.org/u/Matthew_Molloy)\
**Replies:** 42\
**Last updated:** [August 23, 2021, 4:26pm UTC](https://clojureverse.org/t/ctmx-super-lightweight-web-dev/7962 "2021-08-23T16:26:01Z")

</div>

Hi fellow Clojurians! I have been writing Clojure professionally for about 8 years now, and recently came across the https://htmx.org library. It provides an elegant way to build dynamic web apps, so I decided to con…

---

## [Netty HTTP + Websockets wrapped in core.async: jdf/talk](https://clojureverse.org/t/netty-http-websockets-wrapped-in-core-async-jdf-talk/7535)

<div class="topic-metadata">

**Author:** [@jdf](https://clojureverse.org/u/jdf)\
**Replies:** 0\
**Last updated:** [April 18, 2021, 1:40am UTC](https://clojureverse.org/t/netty-http-websockets-wrapped-in-core-async-jdf-talk/7535 "2021-04-18T01:40:44Z")

</div>

Hi everyone, I’ve written a wrapper for Netty to try to make websockets easy to use from Clojure without bringing in lots of dependencies. It also provides some conveniences for managing HTTP uploads, taking advantage o…

---

## [Tryclojure.com, instant REPL built by Raynes](https://clojureverse.org/t/tryclojure-com-instant-repl-built-by-raynes/7406)

<div class="topic-metadata">

**Author:** [@joelittlejohn](https://clojureverse.org/u/joelittlejohn)\
**Replies:** 1\
**Last updated:** [March 30, 2021, 8:58pm UTC](https://clojureverse.org/t/tryclojure-com-instant-repl-built-by-raynes/7406 "2021-03-30T20:58:52Z")

</div>

I decided to reinstate the simple online REPL that Raynes created: http://tryclojure.com This is a Clojure/Java equivalent of the ClojureScript/JavaScript REPL at clojurescript.io. There are many online REPLs that are…

---

## [How to use gzip compression on my Clojure app?](https://clojureverse.org/t/how-to-use-gzip-compression-on-my-clojure-app/6825)

<div class="topic-metadata">

**Author:** [@Webdev\_Tory](https://clojureverse.org/u/Webdev_Tory)\
**Replies:** 1\
**Last updated:** [November 15, 2020, 8:37am UTC](https://clojureverse.org/t/how-to-use-gzip-compression-on-my-clojure-app/6825 "2020-11-15T08:37:35Z")

</div>

Like many single-page applications there are several sizable payloads involved in my Clojure apps: the initial app.js, MBs worth of data for populating pages, etc. I want to use gzip compression in my (Leiningen, Ring) a…

---

## [Websockets for Clojure Sente in Apache Reverse Proxy](https://clojureverse.org/t/websockets-for-clojure-sente-in-apache-reverse-proxy/6747)

<div class="topic-metadata">

**Author:** [@Webdev\_Tory](https://clojureverse.org/u/Webdev_Tory)\
**Replies:** 0\
**Last updated:** [October 26, 2020, 5:30pm UTC](https://clojureverse.org/t/websockets-for-clojure-sente-in-apache-reverse-proxy/6747 "2020-10-26T17:30:08Z")

</div>

---

## [A Lesson in the Beauty of Data - XML Parsing on the Front End: to CLJS or not](https://clojureverse.org/t/a-lesson-in-the-beauty-of-data-xml-parsing-on-the-front-end-to-cljs-or-not/6395)

<div class="topic-metadata">

**Author:** [@Webdev\_Tory](https://clojureverse.org/u/Webdev_Tory)\
**Replies:** 0\
**Last updated:** [August 12, 2020, 10:45pm UTC](https://clojureverse.org/t/a-lesson-in-the-beauty-of-data-xml-parsing-on-the-front-end-to-cljs-or-not/6395 "2020-08-12T22:45:41Z")

</div>

---

## [Route Authorization in CLJ](https://clojureverse.org/t/route-authorization-in-clj/6380)

<div class="topic-metadata">

**Author:** [@Webdev\_Tory](https://clojureverse.org/u/Webdev_Tory)\
**Replies:** 0\
**Last updated:** [August 10, 2020, 6:33pm UTC](https://clojureverse.org/t/route-authorization-in-clj/6380 "2020-08-10T18:33:00Z")

</div>

Building a Swagger app with fairly complex capability system, what is the most elegant way of expressing, e.g., ‘GET on “/users” is allowed by yellow-admins’? We are using reitit but would love any examples or use-cases …

---

## [Fine-grained per-method middleware use with Reitit | Tech.ToryAnderson.com](https://clojureverse.org/t/fine-grained-per-method-middleware-use-with-reitit-tech-toryanderson-com/6348)

<div class="topic-metadata">

**Author:** [@Webdev\_Tory](https://clojureverse.org/u/Webdev_Tory)\
**Replies:** 0\
**Last updated:** [August 5, 2020, 11:50pm UTC](https://clojureverse.org/t/fine-grained-per-method-middleware-use-with-reitit-tech-toryanderson-com/6348 "2020-08-05T23:50:33Z")

</div>

---

## [How to handler-test file uploads?](https://clojureverse.org/t/how-to-handler-test-file-uploads/6310)

<div class="topic-metadata">

**Author:** [@Webdev\_Tory](https://clojureverse.org/u/Webdev_Tory)\
**Replies:** 0\
**Last updated:** [July 29, 2020, 4:42pm UTC](https://clojureverse.org/t/how-to-handler-test-file-uploads/6310 "2020-07-29T16:42:48Z")

</div>

In the past when I’ve done generic file uploads through a browser, it gets ring-interpreted into the \`\[:params :file\]\` path. Has anyone had success writing unit tests for the handler of such a route? Should I just write …
