plug_and_play alternatives and similar packages
Based on the "Framework Components" category.
Alternatively, view plug_and_play alternatives based on common mentions on social networks and blogs.
-
dayron
A repository `similar` to Ecto.Repo that maps to an underlying http client, sending requests to an external rest api instead of a database -
phoenix_token_auth
Token authentication solution for Phoenix. Useful for APIs for e.g. single page apps. -
rummage_phoenix
Full Phoenix Support for Rummage. It can be used for searching, sorting and paginating collections in phoenix. -
access pass
provides a full user authentication experience for an API. Includes login,logout,register,forgot password, forgot username, confirmation email and all that other good stuff. Includes plug for checking for authenticated users and macro for generating the required routes. -
Votex
Implements vote / like / follow functionality for Ecto models in Elixir. Inspired from Acts as Votable gem in Ruby on Rails -
plug_canonical_host
PlugCanonicalHost ensures that all requests are served by a single canonical host. -
trailing_format_plug
An elixir plug to support legacy APIs that use a rails-like trailing format: http://api.dev/resources.json
CodeRabbit: AI Code Reviews for Developers

Do you think we are missing an alternative of plug_and_play or a related project?
README
PlugAndPlay πβΊ
Set up a Plug
application with less boilerplate.
PlugAndPlay
is not a web framework β it's a small scaffold. You use Plug
as you would normally, only sooner.
Later, if you need more control, you can easily replace PlugAndPlay
piece by piece or wholesale.
Setting up a Plug app, the easy way
Generate a new project with --sup
, e.g.
mix new hello_world --sup
Open mix.exs
and add plug_and_play
to your list of dependencies:
def deps do
[
{:plug_and_play, "~> 0.7.0"},
]
end
(This makes PlugAndPlay
conveniences available and saves you from manually adding Plug and the Cowboy web server to the deps list.)
Make your root module (e.g. lib/hello_world.ex
) look something like:
defmodule HelloWorld do
defmodule Router do
use PlugAndPlay.Router
get "/" do
send_resp conn, 200, "Hello world!"
end
match _ do
send_resp conn, 404, "404!"
end
end
end
(This saves you from manually including some Plug.Router
boilerplate.)
Make your application module (e.g. lib/hello_world/application.ex
) look something like:
defmodule HelloWorld.Application do
use PlugAndPlay.Application, router: HelloWorld.Router
end
(This saves you from manually setting up a Supervisor to run your app in the Cowboy web server on the right port.)
Now you should be able to start the app in a terminal with:
mix deps.get
mix server
(This saves you from typing mix run --no-halt
.)
It outputs the URL at which the server runs - usually http://0.0.0.0:8080. Go there and marvel!
Custom port number
The default port is 8080.
If the environment variable PORT
is set, that port number will be used. This is the convention on e.g. Heroku and with Dokku, meaning things will Just Workβ’ if you deploy there.
Or you can assign a port explicitly, e.g. from application config.
Assuming you have config like this in config/config.exs
:
config :hello_world, port: 1234
You could do this in lib/hello_world/application.ex
:
defmodule HelloWorld.Application do
use PlugAndPlay.Application,
router: HelloWorld.Router,
port: Application.get_env(:hello_world, :port)
end
If you set up your own supervision tree, you can also specify the port there.
Custom plug pipeline
If you need additional plugs, skip use PlugAndPlay.Router
and simply write out the code instead:
use Plug.Router
plug :match
plug :my_custom_plug
plug :dispatch
You can still use the rest of the PlugAndPlay
conveniences, of course, even if you skip PlugAndPlay.Router
.
Custom supervision
By default, PlugAndPlay
defines a supervision tree for you so you don't have to. If that's all you need, ignore this section.
If you want more control, you can define your own supervision tree with PlugAndPlay.Supervisor
as one of its children.
Make your main application (e.g. lib/hello_world/application.ex
) look something like:
defmodule HelloWorld.Application do
use Application
def start(_type, _args) do
children = [
PlugAndPlay.Supervisor.child_spec(HelloWorld.Router),
]
Supervisor.start_link(children, strategy: :one_for_one)
end
end
You can specify the desired port as a second argument to child_spec
.
You can specify multiple instances as long as they have different routers and ports:
children = [
PlugAndPlay.Supervisor.child_spec(HelloWorld.RouterOne, 1111),
PlugAndPlay.Supervisor.child_spec(HelloWorld.RouterTwo, 2222),
]
Credits and license
By Henrik Nyh 2017-02-25 under the MIT License.
*Note that all licence references and agreements mentioned in the plug_and_play README section above
are relevant to that project's source code only.