Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

bug: dataplane client ignores SERVER_BASEPATH, so create/delete topic miss the subpath

Open Beginner friendly
#2,693 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 2 days

@bhataprameya is already working on this.

Since Oct 24, 2026.

  • #2694 by @bhataprameya — open

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
76/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
react, typescript

Research direction

Start in frontend/src/app.tsx at the dataplane transport setup, then read getGrpcBasePath in frontend/src/config.ts and compare it with the working console.v1alpha1 client. Check how SERVER_BASEPATH affects the standalone UI's dataplane request URLs. Done means Create Topic, Delete Topic, and other dataplane RPCs include the configured prefix; verify with a request under /kafka.

Written by the indexing model from the issue text.

Description

Summary

When Console is served under a URL prefix (SERVER_BASEPATH=/kafka), the topics list works, but Create Topic and Delete Topic call the dataplane API at the site root. The browser requests POST /redpanda.api.dataplane.v1.TopicService/CreateTopic instead of POST /kafka/redpanda.api.dataplane.v1.TopicService/CreateTopic.

Anything else mounted at / receives that request. The UI then shows ConnectError [unknown].

The same code is in v3.5.1 and is unchanged on v3.13.1 / current master.

Setup

Console behind a reverse proxy that forwards only /kafka/* to the process.

SERVER_BASEPATH=/kafka
SERVER_STRIPPREFIX=true
SERVER_SETBASEPATHFROMXFORWARDEDPREFIX=true

The served page sets window.BASE_URL = '/kafka/'. Listing topics and the console.v1alpha1 calls go to /kafka/... and succeed.

What happens

  1. Open /kafka/topics.
  2. Create Topic, fill in a name, submit.
  3. The browser sends:
POST /redpanda.api.dataplane.v1.TopicService/CreateTopic

That path has no /kafka prefix, so the proxy does not send it to Console. The Connect client reports ConnectError [unknown]. Delete Topic uses the same client.

The same request with the prefix reaches Console and returns a normal API response. For example, an empty body returns 400 invalid_argument (topic is required), which shows the handler itself is fine.

Cause

The standalone app builds the dataplane transport with an explicit empty base URL:

// frontend/src/app.tsx
const dataplaneTransport = createConnectTransport({
  baseUrl: getGrpcBasePath(''), // Embedded mode handles the path separately.

getGrpcBasePath only falls back to window.BASE_URL when the override is nullish:

// frontend/src/config.ts
export const getGrpcBasePath = (overrideUrl?: string) => overrideUrl ?? getBasePath();

'' is not nullish, so the fallback never runs and baseUrl stays empty. The comment says embedded mode handles the path, but this transport is the one the standalone UI uses. Create Topic, Delete Topic, and the other redpanda.api.dataplane.v1 calls share it. The older console.v1alpha1 client still uses getBasePath() and is fine.

Expected

With SERVER_BASEPATH=/kafka, dataplane calls should be POST /kafka/redpanda.api.dataplane.v1.TopicService/CreateTopic (and the same prefix for Delete Topic and the other dataplane RPCs).

Workaround

Also route /redpanda.api.dataplane.v1.* to Console at the proxy, or serve Console at / on its own host. No Console config option changes the empty base URL.

Dominant language
TypeScript
Stars
4.3k
Forks
431
Avg merge
3d 7h
Merged PRs (30d)
22

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from redpanda-data/console

All issues in redpanda-data/console

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.