Intro

Elixir is a functional programming language with a syntax inspired by Ruby that runs on the Erlang virtual machine.

In this post I will cover the process of creating an Elixir package with Mix and publishing it to Hex.pm which is the package repository for Elixir progect.

Software Used

The following software was used in this post.

  • Elixir - 1.11.2

Create

Create a new Elixir project with the mix new <project-name> command.

cmd
mix new pensieve

# output

* creating README.md
* creating .formatter.exs
* creating .gitignore
* creating mix.exs
* creating lib
* creating lib/pensieve.ex
* creating test
* creating test/test_helper.exs
* creating test/pensieve_test.exs

Your Mix project was created successfully.
You can use "mix" to compile it, test it, and more:

    cd pensieve
    mix test

Run "mix help" for more commands.

Development

Whilst developing your app you can use the Elixir REPL IEX

You can load your package along with its dependencies into IEX with the iex -S mix command from your project directory.

This will compile your app and its dependencies into the IEX environment making all the functions available to use.

cmd
iex -S mix

# output

Erlang/OTP 23 [erts-11.1.5] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]
==> earmark_parser
Compiling 3 files (.erl)
...
Generated pensieve app
Interactive Elixir (1.11.3) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>

Create an account

Before you can publish a package you need to create an account. You can either create an account via the Hex.pm website or via the command line with the mix hex.user register command.

cmd
mix hex.user register
  
# output

Username: johndoe
Email: john.doe@example.com
Password:
Password (confirm):
Registering...
Generating API key...
You are required to confirm your email to access your account, a confirmation email has been sent to john.doe@example.com

Authenticate

Once you have created an account, you need to authenticate via the command line.

This will prompt you to login and also create a local password.

cmd
mix hex.user auth

Ship It!

With all that out of the way, it's time to publish.

Push your project to Hex with the mix hex.publish command.

cmd
mix hex.publish

# output

Building pensieve 0.1.0
  Dependencies:
    sshex ~> 2.1 (app: sshex)
  App: pensieve
  Name: pensieve
  Files:
    lib
    lib/pensieve.ex
    .formatter.exs
    mix.exs
    README.md
    LICENSE
    CHANGELOG.md
  Version: 0.1.0
  Build tools: mix
  Description: Backup network device configs.
  Licenses: GNU General Public License v3.0
  Links:
    GitHub: https://github.com/automatico/pensieve
  Elixir: ~> 1.11
Before publishing, please read the Code of Conduct: https://hex.pm/policies/codeofconduct

Publishing package to public repository hexpm.

Proceed? [Yn] y
Building docs...
==> earmark_parser
Compiling 3 files (.erl)
Compiling 32 files (.ex)
Generated earmark_parser app
==> sshex
Compiling 3 files (.ex)
Generated sshex app
==> nimble_parsec
Compiling 4 files (.ex)
Generated nimble_parsec app
==> makeup
Compiling 44 files (.ex)
Generated makeup app
==> earmark
Compiling 9 files (.ex)
Generated earmark app
==> makeup_elixir
Compiling 6 files (.ex)
Generated makeup_elixir app
==> ex_doc
Compiling 22 files (.ex)
Generated ex_doc app
==> pensieve
Compiling 1 file (.ex)
Generated pensieve app
Generating docs...
View "html" docs at "doc/index.html"
View "epub" docs at "doc/pensieve.epub"
Local password:
Publishing package...
[#########################] 100%
Package published to https://hex.pm/packages/pensieve/0.1.0 (036cae372b42042204f2a8d373d25636d0bc8bf38b06e1005aed0e9f9394d5ea)
Publishing docs...
[#########################] 100%
Docs published to https://hexdocs.pm/pensieve/0.1.0

Outro

Hey look at you developer person. In this post We created an Elixir project with Mix and published it the Hex.pm.

# elixir
# mix
# hex