Routing SPAs in CLJS? Secretary's dead with cljs 1.10

After hours of debugging I worked my way to this issue: . It seems that Secretary is derelict and no longer maintained. WIth the latest clojurescripts, any secretary/defroute with destructuring fails (and might take you a long time to debug). I’d really like to avoid forking it; what other solutions are you using?

Metosin’s Reitit is really nice, and Metosin does a good job maintaining their libraries.

I really wish unmaintained libraries would have a clear warning in the readme. It’s a somewhat common experience for JS devs coming to ClojureScript to try out a library, work through the docs, only to run into bugs they finally realize are the result of the fact that the library is unmaintained. It gives new people the impression that the ClojureScript ecosystem is more unstable and unpredictable than it really is.


The JavaScript router5 library (used in cljs-spa-example) works well with ClojureScript.

I have been playing around with Bidi+pushy, seems to work well enough.

1 Like

For now you can use this version which is patched for the newest CLJS.

1 Like

Thanks borkdude (for the heads-up and the link to the forked repo)!

Sure would be great to have more abandoned, yet popular projects like this transferred to new maintainers. There is some value in not having to needlessly refactor perfectly functional parts of one’s code base.

In my case, I use secretary + accountant because it was the easiest way to get routing and clickable links going in my SPA (literally a two-liner to get accountant working once you have the secretary routes set up).


Letting the cat out of the bag.
I’ve created for this purpose, and secretary is its first project.
I’ve wanted cli-commons for the longest time, mainly to provide a home for old, abandoned, done Clojure projects that still see use.

There are many things an org like clj-commons could concern itself with, but for now, its main focus is to maintain unmaintained libs.

So, secretary is available here: and at clojars here

Oh, and both PR’s, issues, and help is welcome :slight_smile:


@slipset A repository transfer[0] may be more suitable than the forked repo.



I really like sibiro, which just simple enough and works on both the JVM and JS sides of the house:

If I was starting from scratch, I’d probably look at retit, which also ticks the boxes I need and has decent documentation that doesn’t give me a headache.

the repo is now properly transferred:


I’m also using Reitit with Accountant. Works really nice.

I’ve switched over to Reitit, and used it as an opportunity to ditch the Accountant dependency since I don’t need Accountant to get rid of URL fragments anymore. What does Accountant still give you?

Using Accountant for handling browser history and URL clicks.

Doesn’t Reitit handle both of those out-of-the-box?

Hm, didn’t know it provided that functionality. I wrote the code in the beginning of summer, so could be sth they added later. Thanks for the tip!

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.