#deploymentUrl is undefined

18 messages · Page 1 of 1 (latest)

sweet hingeBOT
#

Hi @signal bay. I'm kapa.ai, your friendly support bot. I will try to answer your question by searching through the knowledge base. :wave:

#

The error message deploymentUrl is undefined, are your environment variables set? In the future explicitly passing undefined will cause an error. To explicitly use the default, pass process.env.NEXT_PUBLIC_CONVEX_URL. indicates that your Convex deployment URL is not being set correctly in your environment variables.

For Next.js, Convex expects the deployment URL to be available as the environment variable NEXT_PUBLIC_CONVEX_URL. This variable should be set in your environment (e.g., in a .env.local file) and accessible both during build and at runtime. Here’s how you can resolve this:

  1. Check your .env.local file
    Make sure you have a line like this in your .env.local file at the root of your project:

    NEXT_PUBLIC_CONVEX_URL=<https://your-convex-deployment.convex.cloud>
    

    Replace the URL with your actual Convex deployment URL. You can find this URL in your Convex dashboard under deployment settings.

  2. Accessing the variable in code
    In your Next.js code, you should access this variable using process.env.NEXT_PUBLIC_CONVEX_URL:

    import { ConvexReactClient } from "convex/react";
    const convex = new ConvexReactClient(process.env.NEXT_PUBLIC_CONVEX_URL);
    

    This ensures the client is initialized with the correct URL for both client and server components. For server-side functions like preloadQuery, fetchQuery, etc., Convex will also look for this environment variable by default, unless you explicitly pass a url option. If you do not set this variable, you will get the error you describedConfiguring Deployment URL, Next.js Server Rendering, API: nextjs.

#
  1. Restart your dev server
    After updating your environment variables, restart your Next.js development server to ensure the new variables are loaded.

  2. Check for typos and context
    Make sure there are no typos in the variable name and that you are not accidentally referencing a different variable (like VITE_CONVEX_URL, which is for Vite projects).

If you are deploying to a platform like Vercel, ensure that NEXT_PUBLIC_CONVEX_URL is also set in your deployment environment variables in the Vercel dashboard.

If you follow these steps and the variable is still undefined, double-check that your environment variable is being loaded correctly and that you are not running into issues with how Next.js loads environment variables.

For more details, see the official documentation:


Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:

#

@signal bay Kapa.ai is still learning and improving, please let me know how I did by reacting below.

signal bay
#

This is my ConvexClientProvider.tsx:

"use client";

import { ReactNode } from "react";
import { ConvexReactClient } from "convex/react";
import { ConvexAuthNextjsProvider } from "@convex-dev/auth/nextjs";

// Create a single instance of ConvexReactClient
const convex = new ConvexReactClient(process.env.NEXT_PUBLIC_CONVEX_URL!);

/**
 * ConvexClientProvider - Wraps the application with Convex Auth context
 * This Client Component provides both Convex functionality and authentication
 * to all child components using Convex Auth
 */
export default function ConvexClientProvider({
  children,
}: {
  children: ReactNode;
}) {
  return (
    <ConvexAuthNextjsProvider client={convex}>
      {children}
    </ConvexAuthNextjsProvider>
  );
}
sweet hingeBOT
#

Let me check the knowledge base for you again. One moment! :books:

#

Sorry @signal bay, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist:

Perhaps try again in 15mins?

signal bay
#

@sweet hinge
This is my ConvexClientProvider.tsx:

"use client";

import { ReactNode } from "react";
import { ConvexReactClient } from "convex/react";
import { ConvexAuthNextjsProvider } from "@convex-dev/auth/nextjs";

// Create a single instance of ConvexReactClient
const convex = new ConvexReactClient(process.env.NEXT_PUBLIC_CONVEX_URL!);

/**
 * ConvexClientProvider - Wraps the application with Convex Auth context
 * This Client Component provides both Convex functionality and authentication
 * to all child components using Convex Auth
 */
export default function ConvexClientProvider({
  children,
}: {
  children: ReactNode;
}) {
  return (
    <ConvexAuthNextjsProvider client={convex}>
      {children}
    </ConvexAuthNextjsProvider>
  );
}
sweet hingeBOT
#

Let me check the knowledge base for you again. One moment! :books:

#

Your ConvexClientProvider.tsx implementation is correct in terms of how you are initializing and providing the ConvexReactClient and using ConvexAuthNextjsProvider as described in the official Convex Auth documentation for Next.js:

"use client";

import { ConvexAuthNextjsProvider } from "@convex-dev/auth/nextjs";
import { ConvexReactClient } from "convex/react";
import { ReactNode } from "react";

const convex = new ConvexReactClient(process.env.NEXT_PUBLIC_CONVEX_URL!);

export default function ConvexClientProvider({
  children,
}: {
  children: ReactNode;
}) {
  return (
    <ConvexAuthNextjsProvider client={convex}>
      {children}
    </ConvexAuthNextjsProvider>
  );
}

This matches the example from the Convex Auth Next.js API reference.

However, the error you are seeing (deploymentUrl is undefined...) means that process.env.NEXT_PUBLIC_CONVEX_URL is not set or is undefined at runtime. This is not an issue with your ConvexClientProvider.tsx code, but rather with your environment variable setup.

What to check:

  1. .env.local file
    Ensure you have a .env.local file at the root of your project with:

    NEXT_PUBLIC_CONVEX_URL=<https://your-convex-deployment.convex.cloud>
    

    (Replace with your actual Convex deployment URL.)

  2. Restart your dev server
    After setting or changing environment variables, you must restart your Next.js dev server.

  3. Correct variable name
    For Next.js, the variable must be prefixed with NEXT_PUBLIC_ to be available in the browser and client components, as described in the Convex deployment URL docs.

  4. No typos
    Double-check for typos in the variable name in both your .env.local and your code.

#
  1. Deployment environment
    If you are deploying (e.g., to Vercel), make sure the environment variable is set in your deployment environment as well.

Summary

Your ConvexClientProvider.tsx is implemented correctly according to the official documentation. The error is due to a missing or misconfigured NEXT_PUBLIC_CONVEX_URL environment variable, not the code itself.
See: Configuring Deployment URL, ConvexAuthNextjsProvider API.

Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:

#

@signal bay Kapa.ai is still learning and improving, please let me know how I did by reacting below.

signal bay
#

@sweet hinge this is the .evn.local:

# Deployment used by `npx convex dev`
CONVEX_DEPLOYMENT=dev:<name_of_the_cloud>

NEXT_PUBLIC_CONVEX_URL=<exact_link_in_the_correct_structure>
SETUP_SCRIPT_RAN=1

And the issue is that this deploymentURL is undefined error comes once in a few minutes. It doesn't break the app.

sweet hingeBOT
#

Let me check the knowledge base for you again. One moment! :books:

#

Your .env.local file appears to be set up correctly, with both CONVEX_DEPLOYMENT and NEXT_PUBLIC_CONVEX_URL defined. The code in your ConvexClientProvider.tsx is also correct according to the official documentation.

However, the fact that you see the "deploymentUrl is undefined" error intermittently (every few minutes) and it does not break the app suggests that the environment variable is usually set, but sometimes it is not available at runtime. This could be due to how environment variables are loaded or how your development server is handling hot reloads or restarts.

Based on the knowledge sources, here are some relevant points:

#
  • Convex expects the deployment URL to be set in NEXT_PUBLIC_CONVEX_URL for Next.js projects, and this should be available in your environment at all times for both client and server components. If this variable is missing or undefined, you will see errors like the one you described. The Convex CLI writes this value to .env.local when you run npx convex devConfiguring Deployment URL.
  • If there are multiple similar environment variables (e.g., CONVEX_URL, PUBLIC_CONVEX_URL), the Convex CLI may get confused and not know which one to use, so it's best to only have NEXT_PUBLIC_CONVEX_URL for Next.js projects and avoid duplicates or similar names in your .env.local fileDiscord: Multiple CONVEX_URL warning.
  • The Convex CLI writes to .env.local because that's where frontend frameworks like Next.js expect to find public environment variables. If you are switching between deployments or running multiple dev servers, make sure .env.local is not being overwritten or deleted unexpectedlyDiscord: .env.local behavior.

If the error is intermittent and does not break the app, it may be related to hot reloads or the way your dev server is refreshing environment variables. There is no explicit mention in the knowledge sources of a known bug causing this, but similar issues have been discussed when environment variables are not consistently available or are being overwritten.

#

Recommendations:

  • Ensure you do not have multiple .env files with conflicting values.
  • Avoid having other variables like CONVEX_URL or PUBLIC_CONVEX_URL in .env.local—stick to NEXT_PUBLIC_CONVEX_URL for Next.js.
  • If you are running multiple dev servers or switching branches, make sure .env.local is not being changed or deleted.
  • If the issue persists, try stopping your dev server, deleting .next (the Next.js build cache), and restarting.

If the problem continues and is disruptive, consider sharing more details (such as your full .env.local and any relevant logs) with the Convex support team, as there may be an edge case affecting your setup that is not fully covered in the documentation.

If you need more specific troubleshooting, please provide additional context or steps to reproduce the intermittent error.

Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: