# Isomorphic web apps in Haskell

**URL:** <https://discourse.haskell.org/t/isomorphic-web-apps-in-haskell/410>\
**Category:** Links\
**Created:** [March 4, 2019, 10:47am UTC](https://discourse.haskell.org/t/isomorphic-web-apps-in-haskell/410 "2019-03-04T10:47:08Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![juliendehos](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/juliendehos/32/642_2.png) [@juliendehos](https://discourse.haskell.org/u/juliendehos)\
**Post date:** [March 4, 2019, 10:47am UTC](https://discourse.haskell.org/t/isomorphic-web-apps-in-haskell/410/1 "2019-03-04T10:47:09Z")

</div>

Using Miso and Servant, we can easily write isomorphic web applications in Haskell. I presented these tools last week at a meet-up (LilleFP). Here are the [slides](https://juliendehos.gitlab.io/lillefp-2019-isomorphic/) and the [repository](https://gitlab.com/juliendehos/lillefp-2019-isomorphic).

---

<div class="post-metadata">

**Author:** ![jaspervdj](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/jaspervdj/32/586_2.png) [@jaspervdj](https://discourse.haskell.org/u/jaspervdj)\
**Post date:** [March 4, 2019, 1:11pm UTC](https://discourse.haskell.org/t/isomorphic-web-apps-in-haskell/410/2 "2019-03-04T13:11:50Z")

</div>

That’s a nice presentation!

I realize you didn’t invent this term, so don’t take this as a criticism on your talk, but I feel like _isomorphic_ is a horrible term to use for “it’s written in the same language / it shares code”. If we do need to use a fancy word for this, I feel like _homogeneous_ web apps would be much better.

---

<div class="post-metadata">

**Author:** ![juliendehos](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/juliendehos/32/642_2.png) [@juliendehos](https://discourse.haskell.org/u/juliendehos)\
**Post date:** [March 4, 2019, 2:48pm UTC](https://discourse.haskell.org/t/isomorphic-web-apps-in-haskell/410/3 "2019-03-04T14:48:01Z")

</div>

Thank you.  
I agree with you about the term _isomorphic_. Some use rather _universal_, e.g. [universal javascript](https://en.wikipedia.org/wiki/Isomorphic_JavaScript).

---

<div class="post-metadata">

**Author:** ![mmport80](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/mmport80/32/308_2.png) [@mmport80](https://discourse.haskell.org/u/mmport80)\
**Post date:** [March 5, 2019, 2:27pm UTC](https://discourse.haskell.org/t/isomorphic-web-apps-in-haskell/410/4 "2019-03-05T14:27:21Z")

</div>

well said, I always thought it was my problem not understanding that term well…

---

<div class="post-metadata">

**Author:** ![pagoda\_5b](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/pagoda_5b/32/115_2.png) [@pagoda\_5b](https://discourse.haskell.org/u/pagoda_5b)\
**Post date:** [March 6, 2019, 10:46am UTC](https://discourse.haskell.org/t/isomorphic-web-apps-in-haskell/410/5 "2019-03-06T10:46:38Z")

</div>

I don’t feel necessarily the same about your critique to the _isomorphic_ term.

I’m curious to know the reasons.

It means same shape, and it can easily convey the fact that you write the same code both for backend and frontend… I don’t see anything terrible with that.

Universal is more confusing to me, as it might convey really a lot of disparate meanings to the term.

---

<div class="post-metadata">

**Author:** ![Tehnix](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/tehnix/32/63_2.png) [@Tehnix](https://discourse.haskell.org/u/Tehnix)\
**Post date:** [March 6, 2019, 10:40pm UTC](https://discourse.haskell.org/t/isomorphic-web-apps-in-haskell/410/6 "2019-03-06T22:40:22Z")

</div>

Very nice slides! Thanks for sharing these 🙂

Was curious, how did you develop with ghcjs? Did you end up using nix, or stack or smth else?

---

<div class="post-metadata">

**Author:** ![juliendehos](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/juliendehos/32/642_2.png) [@juliendehos](https://discourse.haskell.org/u/juliendehos)\
**Post date:** [March 7, 2019, 12:47am UTC](https://discourse.haskell.org/t/isomorphic-web-apps-in-haskell/410/7 "2019-03-07T00:47:49Z")

</div>

I usually use Nix. Setting up a Ghc+Ghcjs project is not trivial but quite doable. In this project, I developed in a nix-shell only but the miso-xhr project (mentioned at the end of the slides) has nix-shell, nix-build and a CI/CD pipeline (using gitlab, heroku and docker images).

---

<div class="post-metadata">

**Author:** ![tdxiong](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/tdxiong/32/446_2.png) [@tdxiong](https://discourse.haskell.org/u/tdxiong)\
**Post date:** [April 9, 2019, 4:28pm UTC](https://discourse.haskell.org/t/isomorphic-web-apps-in-haskell/410/8 "2019-04-09T16:28:23Z")

</div>

At the stage, GHCJS compiled to js of huge size, compared to elm. Anyone built actually app of more pages for production? What is the compiled js size? and final size by minify and gzip?
