HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
MarcoPolo
servant
HTML2016–2017
MarcoPolo / servant

servant

A Clojurescript library for interacting with web workers sanely

2Distinct people
2Mentions
0Explicit recommenders
159GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A Clojurescript library for interacting with web workers sanely

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:03:16 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by week2 dated mentions

Observed mentions: 2016-12-04 00:28:57 UTC to 2017-05-09 14:21:20 UTC. Weeks start Monday, UTC.

012016-11-28 00:00:00 UTC to 2016-12-05 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsNov 282016-12-05 00:00:00 UTC to 2016-12-12 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-12-12 00:00:00 UTC to 2016-12-19 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-12-19 00:00:00 UTC to 2016-12-26 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2016-12-26 00:00:00 UTC to 2017-01-02 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-01-02 00:00:00 UTC to 2017-01-09 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-01-09 00:00:00 UTC to 2017-01-16 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-01-16 00:00:00 UTC to 2017-01-23 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-01-23 00:00:00 UTC to 2017-01-30 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-01-30 00:00:00 UTC to 2017-02-06 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-02-06 00:00:00 UTC to 2017-02-13 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-02-13 00:00:00 UTC to 2017-02-20 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 commentsFeb 132017-02-20 00:00:00 UTC to 2017-02-27 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-02-27 00:00:00 UTC to 2017-03-06 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-03-06 00:00:00 UTC to 2017-03-13 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-03-13 00:00:00 UTC to 2017-03-20 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-03-20 00:00:00 UTC to 2017-03-27 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-03-27 00:00:00 UTC to 2017-04-03 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-04-03 00:00:00 UTC to 2017-04-10 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-04-10 00:00:00 UTC to 2017-04-17 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-04-17 00:00:00 UTC to 2017-04-24 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-04-24 00:00:00 UTC to 2017-05-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-05-01 00:00:00 UTC to 2017-05-08 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-05-08 00:00:00 UTC to 2017-05-15 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsMay 8

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
Nov 282016-11-28 00:00:00 UTC2016-12-05 00:00:00 UTC101
Dec 52016-12-05 00:00:00 UTC2016-12-12 00:00:00 UTC000
Dec 122016-12-12 00:00:00 UTC2016-12-19 00:00:00 UTC000
Dec 192016-12-19 00:00:00 UTC2016-12-26 00:00:00 UTC000
Dec 262016-12-26 00:00:00 UTC2017-01-02 00:00:00 UTC000
Jan 22017-01-02 00:00:00 UTC2017-01-09 00:00:00 UTC000
Jan 92017-01-09 00:00:00 UTC2017-01-16 00:00:00 UTC000
Jan 162017-01-16 00:00:00 UTC2017-01-23 00:00:00 UTC000
Jan 232017-01-23 00:00:00 UTC2017-01-30 00:00:00 UTC000
Jan 302017-01-30 00:00:00 UTC2017-02-06 00:00:00 UTC000
Feb 62017-02-06 00:00:00 UTC2017-02-13 00:00:00 UTC000
Feb 132017-02-13 00:00:00 UTC2017-02-20 00:00:00 UTC000
Feb 202017-02-20 00:00:00 UTC2017-02-27 00:00:00 UTC000
Feb 272017-02-27 00:00:00 UTC2017-03-06 00:00:00 UTC000
Mar 62017-03-06 00:00:00 UTC2017-03-13 00:00:00 UTC000
Mar 132017-03-13 00:00:00 UTC2017-03-20 00:00:00 UTC000
Mar 202017-03-20 00:00:00 UTC2017-03-27 00:00:00 UTC000
Mar 272017-03-27 00:00:00 UTC2017-04-03 00:00:00 UTC000
Apr 32017-04-03 00:00:00 UTC2017-04-10 00:00:00 UTC000
Apr 102017-04-10 00:00:00 UTC2017-04-17 00:00:00 UTC000
Apr 172017-04-17 00:00:00 UTC2017-04-24 00:00:00 UTC000
Apr 242017-04-24 00:00:00 UTC2017-05-01 00:00:00 UTC000
May 12017-05-01 00:00:00 UTC2017-05-08 00:00:00 UTC000
May 82017-05-08 00:00:00 UTC2017-05-15 00:00:00 UTC101

What Hacker News says

2 sources
Imagine the power of your whole programming language available to you at compile time. That is a Lisp macro. It gives you the ability to write simple and elegant code, which can then be compiled down into the unreadable nasty code after, while still being as fast as if you wrote the nasty code by hand. Another term for this is zero-cost abstraction. What is nice in Lisp is you can also use the (macroexpand ) function to see what Lisp code will actually be generated.. it's Lisp all the way down! If you look at the Servant library [1] for ClojureScript, they wrapped the callback-hell mess that is Javascript web workers (read: the only way to actually multi-thread on the web), into beautiful Go-style channels, via the use of macros. [1] https://github.com/MarcoPolo/servant
In Lisp Meta-Programming for C++ Developers: First Macros
It'd be doable but getting a nice Clojure-y API over it would take a little more work. To start, you could try making a 1-to-1 mapping by closing over the web worker methods with cljs functions. To keep track of the web workers, you could put them in a cljs map inside an atom. This is what servant does to handle web workers.[0] The other interfaces could be handled in a similar way by closing over methods with functions too. It might be better after brute forcing a basic 1-to-1 style to create one or more layers of abstraction to make the interop more usable and Clojure-y. There could be cljs deftypes for the threads or web workers which hook into core cljs protocols[1] so that cljs.core functions would work over them. Macros could add syntactic sugar to lower level functions to make your API easier to use (looks like servant did that). T
Read the rest
here are lots of options for how to build a good API depending on how powerful an abstraction you want to make for yourself. Getting basic support for the library could work by just closing over functions and adding some glue though. [0]https://github.com/MarcoPolo/servant/blob/master/src/cljs/se... [1]https://github.com/clojure/clojurescript/blob/master/src/mai...
In Macchiato: ClojureScript on the Server

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.