This repository hosts the implementation of QuestDB user interface and surrounding tooling.
- Node.js 24 (see
package.jsonfor other supported versions; check withnode -v) - Yarn 4.1.1+ (check with
yarn -v)
If your Node.js version doesn't match, use fnm or nvm to switch versions:
fnm use # or nvm useIf Yarn is not installed, enable it with:
corepack enable-
Clone the repository:
git clone git@github.com:questdb/ui.git cd ui -
Install dependencies:
yarn
-
Start the development server:
yarn start
-
Open http://localhost:9999 in your browser. Note that for Web Console to work properly, QuestDB server should be up and running.
yarn start- Start development server (Vite)yarn build- Build for productionyarn preview- Preview production build locallyyarn test- Run all unit, component, and integration tests (Vitest)yarn test:unit- Run unit and isolated hook tests (Vitest)yarn test:component- Run component tests (Vitest)yarn test:integration- Run cross-module tests (Vitest)yarn test:e2e- Run end-to-end tests (Cypress)yarn test:e2e:context- Run context-path E2E checks against QuestDByarn test:e2e:auth- Run auth-specific e2e testsyarn test:e2e:enterprise- Run enterprise e2e testsyarn typecheck- Run TypeScript type checkingyarn lint- Lint source code (ESLint)yarn lint:fix- Fix linting issues automaticallyyarn sync:questdb- Move thetest/e2e/questdbsubmodule to the head of QuestDBmasterand stage it
Keep unit and component tests beside their source files. Use a clear subject
name that matches the source, such as textSearch.test.ts or
SearchPanel.test.tsx. For index.tsx, use the exported component name.
Group cases for one source in that file. Do not add category suffixes.
- Unit tests use
.test.tsor.test.js. Isolated hook tests also belong here; name them after the hook (useSomething.test.tsxwhen JSX is needed). - Component tests use
.test.tsxor.test.jsxand test rendered UI behavior. - Cross-module tests live under
test/integration, grouped by feature. - Browser journeys live under
test/e2e, grouped by feature.
Use React Testing Library for new component and hook tests. Add
@vitest-environment jsdom when a test needs the DOM. This environment does
not decide its category. Do not add Cypress mount tests.
yarn test runs all Vitest tests once. The separate Vitest workflow needs no
app build or QuestDB server. Each category also has its own command above.
E2E tests use the preview server at localhost:9999, which forwards API requests
to QuestDB at localhost:9000. The E2E workflow builds both once and runs the
auth and console suites. It then restarts QuestDB with a context path and runs
only contextPath.spec.js.
CI builds the QuestDB server for E2E tests from the test/e2e/questdb submodule. The "Check OSS Submodule" workflow fails a push when the submodule is not one of the latest commits of QuestDB master. To fix it, run:
yarn sync:questdbThen commit the staged test/e2e/questdb change. The first run clones the submodule if it is not initialized yet.
To test against a QuestDB branch that is not merged yet, check out that commit in test/e2e/questdb and commit the pointer as usual. Run yarn sync:questdb before merging.
Build the app with yarn build. Start QuestDB with these environment variables:
export QDB_HTTP_CONTEXT_WEB_CONSOLE=/ci/console
export QDB_HTTP_STATIC_PUBLIC_DIRECTORY=/absolute/path/to/ui/dist
export QDB_HTTP_USER=admin
export QDB_HTTP_PASSWORD=quest
export QDB_DEV_MODE_ENABLED=trueThen run:
CYPRESS_BASE_URL=http://localhost:9000/ci/console yarn test:e2e:contextQuestDB must serve the built app directly. This checks redirects, asset loading, and API routes without a preview proxy that could hide incorrect URLs. The spec covers login/logout, settings, SQL, CSV import/export, shared links, MCP pairing, AI loading, and notebook regex loading. Only external services use mocks. OIDC redirect and callback paths also have RTL coverage.
We always welcome contributions from the community!
If you need help, here are some useful links:
- Check GitHub issues for existing discussions
- Read the QuestDB Documentation
- Join our Slack Channel or Community Forum