component-composition
Skill5.2k starsChanged 4 days agoApache-2.0View on GitHub
Guides creation of CloudBeaver React components through children, slots, compound parts, and specialized components. Use when creating React components, designing their props, or choosing how callers supply content, actions, and layout regions.
We split this skill into the rules it gives an agent
10 rules. About 0 are common, 7 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈7
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 8
Keep layout and behavior with the component.
- Distinctive: line 13
If an interface exceeds this limit, use composition to move UI regions and their configuration to the caller.
- Distinctive: line 27
Keep native DOM props, accessibility attributes, refs, and controlled-state contracts intact.
- Distinctive: line 37
Render props: only when content needs state owned by the component.
- Distinctive: line 39
Compound parts: when callers vary the presence, order, or configuration of regions.
- Distinctive: line 41
Separate components: when a mode selects another layout or interaction contract.
- Very specific: line 53
Use roles such as Header, Title, Description, Content, Footer, Actions, Media, Icon, Group, Item, Separator, Trigger, and Label only where …
- Very specific: line 58
Keep layout parts optional and let CSS adapt to their presence.
- Very specific: line 61
Keep whole-component appearance on the root.
- Distinctive: line 68
Read EXAMPLES.md for worked examples using slots and compound parts.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Component composition
Keep layout and behavior with the component; let its caller supply finished pieces of UI. Design the interface around the component's own responsibilities. Let callers compose content and actions instead of configuring nested UI through data, flags, and callbacks.
Components must have no more than five props, excluding children and UI slots.
If an interface exceeds this limit, use composition to move UI regions and their configuration
to the caller. Only genuine UI slots are exempt; renaming a configuration prop does not make it a slot.
Sort every prop first
| A prop that… | Belongs… |
Drives the component's own behavior (value, open, onChange, disabled) | On that component |
Picks a look for the whole component (size, variant) | On the root |
Fills one region (title, description, icon) | In children, a slot, or a part |
Configures a nested element (actionLabel, onAction, actionDisabled, actionClassName) | On the element rendered by the caller |
Selects substantially different markup or interaction (inline, mode="drawer") | In a separate component sharing lower-level parts |
Changes the rendered element (as, tag, href, render) | On the underlying primitive, using its supported API |
Keep native DOM props, accessibility attributes, refs, and controlled-state contracts intact. A boolean that changes a class is not automatically a second component. Domain data also belongs on a feature component that actually owns its behavior; do not turn every domain value into JSX.
Choose the simplest pattern
- Children for the main content. Start here.
- Slots for a small, fixed set of regions. Type
<role>SlotasReactNode; place the value without inspecting it. PreferactionsSlot={<ConnectButton connection={connection} />}to a label, visibility flag, disabled flag, and callback. Follow an existing local slot name when present. - Render props only when content needs state owned by the component. Expose a minimal typed argument, not the component's full store or internal implementation.
- Compound parts when callers vary the presence, order, or configuration of regions. Reuse existing parts before introducing new wrappers.
- Separate components when a mode selects another layout or interaction contract. Share parts underneath; keep small visual variants on the root.
- Wrap and specialize an existing primitive when only defaults or feature wiring differ. Preserve its native and accessibility behavior instead of re-describing its API.
Choose a more structured pattern only when it reduces what real callers have to know.
Bundling props in options, renaming configuration to xSlot, or splitting internals while
keeping the same prop-heavy interface does not transfer ownership.
Compound parts
- Name parts after their root and role:
ConnectionSummaryContent,ConnectionSummaryActions. Use roles such asHeader,Title,Description,Content,Footer,Actions,Media,Icon,Group,Item,Separator,Trigger, andLabelonly where they have a job. - A simple layout part renders one semantic element, accepts that element's props, merges
className, and forwards the remaining props and refs according to the local primitive's API. Zero to two custom props is a useful heuristic, not a limit for headless primitives or controls. - Keep layout parts optional and let CSS adapt to their presence. Do not add
hasActionor inspect, clone, or identify children to discover the layout. Semantic requirements still apply: a dialog needs an accessible name, and interactive parts need their provider and relationships. - Keep whole-component appearance on the root. Use existing classes or
data-*attributes and scoped CSS selectors for parts; do not add context merely to distribute size or spacing. - Reuse the headless primitive's context/store for shared interactions. Add a local typed context only for behavior state that parts genuinely share; follow neighboring context and hook naming.
- A default sub-part can sit behind a convenience boolean if it is also exposed for callers needing control. Do not accumulate booleans to configure that default part.
Read EXAMPLES.md for worked examples using slots and compound parts.
Trending
Steady talk.about the whole repository
Who's talking about dbeaver/cloudbeaver
- dbeaver/dbeaver“Export in Parquet”GitHub · Nov 30, 2022 · 41 reactions
- runtipi/runtipi-appstore“[APP REQUEST] CloudBeaver”GitHub · Sep 10, 2022 · 4 reactions
- A Hacker News story“CloudBeaver: Cloud Database Manager”Hacker News · Aug 19, 2024 · 3 points
- A Hacker News story“CloudBeaver”Hacker News · Oct 19, 2020 · 3 points
- @andyjarrett.com“github.com/dbeaver/clou... DBeaver in the cloud ... a security nightmare but could be handy too :D”Bluesky · Nov 26, 2025 · 2 likes
The biggest 5 of 50 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 50
Talked about on GitHub, Hacker News and Bluesky (50 times).
On GitHub · 45
- Nov 30, 2022Export in Parquet — dbeaver/dbeaver41 reactions · 23 comments
- Sep 10, 2022[APP REQUEST] CloudBeaver — runtipi/runtipi-appstore4 reactions
- Oct 29, 2026dbeaver/pro#11365 Redesign experimental bundles activation — dbeaver/dbeaver1 reaction · 4 comments
- Oct 26, 2026dbeaver/pro#10822 Add user UI settings API — dbeaver/dbeaver0 reactions · 1 comment
- Oct 13, 2026dbeaver/pro#10570 Support subscription auth for Grok — dbeaver/dbeaver0 reactions · 1 comment
40 more on GitHub
- Oct 2, 2026dbeaver/pro#10819 Generate AI profile copy identity in model — dbeaver/dbeaver0 reactions · 1 comment
- Sep 24, 2026dbeaver/pro#10659 Add OpenAI subscription API — dbeaver/dbeaver0 reactions · 1 comment
- Sep 22, 2026dbeaver/dbeaver-devops#2929 use internal product versions — dbeaver/dbvr0 reactions
- Sep 22, 2026dbeaver/dbeaver-devops#2929 use internal desktop versions — dbeaver/dbeaver0 reactions · 1 comment
- Sep 14, 2026dbeaver/cloudbeaver#4650 Update Spring Boot dependencies (#343) — dbeaver/dbeaver-common0 reactions · 1 comment
- Sep 3, 2026dbeaver/pro#7068 moves skills to .agents directory — dbeaver/dbeaver0 reactions · 1 comment
- Sep 2, 2026chore: update Terraform versions to latest — mucsi96/p070 reactions
- Aug 26, 2026chore: update Terraform versions to latest — mucsi96/p070 reactions
- Aug 26, 2026Deploy CloudBeaver as a Tailscale-only PostgreSQL GUI — gwkline/homelab0 reactions · 2 comments
- Aug 12, 2026chore: update Terraform versions to latest — mucsi96/p070 reactions
- Aug 5, 2026chore: update Terraform versions to latest — mucsi96/p070 reactions
- Jul 23, 2026dbeaver/cloudbeaver#4438 Remove mysql comments — dbeaver/dbeaver0 reactions · 1 comment
- Jul 23, 2026dbeaver/pro#4490 bump postgres version — dbeaver/dbeaver0 reactions · 1 comment
- Jul 22, 2026chore: update Terraform versions to latest — mucsi96/p070 reactions
- Jul 15, 2026chore: update Terraform versions to latest — mucsi96/p070 reactions
- Jul 8, 2026chore: update Terraform versions to latest — mucsi96/p070 reactions
- Jun 8, 2026Build separate SSMS-style SQL Practice Ground — gaganpasupuleti/learn-coding-through0 reactions
- May 30, 2026The Docker image for `zxdong262/electerm-web` should support uploading files from the host machine — electerm/electerm-web-docker0 reactions · 4 comments
- May 28, 2026Update repo table — arran4/arran40 reactions
- Apr 8, 2026dbeaver/cloudbeaver#4235 fix connection props for db2i — dbeaver/dbeaver0 reactions
- Feb 4, 2026dbeaver/cloudbeaver#3833 Remove mandatory backup database for community — dbeaver/dbeaver0 reactions
- Jan 14, 2026ww — jamsw666/w-repo0 reactions
- Sep 23, 2025Error: [vite] (client) Pre-transform error: [sass] [sass] [sass] spawn EBADF — vitejs/vite0 reactions · 1 comment
- Sep 15, 2025请求添加cloudbeaver镜像白名单 — DaoCloud/public-image-mirror0 reactions · 1 comment
- May 28, 2025why i can not find idea-workspace-cloudbeaver? — gongziyayu/gumoxiang_posts0 reactions
- May 21, 2025fix: pom in vulnerabilities — databendlabs/databend-jdbc0 reactions
- May 8, 2025dbeaver/cloudbeaver#3174 remove from frontend — dbeaver/dbeaver0 reactions
- Feb 13, 2025SQL工作台缺失OceanBase MySQL的数据源 — actiontech/dms0 reactions · 1 comment
- Jan 15, 2025Add cloudbeaver and/or myphpadmin service — BurnySc2/monorepo0 reactions
- Jan 8, 2025[feat] 통합 DB 관리 GUI 툴 적용 — Kernel360/F2-BAGUNI0 reactions · 1 comment
- May 27, 2024Install a cloud database management tool — opendatahub-io-contrib/datamesh-platform0 reactions · 1 comment
- Jan 8, 2024feature: support accessing database like MySQL in Casvisor web UI — casdoor/awesome-auth0 reactions · 1 comment
- Nov 29, 2023Question: passing X-Forwarded-Email from upstream to service — oauth2-proxy/oauth2-proxy0 reactions · 7 comments
- Sep 28, 2022Oracle database connection error: — dbeaver/dbeaver0 reactions · 7 comments
- Apr 12, 2022Feature #1 manage users in postgreSQL — marcellodesales/mesh-bitcoin-transactions0 reactions
- Sep 14, 2021Incorrect localization name — dbeaver/dbeaver0 reactions · 3 comments
- Feb 15, 2021Changes in sun.security.x509.AlgorithmId in JDK 15 — dbeaver/dbeaver0 reactions · 23 comments
- Jan 22, 2021ERD, Types Builder, Schema — iteria-app/lowcode0 reactions
- Jun 1, 2020[Request] Cloudbeaver — A75G/docker-templates0 reactions
- Apr 25, 2020Add CloudBeaver as a service, possibly replacing Adminer — TrivadisPF/platys-modern-data-platform0 reactions
On Hacker News · 3
- Aug 19, 2024CloudBeaver: Cloud Database Manager3 points
- Oct 19, 2020CloudBeaver3 points
- May 22, 2020CloudBeaver from DBeaver – Self Hosted Web Based Database Manager1 point
On Bluesky · 2
- Nov 26, 2025github.com/dbeaver/clou... DBeaver in the cloud ... a security nightmare but could be handy too :D — @andyjarrett.com2 likes and reposts
- Oct 13, 2025☁️ CloudBeaver — versi web dari DBeaver untuk manajemen database online! 🔧 Akses DB melalui browser dengan UI yang familiar ✅ Mendukung… — @its-me-rhk.bsky.social2 likes and reposts
In this repository4 other files it gives its agents.
- AGENTS.mdAGENTS.md
- cloudbeaver-form-partsSkill
- cloudbeaver-frontend-testsSkill
- extend-at-seamsSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

