What difference between files with .ex and .exs?

Hi. I am new in Elixir. I have got to know about two file extensions for Elixir - .ex and .exs. Documentation says:
" …In addition to the Elixir file extension .ex , Elixir also supports .exs files for scripting. Elixir treats both files exactly the same way, the only difference is in intention. .ex files are meant to be compiled while .exs files are used for scripting…"

I created two files (math.ex and math.exs) with the same code:
defmodule Math do
def sum(a, b) do
a + b

IO.puts Math.sum(1, 2)
I used commands elixir and elixirc on both files, but I have received the same results:

  • command elixirc created files Elixir.Math.beam ;
  • command elixir shows result in cmd;

So, I want to know if real difference between these extensions exists.

1 Like

.ex files compile down to beam files, which can be executed later, while .exs is compiled into memory and executed on the fly.

.ex has better runtime performance and it’s easier to include and load other files.

When I’m writing Elixir library or application my source code is written in .ex files.

I use .exs for commands, scripts, config files, test or anything else that is short lived. These files don’t have be precompiled and you can just run elixir on them.


Just to make this clear. The runtime characteristics of the code do not change.

What is different is that loading/including .exs files requires additional compilation, while .beam files don‘t need that. That „performance“ difference affects only initial loading though.


Thank for your answer. Now it is more clear for me, but it is a bit weird, that I make ‘elixirc math.exs’ and also get beam file (on my opinion😅)