CloudBeaver is an open-source, web-based database management application. Its modular frontend provides the database navigator, SQL editor, data editor, administration, and related features, and communicates with the CloudBeaver server through GraphQL.
- These instructions apply to the frontend under
webapp/in CloudBeaver Community Edition and to any other CloudBeaver edition or product that shares this frontend architecture. - Do not modify
server/,deploy/, or backend configuration unless the task explicitly requires it. Backend GraphQL schemas are an input to frontend code generation, not part of the default edit scope. - Treat
package.json,.yarnrc.yml, and the frontend CI workflows as the source of truth for tool and runtime versions; do not duplicate their version numbers in documentation.
webapp/package.json: Yarn Plug'n'Play workspace root and repository-wide frontend scripts.webapp/packages/core-*: shared application foundations, services, UI primitives, state, and infrastructure.webapp/packages/plugin-*: feature modules. A package normally registers services and bootstraps insrc/module.tsand exposes its public API fromsrc/index.ts.webapp/packages/product-*: CE product composition and Vite entry points.product-defaultis the runnable/bundled frontend;product-default-implselects the CE plugin set.webapp/packages/core-sdk: GraphQL operations and generated client types.webapp/common-typescript/@dbeaver/*andwebapp/common-react/@dbeaver/*: shared DBeaver utilities and React components used by the workspace.- Tests are colocated with source as
*.test.tsor*.test.tsx; styles are usually colocated CSS modules.
TypeScript ES modules, React, MobX, the project DI/module registry, GraphQL Code Generator, Vite, Yarn workspaces with PnP, Vitest and Testing Library, ESLint, Prettier, CSS Modules, and Tailwind-based theming.
Use the Node version configured by frontend CI and the Yarn version pinned in webapp/package.json. Run frontend commands from webapp/ unless noted.
corepack enable
cd webapp
yarn install --immutable# Start the frontend dev server; a compatible CloudBeaver API must run separately.
(cd packages/product-default && yarn dev)
# From webapp/: repository-wide checks.
yarn lint
yarn test
yarn validate-dependencies
# Production frontend build.
(cd packages/product-default && yarn bundle)For a focused check, use a package's existing script, for example yarn workspace @cloudbeaver/core-utils test or yarn workspace @cloudbeaver/plugin-sql-editor lint. Do not invent a package script that is absent from its package.json.
- Put changes in the smallest package that owns the behavior. Prefer existing
core-*abstractions and UI primitives before adding cross-package helpers. - Keep dependencies directed from plugins to core:
core-*packages must never import or depend onplugin-*packages. Plugins may use public APIs from core packages and from other plugins, subject to the administration boundary and the no-cycles rule below. - Put administration-only behavior in a separate package whose name ends with
-administration. Public/non-administration plugins must not import or depend on administration packages. - Keep the workspace package dependency graph acyclic; do not introduce direct or indirect circular dependencies.
- Import workspace packages through their public
@cloudbeaver/*or@dbeaver/*exports; never reach into another package'ssrc/directory. - When adding a workspace dependency, update the package's
package.jsonthrough Yarn. The configuredts-project-linkersynchronizestsconfig.jsonproject references during a non-immutable install; edit references manually only if automatic linking cannot complete. Runyarn validate-dependenciesafterward. - Register services and bootstraps through the package's
src/module.ts. Change product composition only when enabling or disabling a package for the CE product. - Put user-visible text in the package localization files and follow the neighboring
LocaleServicepattern; do not hardcode UI copy in components. - Add or change GraphQL operations as
.gqlfiles incore-sdk. Regenerate throughyarn workspace @cloudbeaver/core-sdk gql:gen; never edit the ignored generatedsrc/sdk.tsmanually. - Preserve valid license headers on existing source files. When modifying an existing source file, update the ending copyright year to the current four-digit calendar year while keeping its original starting year. For new source files, use the template below and replace
<CURRENT_YEAR>with the current year; never leave the placeholder in committed code. Use the repository ESLint and Prettier configuration rather than manual formatting rules. - Do not edit or commit generated/install artifacts such as
node_modules/,.pnp.*,lib/,dist/,coverage/, orallure-results/. - Add focused tests for behavior changes. Before handoff, run lint and tests for affected packages; run the repository-wide checks and product bundle for cross-cutting or product-composition changes.
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-<CURRENT_YEAR> DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
- Before backend work, read and follow
../dbeaver/AGENTS.mdfor inherited Java and Tycho conventions. - Cloudbeaver does not use SWT or Eclipse RCP, and its backend is headless.
- Configuration file is generated using
apps/config-generator. For making changes there, updateconfig/template/cloudbeaver-base.confor use patches (for specific product parameters).
- Use consistent names. IDs must use type
ID; ID arguments and inputs must end withId, for exampleprojectId. - Top-level methods follow
{pluginId}{methodName}, for exampleauthLogin,rmListProjects, andnavNodeChildren. Mark new public API with@since. - Preserve released APIs: deprecate instead of renaming or removing, include the deprecation version, and remove only after more than one year. EA-only APIs may change before public release.
- New arguments and input fields added to a released API must be optional.
- Please use header from ../dbeaver/docs/license_header.txt for backend source files.