This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Dockview is a zero-dependency layout manager supporting tabs, groups, grids and splitviews. It provides framework support for React, Vue, Angular, and vanilla TypeScript. The project is organized as an NX monorepo (package-based approach) with Yarn v1 workspaces.
See per-package AGENTS.md files under packages/ for package-specific guidance.
yarn build- Build all publishable packages via NX (dockview-core, dockview, dockview-vue, dockview-react, dockview-angular)yarn clean- Clean all packagesnpx nx run <package>:<script>- Run a specific script for a single package (e.g.npx nx run dockview-core:build)
NX handles build ordering automatically via dependsOn: ["^build"]. The dependency chain is:
dockview-core → dockview → dockview-react
dockview-core → dockview-vue
dockview-core → dockview-angular
dockview-corecompiles SCSS to CSS via Gulp (gulp sass)- All other packages copy CSS from
dockview-coreusingscripts/copy-css.js
yarn test- Run Jest tests across all packages via NXyarn test:cov- Run tests with coverage (root-level Jest invocation for SonarCloud unified coverage)
yarn lint- Run ESLint across all packages via NXyarn lint:fix- Run ESLint with automatic fixingyarn format- Run Prettier across all packagesyarn format:check- Check Prettier formatting
yarn docs- Generate TypeDoc documentation
yarn release- NX release (fixed versioning, all packages share same version)yarn release:version- Bump versionyarn release:publish- Publish to npm
- packages/dockview-core - Core layout engine (TypeScript, framework-agnostic, zero dependencies)
- packages/dockview - React bindings and components
- packages/dockview-vue - Vue 3 bindings and components
- packages/dockview-angular - Angular bindings and components
- packages/dockview-react - Re-export wrapper (
export * from 'dockview') - packages/docs - Documentation website (Docusaurus v3)
- DockviewComponent - Main container managing panels and groups
- DockviewGroupPanel - Container for related panels with tabs
- DockviewPanel - Individual content panels
- Gridview/Splitview/Paneview - Different layout strategies
- API Layer - Programmatic interfaces for each component type
- Framework-specific packages provide thin wrappers around core components
- React package uses HOCs and hooks for component lifecycle management
- Vue package provides Vue 3 composition API integration
- All frameworks share the same core serialization/deserialization logic
- Drag and drop with customizable drop zones
- Floating groups and popout windows
- Serialization/deserialization for state persistence
- Theming system with CSS custom properties
- Comprehensive API for programmatic control
- NX for monorepo orchestration (package-based,
useInferencePlugins: false) - Yarn v1 for package management and workspaces
- TypeScript (
tsc) for CJS + ESM compilation - Gulp for SCSS processing (dockview-core only)
- Rollup for UMD bundles (dockview-core, dockview, dockview-react)
- Vite for Vue package builds
- ng-packagr for Angular Package Format builds
- Jest with ts-jest preset for TypeScript support
- Testing Library for React component testing
- Coverage reporting with SonarCloud integration
- Each package has its own jest.config.ts extending root configuration
- ESLint configuration extends recommended TypeScript rules
- Prettier for code formatting
- Linting targets source files in packages/*/src/** (excludes tests, docs, node_modules)
- Current rules focus on TypeScript best practices while allowing some flexibility
- Use NX commands for cross-package operations (
npx nx run-many -t <target>) - Each package can be built independently via
npx nx run <package>:build - Core package must be built before framework packages (NX handles this automatically)
- Start with core package implementation
- Add corresponding API methods in api/ directory
- Create framework-specific wrappers as needed
- Update TypeDoc documentation
- Add tests in __tests__ directories
- Run
yarn lintto check code quality before committing
- Components use internal state with event-driven updates
- Serialization provides snapshot-based state persistence
- APIs provide reactive interfaces with event subscriptions
Release notes are stored in packages/docs/blog/ with the naming format YYYY-MM-DD-dockview-X.Y.Z.md.
To create release notes for a new version:
- Check git commits since the last release:
git log --oneline --since="YYYY-MM-DD" - Create a new markdown file following the established format:
- Front matter with slug, title, and tags
- Sections for Features, Miscs, and Breaking changes
- Reference GitHub PR numbers for significant changes
- Focus on user-facing changes, bug fixes, and new features
Example format:
---
slug: dockview-X.Y.Z-release
title: Dockview X.Y.Z
tags: [release]
---
# Release Notes
Please reference docs @ [dockview.dev](https://dockview.dev).
## Features
- Feature description [#PR](link)
## Miscs
- Bug: Fix description [#PR](link)
- Chore: Maintenance description [#PR](link)
## Breaking changes