--- title: Connect from Phoenix to Neon subtitle: Set up a Neon project in seconds and connect from Phoenix enableTableOfContents: true updatedOn: '2026-02-04T19:25:39.221Z' --- This guide describes how to connect Neon in a [Phoenix](https://www.phoenixframework.org) application. [Ecto](https://hexdocs.pm/ecto/3.11.2/Ecto.html) provides an API and abstractions for interacting databases, enabling Elixir developers to query any database using similar constructs. It is assumed that you have a working installation of [Elixir](https://elixir-lang.org/install.html). ## Create a Neon project If you do not have one already, create a Neon project. Save your connection details including your password. They are required when defining connection settings. 1. Navigate to the [Projects](https://console.neon.tech/app/projects) page in the Neon Console. 2. Click **New Project**. 3. Specify your project settings and click **Create Project**. ## Store your Neon credentials Add a `.env` file to your project directory and add your Neon connection string to it. You can find your connection string by clicking the **Connect** button on your **Project Dashboard** to open the **Connect to your database** modal. For more information, see [Connect from any application](/docs/connect/connect-from-any-app). ```shell shouldWrap DATABASE_URL="postgresql://:@.neon.tech:/?sslmode=require&channel_binding=require" ``` You will need the connection string details later in the setup. ## Create a Phoenix project [Create a Phoenix project](https://hexdocs.pm/phoenix/installation.html#phoenix) if you do not have one: ```bash # install phx.new if you haven't already # mix archive.install hex phx_new mix phx.new hello ``` When prompted, choose to not install the dependencies yet. ## Configure database connections Update the following configuration files with your Neon database connection details from the connection string you copied earlier. 1. Update `config/dev.exs`: ```elixir {2-5,9} config :hello, Hello.Repo, username: "neondb_owner", password: "JngqXejzvb93", hostname: "ep-rough-snowflake-a5j76tr5.us-east-2.aws.neon.tech", database: "neondb", stacktrace: true, show_sensitive_data_on_connection_error: true, pool_size: 10, ssl: [cacerts: :public_key.cacerts_get()] ``` The `:ssl` option is required to connect to Neon. Postgrex, since v0.18, verifies the server SSL certificate and you need to select CA trust store using `:cacerts` or `:cacertfile` options. You can use the OS-provided CA store by setting `cacerts: :public_key.cacerts_get()`. While not recommended, you can disable certificate verification by setting `ssl: [verify: :verify_none]`. 2. Update `config/runtime.exs`: ```elixir {2} config :hello, Hello.Repo, ssl: [cacerts: :public_key.cacerts_get()], url: database_url, pool_size: String.to_integer(System.get_env("POOL_SIZE") || "10"), socket_options: maybe_ipv6 ``` 3. Update `config/test.exs`: ```elixir {2,3,4,8} config :hello, Hello.Repo, username: "neondb_owner", password: "JngqXejzvb93", hostname: "ep-rough-snowflake-a5j76tr5.us-east-2.aws.neon.tech", database: "with_phoenix_test#{System.get_env("MIX_TEST_PARTITION")}", pool: Ecto.Adapters.SQL.Sandbox, pool_size: System.schedulers_online() * 2, ssl: [cacerts: :public_key.cacerts_get()] ``` This guide configures the test environment for completeness but doesn't cover running tests. For production workflows, consider using [Neon branches](/docs/introduction/branching) instead of a separate test database. Branches provide isolated, cost-effective copies of your database that are ideal for testing and CI/CD pipelines. ## Install dependencies and create databases 1. Install the dependencies: ```bash mix deps.get ``` 2. Create the development and test databases: ```bash mix ecto.create MIX_ENV=test mix ecto.create ``` The first command creates the development database (`neondb`). The second creates the test database (`with_phoenix_test`). ## Build and run the Phoenix application To compile the app in production mode, run the following command: ```bash MIX_ENV=prod mix compile ``` To compile assets for the production mode, run the following command: ```bash MIX_ENV=prod mix assets.deploy ``` For each deployment, a secret key is required for encrypting and signing data. Run the following command to generate the key: ```bash mix phx.gen.secret ``` When you run the following command, you can expect to see the Phoenix application at [http://localhost:4001](http://localhost:4001): ```bash shouldWrap PORT=4001 \ MIX_ENV=prod \ PHX_HOST=localhost \ DATABASE_URL="postgresql://...:...@...aws.neon.tech/neondb?sslmode=require&channel_binding=require" \ SECRET_KEY_BASE=".../..." \ mix phx.server ``` ## Source code You can find the source code for the application described in this guide on GitHub. Get started with Phoenix and Neon