You are viewing the legacy version of AdonisJS. Visit for newer docs. This version will receive security patches until the end of 2021.

Using .dev domains

We all love to use pretty .dev domains when developing our apps in development. In this recipe, we learn how to bind custom domains to your app instead of accessing them via localhost.

This technique has no technical advantage or disadvantage and instead used as a personal preference towards pretty domains.

Setup hotel

The first step is to set up an external tool called hotel. It allows you to register domains for an app or a URL.

npm install -g hotel

Next, we need to start it as a daemon on port=2000 using the following command.

hotel start

Once it is running, you can run hotel ls command to see the list of registered apps/domains. Which is empty with the new installation.

Setup proxy

Let’s understand how this works in theory. We need to tell our browser or system network to pass through a proxy, which serves our .dev apps or pass the request to the actual URL.

The entire process of proxy is very lightweight and doesn’t impact your system performance or speed.

Now as we know, that all magic is done via the proxy, let’s update the settings of the browser/system to pass via hotel proxy.

System configuration

We need to point the network to http://localhost:2000/proxy.pac file.


Network Preferences > Advanced > Proxies > Automatic Proxy Configuration


Settings > Network and Internet > Proxy > Use setup script

Linux ( ubuntu )

System Settings > Network > Network Proxy > Automatic

Browser configuration

Browser configuration just proxy the request for that browser only and not for the entire system.

Chrome ( exit chrome first )

# Linux
google-chrome --proxy-pac-url=http://localhost:2000/proxy.pac

# OS X
open -a "Google Chrome" --args --proxy-pac-url=http://localhost:2000/proxy.pac


Preferences > Advanced > Network > Connection > Settings > Automatic proxy URL configuration

Integrate with AdonisJs

Now that hotel is configured, we can use it independently of AdonisJs for any application. However, the problem is all apps registered with hotel are mapped forever unless you remove them manually.

This behavior can cause issues, where you want your disposable domains which lives till your app is running.

Adonis cli adonis serve command accepts a flag which registers a disposable domain with the hotel and removes it when you stop your app.

adonis serve --domain=yardstick@http://localhost:3333

The --domain flag takes the domain and the URL. In this case

  • domain=yardstick

  • url=http://localhost:3333