# Latest recommendations for Elm dev tools?

**URL:** <https://discourse.elm-lang.org/t/latest-recommendations-for-elm-dev-tools/7129>\
**Category:** Request Feedback\
**Created:** [March 20, 2021, 6:16pm UTC](https://discourse.elm-lang.org/t/latest-recommendations-for-elm-dev-tools/7129 "2021-03-20T18:16:41Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![tkuriyama](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.elm-lang.org/tkuriyama/32/3930_2.png) [@tkuriyama](https://discourse.elm-lang.org/u/tkuriyama)\
**Post date:** [March 20, 2021, 6:16pm UTC](https://discourse.elm-lang.org/t/latest-recommendations-for-elm-dev-tools/7129/1 "2021-03-20T18:16:41Z")

</div>

It seems like every few months, I discover something great that I wish I’d known about earlier… I’m listing a few I’ve been using, and am curious what else is out there 🙂

Also (or in particular), what are your recommendations for compression after compiling with `--optimize`? The [Elm guide mentions uglify](https://guide.elm-lang.org/optimization/asset_size.html); there’s also [elm-minify](https://github.com/opvasger/elm-minify), which says it’s deprecated in favor of the Google Closure Compiler. (There was at least [one thread](https://discourse.elm-lang.org/t/comparing-uglifyjs-and-google-closure-compiler/2883/4) about this in the past. …)

**Testing**

- elm-test
- elm-coverage

**Formatting**

- elm-format

**Linting**

- elm-analyse

**Other**

- elm-live

---

<div class="post-metadata">

**Author:** ![dillonkearns](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.elm-lang.org/dillonkearns/32/1587_2.png) [@dillonkearns](https://discourse.elm-lang.org/u/dillonkearns)\
**Post date:** [March 20, 2021, 7:20pm UTC](https://discourse.elm-lang.org/t/latest-recommendations-for-elm-dev-tools/7129/2 "2021-03-20T19:20:37Z")

</div>

Excellent question!

There are a lot of neat tools coming out lately. `elm-coverage` is a wonderful tool, and I don’t think it’s widely known. I think there are many other tools like that! Here are a few others that I really enjoy and use on a regular basis:

## General Elm development tools

- [`elm-optimize-level-2`](https://www.npmjs.com/package/elm-optimize-level-2) is a really neat project. I usually use that along with that project’s [instructions on minification](https://github.com/mdgriffith/elm-optimize-level-2/blob/HEAD/notes/minification.md) to run terser and the optimized compilation.
- [`elm-tooling-cli`](https://elm-tooling.github.io/elm-tooling-cli/) - (we did an [Elm Radio episode on elm-tooling CLI](https://elm-radio.com/episode/elm-tooling/))
- [`elm-review`](https://github.com/jfmengels/elm-review) - it’s like `elm-analyse` (which is no longer maintained I believe), but it is made to be a platform where the community can build all sorts of custom rules and autofixes. It’s an excellent tool, highly recommended! There’s already a vibrant ecosystem of great Rules you can setup, and it’s only going to get better. We did a couple of Elm Radio episodes about `elm-review` as well ([episode 3](https://elm-radio.com/episode/getting-started-with-elm-review/) and [episode 21](https://elm-radio.com/episode/elm-review-tips/))
- [Elm Debug Helper](https://chrome.google.com/webstore/detail/elm-debug-helper/edlhclhffmclbhgifomamlomnfolnepa?hl=en) is a Chrome plugin for nicer formatted Debug.log output of Elm data types
- [`elm-json`](https://github.com/zwilias/elm-json) is a command line tool that’s the de facto way to install Elm packages and upgrade dependencies, but this isn’t easy to discover that for newcomers.

## Handy Web Codegen Tools

- [html-to-elm.com/](https://html-to-elm.com/) - this is a tool I built for turning HTML and SVG into Elm. There have been other tools like this in the past, but I tried to polish some of the rough edges of past tools, as well as add support for generating code for `elm-tailwind-modules`
- (There used to be a helpful page called [json2elm.com](http://json2elm.com), but I noticed that the domain lapsed recently. The [is still code is hosted here on GitHub](https://github.com/eeue56/json-to-elm))

## Tools for Type-Safe Domain-Specific-Languages

There are a lot of “Types Without Borders” category tools (keeping a type-safe bridge between domains). Here are some of my favorites (I’m a bit biased on some of these 😉)

- [`elm-graphql`](https://github.com/dillonkearns/elm-graphql)
- [`elm-tailwind-modules`](https://github.com/matheus23/elm-tailwind-modules)
- [`elm-spa`](http://elm-spa.dev/)
- [`elm-ts-interop`](http://elm-ts-interop.com/)

## Tools for Package Authors

I wrote a guide with a collection of best practices for package authors here: [GitHub - dillonkearns/idiomatic-elm-package-guide: Everything you need to know to publish a useful, idiomatic Elm package!](https://github.com/dillonkearns/idiomatic-elm-package-guide). I also have a starter template repo for Elm packages: [GitHub - dillonkearns/elm-package-starter: Starter template for an Elm package.](https://github.com/dillonkearns/elm-package-starter).

There are several tools that Elm package authors use, but they are sort of implicit knowledge that people pick up by word of mouth.

[`elm-doc-preview`](https://github.com/dmy/elm-doc-preview) (it’s a CLI tool for live reloading documentation on your local machine, as well as a web site for sharing work-in-progress docs before you publish a package version)  
[`elm-verify-examples`](https://www.npmjs.com/package/elm-verify-examples) - allows you to run `elm-test` test cases by defining examples with the expected output in your Elm package’s docs. This is important because it helps you keep your docs in sync as “living documents.”  
[`elm-publish-action`](https://github.com/dillonkearns/elm-publish-action) - helps automate running `elm publish` within your CI pipeline so you can run it after your CI passes

## Summary

I’m probably missing tons of cool tools. These are just the ones that I find myself reaching for often.

I’d love to hear from other people about what their favorite gems are out there (I know there are a lot more!).

---

<div class="post-metadata">

**Author:** ![mattpiz](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.elm-lang.org/mattpiz/32/860_2.png) [@mattpiz](https://discourse.elm-lang.org/u/mattpiz)\
**Post date:** [March 20, 2021, 8:10pm UTC](https://discourse.elm-lang.org/t/latest-recommendations-for-elm-dev-tools/7129/3 "2021-03-20T20:10:47Z")

</div>

In addition to those already listed, you can give a try at [elm-test-rs](https://discourse.elm-lang.org/t/announcing-elm-test-rs-1-0-0/7024) as an alternative to elm-test if you want capture of `Debug.log` or try to avoid npm.

I can also recommend [elm-tooling-action](https://github.com/mpizenberg/elm-tooling-action) to complement elm-tooling-cli in a GitHub CI. I’m a bit biased since I made those two tools ^^ (elm-test-rs and elm-tooling-action).

There is also the [elm language server](https://github.com/elm-tooling/elm-language-server) which is the best way to have a great coding experience when using VS Code or Vim.

---

<div class="post-metadata">

**Author:** ![razze](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.elm-lang.org/razze/32/1650_2.png) [@razze](https://discourse.elm-lang.org/u/razze)\
**Post date:** [March 22, 2021, 10:23pm UTC](https://discourse.elm-lang.org/t/latest-recommendations-for-elm-dev-tools/7129/4 "2021-03-22T22:23:41Z")

</div>

not elm tools, but as you asked for optimize explicitly, it seems like quiet some people are using parcel for packaging and terser seemed to be the way to go the last time I checked when it comes to minifying.

---

<div class="post-metadata">

**Author:** ![opvasger](https://avatars.discourse-cdn.com/v4/letter/o/8e8cbc/32.png) [@opvasger](https://discourse.elm-lang.org/u/opvasger)\
**Post date:** [March 22, 2021, 10:53pm UTC](https://discourse.elm-lang.org/t/latest-recommendations-for-elm-dev-tools/7129/5 "2021-03-22T22:53:05Z")

</div>

Esbuild is what I use at the moment.

One of the technical limitations with it for Javascript-folks has been code-splitting, but as Elm goes for small single build-output, I think it does everything you we want well.

I’m pretty sure Evan Wallace is working on code-splitting at the moment, but can’t remember.

I’ll be doing a benchmark on available tooling against realworld-example in terms of bundling/minification this week. I’ll try and remember to post it here.

---

<div class="post-metadata">

**Author:** ![alexkorban](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.elm-lang.org/alexkorban/32/3242_2.png) [@alexkorban](https://discourse.elm-lang.org/u/alexkorban)\
**Post date:** [March 23, 2021, 12:22am UTC](https://discourse.elm-lang.org/t/latest-recommendations-for-elm-dev-tools/7129/6 "2021-03-23T00:22:39Z")

</div>

There’s a big categorised list of all the tools that I’ve come across (currently at 91 entries) here: [https://korban.net/elm/catalog/tools](https://korban.net/elm/catalog/tools)

---

<div class="post-metadata">

**Author:** ![dillonkearns](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.elm-lang.org/dillonkearns/32/1587_2.png) [@dillonkearns](https://discourse.elm-lang.org/u/dillonkearns)\
**Post date:** [March 23, 2021, 3:08am UTC](https://discourse.elm-lang.org/t/latest-recommendations-for-elm-dev-tools/7129/7 "2021-03-23T03:08:43Z")

</div>

I didn’t want to derail this thread, so I posted this question as a separate topic.

> [@Elm minification with ESBuild?](https://discourse.elm-lang.org/t/elm-minification-with-esbuild/7143):
>
> It seems like [esbuild](https://esbuild.github.io/) can perform minification significantly faster than [terser](https://github.com/terser/terser). I’m not sure how to get the equivalent steps with esbuild of the [recommended Elm minification commands](https://guide.elm-lang.org/optimization/asset_size.html#instructions), which currently use terser with some options for marking pure functions. There’s a GitHub issue that discusses this, but I didn’t fully grasp the conclusion of the thread or whether it resulted in minified output that was as good as the standard terser commands. Has anybody had success with this? It seems lik…

I’d be curious to hear if you’ve figured this out!

---

<div class="post-metadata">

**Author:** ![tkuriyama](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.elm-lang.org/tkuriyama/32/3930_2.png) [@tkuriyama](https://discourse.elm-lang.org/u/tkuriyama)\
**Post date:** [March 24, 2021, 10:32pm UTC](https://discourse.elm-lang.org/t/latest-recommendations-for-elm-dev-tools/7129/8 "2021-03-24T22:32:24Z")

</div>

Thanks for the feedback, I’ve added a few to my list!

I wonder if there is some enhancement to the official package list that could help with discovery and filtering as the community grows (e.g. download counts or ratings like [Hackage](https://hackage.haskell.org/packages/browse))…

---

<div class="post-metadata">

**Author:** ![system](https://canada1.discourse-cdn.com/flex035/uploads/elm_lang/original/1X/50a05e53677a2c3b47776d7abd0f113eb50193a1.png) [@system](https://discourse.elm-lang.org/u/system)\
**Post date:** [April 3, 2021, 10:32pm UTC](https://discourse.elm-lang.org/t/latest-recommendations-for-elm-dev-tools/7129/9 "2021-04-03T22:32:43Z")

</div>

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