Programming Phoenix (Pragprog)

I’ve just started reading this but wanted to quickly say that the preface and opening chapter (everything up to the beginning of ‘Part 1’) is not only one of the best openings of any book I’ve read, but also does one of the best jobs to sell the idea of a piece of technology - ever!!

I was going to suggest PragProg consider making it a free download - because I reckon it will do a phenomenal job of helping drive adoption of Elixir and Phoenix …which in turn will mean significantly more potential customers/readers - so a win win for everyone :003: but guess what? It’s already available as a free download!! (Get the preface here and the introductory chapter here.)

Well done Chris, José, Bruce, Jacquelyn, PragProg and anyone else who made that chapter what it is :023: whenever anyone now asks “Why Elixir?” I’ll definitely be including this resource and I can’t wait to read to the rest of the book!


Programming Phoenix 1.4 (eBook) has recently been updated.

Changes in This Release

  • We added a new chapter: Chapter 8, Testing MVC. This chapter completes part 1 of the book. We’ll circle back and address new features that readers identify as important but for now we’ll move on toward addressing channels.
  • Addressed errata. Thanks for all of your help and keep them coming!

You literally just beat me to it :003:

Anyone know if there is a log of changes? I’d love to know if anything I have read so far has been changed.

1 Like

Another nice update!


I love the intro “Don’t accept the compromise between fast and beautiful: you can have it all.”


Hi @chrismccord would you please add a chapter on Phoenix LiveView to the book Programming Phoenix 1.4?
If you make it the last chapter and convert all the JavaScript used in Rumbl into the Phoenix LiveView(s), that will make much sense.
Rumbl will already be completed, so if someone don’t wanna use LiveView, s/he will already be done, but if someone want to use LiveView s/he will read the last chapter too.
Or you can also release a separate booklet on Phoenix LiveView, doing the same (rewriting all the JavaScript used in Rumbl, to LiveView)


I agree that having a chapter on LiveView would be spectacular :003:

I think LiveView is going to be one of Phoenix’s killer features, and it being covered in the de-facto Phoenix book would be awesome (even if to begin with it is just enough to get people productive with it).


LiveView definitely won’t make it into the book given we are shipping the final three chapters and sending it off to production hopefully before end of year, which will be prior to a LiveView 1.0 for sure. Fortunately though, we have a great doc system with elixir and hexdocs so there will be plenty of docs/guides as we get underway.


What if you write a booklet (e.g., a small 10 to 20 pages booklet) and rewrite the JavaScript part of Rumbl in LiveView, and release it from the Pragmatic Bookshelf? I’ll happily buy it.

And thank you for creating Phoenix and now LiveView!


I’ve just tried to submit the following via PragProg’s errata page but it seems to be down… if anyone succeeds in submitting anything please also submit this (or please let us know when their system is back up)

Page 49 on the PDF version:

The view modules infer their template locations from the view module name. In our example, our Rumbl.UserView would look for templates in the web/templates/user/ directory.


Rumbl.UserView to RumblWeb.UserView

web/templates/user/ to rumbl_web/templates/user/

B5 is out now.

Changes in This Release

  • We added a new chapter: Chapter 11, OTP. It’s the most heavily revised chapter yet with changes to the dynamic supervision and new child specs added in Elixir 1.5.
  • We addressed another big chunk of of the technical errors. It seems you’ve been busy too! Thanks for all of your help and keep them coming.
  • We know we still owe you a treatment of channel presence; that will come in about a month or so.

Is the book available as an upgrade to those who bought the previous version or it’s a completely new purchase?

Did you buy an ebook? If so I think you get a huge 80% off: (on my mobile so can’t check what I paid for the upgrade atm):


(Your coupon should be on your pragprog account page)

1 Like

Update available :023:

Changes in This Release

  • We added a new chapter: Chapter 12, Observer and Umbrellas.
  • We addressed another big chunk of of the technical errors.
  • We’re working on a treatment of channel presence; that will come in about a month or so.

Updating now to check it out. :+1:

1 Like

Looks like it is going to include some LiveView too :003:


Update out:

Changes in This Release

The last update to the regular chapters is IN! We finished the Testing OTP chapter. Due to some major restructuring of the OTP design, the testing chapter took a while to get right. We can see the finish line. Here’s what’s coming:

  • We still owe you a treatment of Channel Presence.
  • We will align the configuration with the deployment strategies necessary to build a release.
  • We will add a treatment of LiveVeiw in the last chapter. We hope you’re enjoying the rewrite so far. Happy reading!
1 Like

Dear, I don’t know whether this is the right place. In every case, thanks for writing your book, I love it.
However I’m confused here:

the lines
{:error, changeset} ->
{:reply, {:error, %{errors: changeset}}, socket}

are those correct?
Since I made a typo somewhere else which resulted in:
protocol Jason.Encoder not implemented for #Ecto.Changeset

I read “5. Authenticating Users” - “In-context Relationships”, There is a one-to-one relationship between User and Credential. But I don’t see how it is easy to support third-party oauth2 login. Does it mean adding fields such as facebook_uid, twitter_uid in the table?

In my opinion, I will have an Authentication table with provider and uid fields. Then each third-party is one row in the table.


I would love to see (will even pay/donate!) for someone to extend the Authentication chapter with a follow-up using Uberauth and Guardian, and then a jwt, to show not only how to integrate a library but also how to do authentication ‘properly’ and is also production quality.