Want to take your software engineering career to the next level? Join the mailing list for career tips & advice Click here


Productive. Reliable. Fast.

Subscribe to updates I use phoenix

Statistics on phoenix

Number of watchers on Github 11389
Number of open issues 21
Average time to close an issue 3 days
Main language Elixir
Average time to merge a PR 1 day
Open pull requests 46+
Closed pull requests 98+
Last commit over 2 years ago
Repo Created over 6 years ago
Repo Last Updated over 2 years ago
Size 8.97 MB
Homepage http://www.phoeni...
Organization / Authorphoenixframework
Latest Releasev1.3.0-rc.0
Page Updated
Do you use phoenix? Leave a review!
View open issues (21)
View phoenix activity
View on github
Fresh, new opensource launches 🚀🚀🚀
Software engineers: It's time to get promoted. Starting NOW! Subscribe to my mailing list and I will equip you with tools, tips and actionable advice to grow in your career.
Evaluating phoenix for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

phoenix logo

Productive. Reliable. Fast.

A productive web framework that does not compromise speed and maintainability.

Build Status Inline docs

Getting started

See the official site at http://www.phoenixframework.org/


API documentation is available at https://hexdocs.pm/phoenix

Phoenix.js documentation is available at https://hexdocs.pm/phoenix/js


We appreciate any contribution to Phoenix. Check our CODE_OF_CONDUCT.md and CONTRIBUTING.md guides for more information. We usually keep a list of features and bugs in the issue tracker.

Generating a Phoenix project from unreleased versions

You can create a new project using the latest Phoenix source installer (the phx.new Mix task) with the following steps:

  1. Remove any previously installed phx_new archives so that Mix will pick up the local source code. This can be done with mix archive.uninstall phx_new or by simply deleting the file, which is usually in ~/.mix/archives/.
  2. Copy this repo via git clone https://github.com/phoenixframework/phoenix or by downloading it
  3. Run the phx.new mix task from within the installer directory, for example:
$ cd installer
$ mix phx.new dev_app --dev

The --dev flag will configure your new project's :phoenix dep as a relative path dependency, pointing to your local Phoenix checkout:

defp deps do
  [{:phoenix, path: "../..", override: true},

To create projects outside of the installer/ directory, add the latest archive to your machine by following the instructions in installer/README.md

Building phoenix.js

$ npm install
$ npm run watch

Building docs from source

$ MIX_ENV=docs mix docs

Important links

Copyright and License

Copyright (c) 2014, Chris McCord.

Phoenix source code is licensed under the MIT License.

phoenix open issues Ask a question     (View All Issues)
  • over 3 years Warn on unhanded handle_info in channel
  • almost 4 years mix phoenix.digest should base the hash of a CSS file on the digested_contents after linked assets have been replaced
  • almost 4 years It is impossible to broadcast to channel without the Phoenix.Socket.Broadcast struct
  • almost 4 years Documentation Feature Request: Secure Transport for Channels
  • almost 4 years Remove force_ssl option
  • almost 4 years Phoenix.ChannelTest __stringify__/1 fails when the value is a struct (like Ecto.DateTime)
  • almost 4 years Consider dynamic check_origin
  • almost 4 years Improve Phoenix.Token verify examples
  • almost 4 years Model generators not consistent with given command
  • about 4 years Provide send_attachment/3
  • about 4 years Add Presence.get_by_key
  • about 4 years Erlang 19 Causing Compile Error
  • about 4 years Use the new calendar types in Ecto generators
  • about 4 years Investigate performance regression when running inside releases
  • over 4 years Asset paths are wrong when forwarding in router
  • over 4 years Invalid migration generated by gen.model and run-time errors after omitting `_id` postfix in association column name
  • over 4 years Generated controller tests with namespaced models have wrong path
  • over 4 years Update Phoenix website
phoenix open pull requests (View All Pulls)
  • Add Presence generator. Closes #1523
  • Allow forwarding twice to a plug with different options
  • Warn on router paths without leading slash
  • Change errors to match Ecto nomalised format
  • Configurable template lookup pattern
  • Improving error message when invalid redirect to: path
  • fixup socket docs
  • Potential fix for issue 1605
  • Add additional information to prod.secret.exs
  • Added type specs to socket messages
  • Extend model generation specs
  • Extract serialization into a separate class
  • Don't copy static files when both --no-brunch & --no-html are present.
  • Expose source es6 file too in npm package
  • Add new experimental project generator
  • Add required babel presets to static template
  • Include Phoenix guides in framework docs
  • Enhance new generators
  • Envisage field of type map in phoenix.gen
  • Add configurable logging to channels
  • Adding foreign key to the generated belongs to
  • Tweaked `Phoenix.Token` documentation.
  • Fix IE Bug
  • Add socket.js tests
  • Adds Presence.get_by_key with default
  • Add channel js tests
  • Fix function argument inconsistencies in docs for scope
  • Update phoenix_guide and add pages from phoenix_guides
  • Fix nested context module name (#2240)
  • Fixed newline in migration template
  • Bug fix channel join with timeout behavior
  • Improve error messages for references, with context consideration
  • Adds documentation to Phoenix.Router about nested resources in the router
  • Replace all occurences of `mix phoenix` with `mix phx`
  • Phoenix now uses Makeup for syntax highlighting
  • Progress output during code reloading
  • Use new plug init mode to reduce compile-time plug deps
  • Update brunch to 2.10.12 in project generator
  • Update .gitignore templates
  • Allow Websocket Transport to copy conn fields to params
  • Resolve presence race and introduce new Presence API
  • Rework the introduction and organization of the Channels guide
  • Use static_push by default for the JS and CSS
  • Add instructions for custom domains on Heroku deploys
  • Upgrade expose-loader to 0.7.5
  • Add additional information on TLS config and HSTS to the Endpoint guilde.
phoenix questions on Stackoverflow (View All Questions)
  • Redirection inside a plug in Phoenix framework
  • Postgres - Phoenix/Elixir install errors
  • Elixir phoenix error when starting server
  • error during installing phoenix framework
  • Dynamically defining top level routes in Phoenix routes.ex
  • In a Phoenix app, where do the prepare_changes calls belong?
  • apache phoenix Join query performance
  • org.apache.hadoop.hbase.TableNotFoundException: SYSTEM.CATALOG exception with phoenix 4.5.2
  • Phoenix Error while trying to create table
  • Apache Phoenix DAO Testing
  • Apache Phoenix Current Time
  • parsing of where clause in phoenix
  • Can I use phoenix to achieve the feature like SQL's duplicate key?
  • Phoenix frameworks and validating embeds
  • Trying to use axios to make API call in a React/Phoenix App (using Brunch)
  • Phoenix Framework - How to populate a map field through a form_for?
  • How to add plug in router in phoenix elixir
  • How to make Javascript code run in Phoenix?
  • How to send emails with Phoenix framework
  • How to write a custom model in elixir / phoenix without being object-oriented?
  • Deploying phoenix framework on heroku with webpack
  • How to create a Phoenix Table / View over an Existing Hbase table
  • creating a Phoenix index in Hortonworks sandbox doesnt work
  • Does Phoenix Code_Reloader Only Reload Elixir Code?
  • Apache Phoenix - Insert multiple rows with one upsert statement
  • Render many to many relationship JSON in Phoenix Framework
  • Phoenix Framework with code reloading enabled, is pretty slow on Windows
  • Using Phoenix with Cloudera Hbase (installed from repo)
  • Not finding my HBase table columns in my Phoenix table
  • APACHE PHOENIX : Identify each column name and its data in region server coprocessor
phoenix list of languages used
phoenix latest release notes

For those interested in a detailed overview of the changes and design decisions, check out my LonestarElixir keynote that just went live: https://www.youtube.com/watch?v=tMO28ar0lW8

To use the new phx.new project generator, you can install the archive with the following command:

$ mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez

As always, we have an upgrade guide with detailed instructions for migrating from 1.2.x projects: https://gist.github.com/chrismccord/71ab10d433c98b714b75c886eff17357

Full changelog:

1.3.0-rc.0 (2017-03-01)

  • Enhancements
    • [Generator] Add new phx.new, phx.new.web, phx.new.ecto project generators with improved application structure and support for umbrella applications
    • [Generator] Add new phx.gen.html and phx.gen.json resource generators with improved isolation of API boundaries
    • [Controller] Add current_path and current_url to generate a connection's path and url
    • [Controller] Introduce action_fallback to registers a plug to call as a fallback to the controller action
    • [Controller] Wrap exceptions at controller to maintain connection state
    • [Channel] Add ability to configure channel event logging with :log_join and :log_handle_in options
    • [Channel] Warn on unhandled handle_info/2 messages
    • [Channel] Channels now distinguish from graceful exits and application restarts, allowing clients to enter error mode and reconnected after cold deploys.
    • [Router] document match support for matching on any http method with the special :* argument
    • [ConnTest] Add redirected_params/1 to return the named params matched in the router for the redirected URL
  • Deprecations
    • [Generator] All phoenix.* mix tasks have been deprecated in favor of new phx.* tasks
  • JavaScript client enhancements
    • Add ability to pass encode and decode functions to socket constructor for custom encoding and decoding of outgoing and incoming messages.
    • Detect heartbeat timeouts on client to handle ungraceful connection loss for faster socket error detection
    • Add support for AMD/RequireJS
  • Enhancements
    • [Router] Improve errors for invalid route paths
    • [Plug] Include new development error pages
  • Bug Fixes
    • [Endpoint] Fixed issue where endpoint would fail to code reload on next request after an endpoint compilation error

1.2.0 (2016-6-23)

See these 1.1.x to 1.2.x upgrade instructions to bring your existing apps up to speed.

  • Enhancements
    • [CodeReloader] The lib/ directory is now code reloaded by default along with web/ in development
    • [Channel] Add :phoenix_channel_join instrumentation hook
    • [View] Generate private render_template/2 clauses for views to allow overriding render/2 clauses before rendering templates
    • [View] Add :path and :pattern options to allow wildcard template inclusion as well as customized template directory locations
  • Deprecations

    • [Endpoint] Generated subscribe/3 and unsubscribe/2 clauses have been deprecated in favor of subscribe/2 and unsubscribe/1 which uses the caller's pid
    • [PubSub] Phoenix.PubSub.subscribe/3 and Phoenix.PubSub.unsubscribe/2 have been deprecated in favor of subscribe/2 and unsubscribe/1 which uses the caller's pid
    • [Watcher] Using the :root endpoint configuration for watchers is deprecated. Pass the :cd option at the end of your watcher argument list in config/dev.exs. For example:
    watchers: [node: ["node_modules/brunch/bin/brunch", "watch", "--stdin",
               cd: Path.expand("../", __DIR__)]]
  • Bug Fixes

    • [Template] Prevent infinite call stack when rendering a non-existent template from template_not_found
  • JavaScript client enhancements

    • Add Presence object for syncing presence state between client and server
    • Use return value of channel onMessage callback for specialized message transformations before dispatching to the channel
  • JavaScript client backward incompatible changes

    • Presence.syncState and Presence.syncDiff now return a copy of the state instead of mutating it
Other projects in Elixir