# Elvis - an Erlang linter

**URL:** <https://erlangforums.com/t/elvis-an-erlang-linter/4813>\
**Category:** Libraries\
**Tags:** erlang, linter\
**Created:** [June 6, 2025, 6:58am UTC](https://erlangforums.com/t/elvis-an-erlang-linter/4813 "2025-06-06T06:58:24Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![elbrujohalcon](https://erlangforums.com/user_avatar/erlangforums.com/elbrujohalcon/32/241_2.png) [@elbrujohalcon](https://erlangforums.com/u/elbrujohalcon)\
**Post date:** [June 6, 2025, 6:58am UTC](https://erlangforums.com/t/elvis-an-erlang-linter/4813/1 "2025-06-06T06:58:24Z")

</div>

# Elvis

I’m opening the main thread here for the Elvis-related libraries:

- [elvis\_core | Hex](https://hex.pm/packages/elvis_core) **-** The heart of all Elvis libraries, where all the rules are implemented.
- [elvis | Hex](https://hex.pm/packages/elvis) **-** The CLI that you can use to run Elvis in your projects if you don’t use **rebar3** or **erlang.mk**.
- [rebar3\_lint | Hex](https://hex.pm/packages/rebar3_lint) **-** The plugin that you can use to run Elvis in your rebar3-managed projects.
- [https://github.com/inaka/elvis.mk](https://elvis.mk) **-** The plugin that you can use to run Elvis in your elrang.mk-bound projects.

## What’s Elvis?

Elvis is an Erlang linter. You can find more about it in its repository: [GitHub - inaka/elvis\_core: The core of an Erlang linter](https://github.com/inaka/elvis_core)

Or watching this somewhat old video:

[![](https://img.youtube.com/vi/Q88hGUJUwHs/maxresdefault.jpg "Elvis (and how to properly rock in the Erlang World)") ](https://www.youtube.com/watch?v=Q88hGUJUwHs)

---

<div class="post-metadata">

**Author:** ![elbrujohalcon](https://erlangforums.com/user_avatar/erlangforums.com/elbrujohalcon/32/241_2.png) [@elbrujohalcon](https://erlangforums.com/u/elbrujohalcon)\
**Post date:** [June 14, 2025, 3:25pm UTC](https://erlangforums.com/t/elvis-an-erlang-linter/4813/2 "2025-06-14T15:25:33Z")

</div>

The newest version of [Elvis](https://erlangforums.com/t/elvis-an-erlang-linter/4813) is published!!

You can find all the new stuff in [elvis\_core docs](https://github.com/inaka/elvis_core/releases/tag/4.1.0).

It includes 6 new rules, fixes for plenty of others, support for OTP28 (with some rules for the new constructs, too), modernized and expanded [documentation](https://github.com/inaka/elvis_core/blob/main/RULES.md), and much more!

These are the Hex releases:

- [elvis\_core | Hex](https://hex.pm/packages/elvis_core/4.1.0)
- [elvis | Hex](https://hex.pm/packages/elvis/4.1.0)
- [rebar3\_lint | Hex](https://hex.pm/packages/rebar3_lint/4.1.0)

Thanks @belltoy, @williamthome, @pablobrud and all the other contributors!

And congratulations to the maintainers (@paulo-f-oliveira, @bormilan1) for their awesome job!

![](https://media.tenor.com/7jzUwpzXt0MAAAAM/elvis-presley.gif)

---

<div class="post-metadata">

**Author:** ![paulo-f-oliveira](https://erlangforums.com/user_avatar/erlangforums.com/paulo-f-oliveira/32/1103_2.png) [@paulo-f-oliveira](https://erlangforums.com/u/paulo-f-oliveira)\
**Post date:** [June 14, 2025, 7:37pm UTC](https://erlangforums.com/t/elvis-an-erlang-linter/4813/3 "2025-06-14T19:37:20Z")

</div>

Fwiw, [katana\_code | Hex](https://hex.pm/packages/katana_code/2.4.1) (now 2.4.1) also got a release to fully support OTP 28.

---

<div class="post-metadata">

**Author:** ![phild](https://erlangforums.com/user_avatar/erlangforums.com/phild/32/742_2.png) [@phild](https://erlangforums.com/u/phild)\
**Post date:** [June 23, 2025, 10:20am UTC](https://erlangforums.com/t/elvis-an-erlang-linter/4813/4 "2025-06-23T10:20:34Z")

</div>

Good stuff.

I might have spotted an issue in the documentation:

There is a rule named `No & `, the text of which which says:

> Use of `$ ` should be avoided.

The config option is:

> `{elvis_style, no_dollar_space, #{}}`

Thus it looks like it is the title that is incorrect.

---

<div class="post-metadata">

**Author:** ![elbrujohalcon](https://erlangforums.com/user_avatar/erlangforums.com/elbrujohalcon/32/241_2.png) [@elbrujohalcon](https://erlangforums.com/u/elbrujohalcon)\
**Post date:** [June 23, 2025, 10:52am UTC](https://erlangforums.com/t/elvis-an-erlang-linter/4813/5 "2025-06-23T10:52:55Z")

</div>

You’re 100% correct. An bug report and/or a PR to fix this would be highly appreciated.

---

<div class="post-metadata">

**Author:** ![phild](https://erlangforums.com/user_avatar/erlangforums.com/phild/32/742_2.png) [@phild](https://erlangforums.com/u/phild)\
**Post date:** [June 24, 2025, 8:15am UTC](https://erlangforums.com/t/elvis-an-erlang-linter/4813/6 "2025-06-24T08:15:16Z")

</div>

Some kind soul got to it before I did 🙂

---

<div class="post-metadata">

**Author:** ![elbrujohalcon](https://erlangforums.com/user_avatar/erlangforums.com/elbrujohalcon/32/241_2.png) [@elbrujohalcon](https://erlangforums.com/u/elbrujohalcon)\
**Post date:** [February 17, 2026, 7:43am UTC](https://erlangforums.com/t/elvis-an-erlang-linter/4813/7 "2026-02-17T07:43:52Z")

</div>

We recently published 2 new versions of Elvis, the latest one being `4.2.1`:

- [elvis\_core | Hex](https://hex.pm/packages/elvis_core/4.2.1)
- [elvis | Hex](https://hex.pm/packages/elvis/4.2.1)
- [rebar3\_lint | Hex](https://hex.pm/packages/rebar3_lint/4.2.1)
- [Release 4.2.1 · inaka/elvis.mk · GitHub](https://github.com/inaka/elvis.mk/releases/tag/4.2.1)

And we have a new member!!  
Welcome @NelsonVides to the Elvis maintainers team!!  
Thank you for joining us.

---

<div class="post-metadata">

**Author:** ![NelsonVides](https://erlangforums.com/user_avatar/erlangforums.com/nelsonvides/32/1205_2.png) [@NelsonVides](https://erlangforums.com/u/NelsonVides)\
**Post date:** [March 17, 2026, 8:47am UTC](https://erlangforums.com/t/elvis-an-erlang-linter/4813/8 "2026-03-17T08:47:42Z")

</div>

We’ve recently release a big new major version of Elvis, jumping into v5. This release introduces many new rules like robot butt (prefer `[_ | _] = list` over `0 < length(List)`), stricter consistent variable naming (`User_Id`, `UserID`, `Userid` all probably refer to the same entity and therefore could use a single name!), ABC size and cyclomatic complexity rules, and a few other niceties. It introduces a lot of performance improvements, and a more pleasant configuration.

- [elvis\_core | Hex](https://hex.pm/packages/elvis_core/5.0.1)
- [elvis | Hex](https://hex.pm/packages/elvis/5.0.1)
- [rebar3\_lint | Hex](https://hex.pm/packages/rebar3_lint/5.0.1)
- [Release 5.0.1 · inaka/elvis.mk · GitHub](https://github.com/inaka/elvis.mk/releases/tag/5.0.1)

Add it to your projects let Elvis rock your code!

---

<div class="post-metadata">

**Author:** ![elbrujohalcon](https://erlangforums.com/user_avatar/erlangforums.com/elbrujohalcon/32/241_2.png) [@elbrujohalcon](https://erlangforums.com/u/elbrujohalcon)\
**Post date:** [March 23, 2026, 10:41am UTC](https://erlangforums.com/t/elvis-an-erlang-linter/4813/9 "2026-03-23T10:41:45Z")

</div>

New minor version is out, with these changes:

- Fix compilation with OTP29.
- Improved docs at Hexdocs. Now all the rules are accessible at [elvis\_core v5.0.2 — Documentation](https://hexdocs.pm/elvis_core/)
- Fix `macro_definition_parenthesis` bug allowing multi-line macros to be properly parsed.
- Multiple improvements on the documentation of some rules.
- Act on `else` as a reserved word exception to atom naming conventions (thanks @williamthome for this one!!)

Here you can find it:

- `elvis_core`:
  - [elvis\_core | Hex](https://hex.pm/packages/elvis_core/5.0.2)
  - [elvis\_core — elvis\_core v5.0.2](https://hexdocs.pm/elvis_core/5.0.2/readme.html) 🤩

- `elvis`: [elvis | Hex](https://hex.pm/packages/elvis/5.0.2)
- `elvis.mk`: [Release 5.0.2 · inaka/elvis.mk · GitHub](https://github.com/inaka/elvis.mk/releases/tag/5.0.2)
- `rebar3_lint` : [rebar3\_lint | Hex](https://hex.pm/packages/rebar3_lint/5.0.2)

---

<div class="post-metadata">

**Author:** ![elbrujohalcon](https://erlangforums.com/user_avatar/erlangforums.com/elbrujohalcon/32/241_2.png) [@elbrujohalcon](https://erlangforums.com/u/elbrujohalcon)\
**Post date:** [May 29, 2026, 6:59am UTC](https://erlangforums.com/t/elvis-an-erlang-linter/4813/10 "2026-05-29T06:59:37Z")

</div>

New minor version, with a lot of performance upgrades, thanks to @williamthome 🤝

- elvis\_core:
  - [Release 5.0.4 · inaka/elvis\_core · GitHub](https://github.com/inaka/elvis_core/releases/tag/5.0.4)
  - [elvis\_core | Hex](https://hex.pm/packages/elvis_core/5.0.4)

- elvis:
  - [Release 5.0.4 · inaka/elvis · GitHub](https://github.com/inaka/elvis/releases/tag/5.0.4)
  - [elvis | Hex](https://hex.pm/packages/elvis/5.0.4)

- elvis.mk:
  - [Release 5.0.4 · inaka/elvis.mk · GitHub](https://github.com/inaka/elvis.mk/releases/tag/5.0.4)

- rebar3\_lint:
  - [Release 5.0.4 · project-fifo/rebar3\_lint · GitHub](https://github.com/project-fifo/rebar3_lint/releases/tag/5.0.4)
  - [rebar3\_lint | Hex](https://hex.pm/packages/rebar3_lint/5.0.4)

---

<div class="post-metadata">

**Author:** ![elbrujohalcon](https://erlangforums.com/user_avatar/erlangforums.com/elbrujohalcon/32/241_2.png) [@elbrujohalcon](https://erlangforums.com/u/elbrujohalcon)\
**Post date:** [August 21, 2026, 7:27am UTC](https://erlangforums.com/t/elvis-an-erlang-linter/4813/11 "2026-08-21T07:27:36Z")

</div>

# New major release: `6.0.0` !!

This one comes with support for OTP29 (particularly, native records) and a bunch of minor improvements and bug fixes.

### Links

- [Release 6.0.0 · inaka/elvis\_core · GitHub](https://github.com/inaka/elvis_core/releases/tag/6.0.0)
- [elvis\_core | Hex](https://hex.pm/packages/elvis_core/6.0.0)
- [elvis | Hex](https://hex.pm/packages/elvis/6.0.0)
- [rebar3\_lint | Hex](https://hex.pm/packages/rebar3_lint/6.0.0)
- [Release 6.0.0 · inaka/elvis.mk · GitHub](https://github.com/inaka/elvis.mk/releases/tag/6.0.0)
