Phoenix 1.4.0 released!



Super nice, congrats! :+1:t3:

One small thing: the blog post says to add {:plug_cowboy, "~> 2.5"}, but last version is 2.0.0.


Fixed thanks!


Whoo hoo! Congrats!!


On the 1.3->1.4 upgrade gist the lines:

  {:ecto_sql, “~> 3.0”},
  {:phoenix_ecto, “~> 4.0”}

Should be:

  {:ecto_sql, "~> 3.0"},
  {:phoenix_ecto, "~> 4.0"}

As copying them in as they are right now will fail to compile. :slight_smile:


I went ahead and immediately updated Planga :sunglasses:.
Hot upgrades are so awesome.

:cake: Congradulations! Thank you for all your hard work and efforts, @chrismccord and the rest of the Phoenix team! :heart:



Thanks for everyone’s hard work on Phoenix!


Awesome, thanks for all your hard work everyone!

You can also see a full diff of changes between apps generated by 1.4.0 and earlier versions at:


What used to be over 8 second compile in my project is now pretty much instant. Deluxe. 5/5. Would upgrade again.


A post was split to a new topic: Phoenix 1.4.0 Docker image?


This is great! I love seeing real-world quality of life improvements!


I concur with this! My compile that used to take ~90 seconds is down quite a surprising amount for a clean recompile, probably 40 seconds now! Did something change in the router or so?

Consequently, the upgrade seemed to go pretty easily, my npm-based asset builds still work fine, and I’d swear the page load times are reduced as well in the dev environment but that’s mostly a feeling of it.

Now to spend today taking advantage of the new Ecto named joins feature to remove my combinatoric macro-explosion of query building choices, which might reduce build time a little bit more (it’s mostly constrained to one big file though) but at least will significantly reduce the amount of generated code! Woo! ^.^


Yes, we did a couple rounds of router improvements on this release too. :slight_smile:


This. The app seems to be more snappier in dev environment for me too.


I’m wondering what happened to the static_push helper that was mentioned in these two talks:

At some point it was merged into master, but it’s no longer there.

Performs a server push and returns the path to a static asset given its file path.
The server push will only happen if using HTTP/2 with a supported plug adapter.
If not supported, this function will simply return the path to the static asset.

def static_push(%Conn{} = conn, path) do



The commit message @LostKobrakai linked explains the reasoning. It is possible it (or something similar) will make a return if and when is widely supported.