DnDGem — adaptive drag-and-drop and layout engine for modern applications.
0
stars
178
commits
TypeScript
primary language
Sep 11, 2026
updated
DnDGem by DA62
Drag. Resize. Adapt. Without breaking your content.
Category: Content-Aware Adaptive Layout Engine
Created and maintained by Davide Agosti.
Canonical website: https://dndgem.dev
DA62: https://davideagosti.com
DnDGem lays out draggable dashboard-style content using content-aware constraints, deterministic solving, and adaptive reflow — so a layout that geometrically fits can still be classified as less useful when content needs are missed.
GEOMETRICALLY FITS ≠ CONTENT REMAINS USEFUL
It is not merely a grid library, a drag-and-drop wrapper, a React-only library, or a dnd-kit abstraction. React is a thin adapter; Core stays framework-agnostic.
See it immediately: https://playground.dndgem.dev/
Integrate it: Quick Start (~10–15 minutes once packages are available to your app). Public page: https://dndgem.dev/docs/quick-start/
npm install @dndgem/react@alpha
npm install @dndgem/vue@alpha
npm install @dndgem/angular@alpha
npm install @dndgem/svelte@alpha
npm install @dndgem/dom@alpha
Install with dist-tag alpha only (@dndgem/*@alpha → 0.1.0-alpha.4). This is not a stable release; do not treat latest as a stable or Alpha channel.
pnpm install
pnpm build
pnpm --filter @dndgem/example-react dev
pnpm --filter @dndgem/example-vue dev
pnpm --filter @dndgem/example-angular dev
pnpm --filter @dndgem/example-svelte dev
See Quick Start for the full first-integration guide.
import { DnDGemProvider, useDnDGemContainer, useDnDGemItem } from '@dndgem/react';
function Board() {
const containerRef = useDnDGemContainer();
const revenue = useDnDGemItem('revenue');
return (
<div ref={containerRef} style={{ position: 'relative', width: 480, height: 240 }}>
<article ref={revenue.ref} style={{ background: '#2f6f5e', color: '#fff', ...revenue.style }}>
Revenue
</article>
</div>
);
}
export function App() {
return (
<DnDGemProvider
items={[
{ id: 'revenue', constraints: { minWidth: 96, minUsefulWidth: 140, preferredWidth: 180 } },
]}
desiredPlacements={{ revenue: { x: 12, y: 12, width: 180, height: 88 } }}
>
<Board />
</DnDGemProvider>
);
}
@dndgem/core renderer-agnostic domain, validity, scoring, solver
▲
@dndgem/dom DOM measurement, resize, drag, layout session
▲
@dndgem/react React adapter (peerDependency: react)
@dndgem/vue Vue 3 adapter (peerDependency: vue)
@dndgem/angular Angular adapter (peerDependency: @angular/core)
@dndgem/svelte Svelte 5 adapter (peerDependency: svelte)
| Need | Package |
|---|---|
| Headless solve / evaluate | @dndgem/core |
| Vanilla browser integration | @dndgem/dom |
| React integration | @dndgem/react |
| Vue integration | @dndgem/vue |
| Angular integration | @dndgem/angular |
| Svelte integration | @dndgem/svelte |
Validated meta-framework environments (not npm packages): Next.js → @dndgem/react; Nuxt → @dndgem/vue; SvelteKit → @dndgem/svelte.
DnDGem is open source (MIT). Development happens in this public GitHub repository. The project is early Alpha (product maturity: BETA-CANDIDATE): APIs may change; this is not a stable 1.0 release. A Beta readiness program is authorized; a Beta release is not authorized. Claim boundaries: Beta Claim & Support Policy.
| Phase | Status |
|---|---|
| Phase 1 Technical MVP | CLOSED (DND-1.1 → DND-1.8) |
| Phase 2 Public Alpha Readiness | PASS — Public Alpha LIVE |
| Phase 3 Adaptive Auto-Layout | COMPLETE / RELEASED (0.1.0-alpha.1) |
| Framework Expansion Gate | COMPLETE (DND-FX.1–FX.6; shipped as 0.1.0-alpha.3) |
| Phase 4 Layout Intelligence | COMPLETE AND SHIPPED (0.1.0-alpha.4) |
| Beta Readiness Program | AUTHORIZED — Beta release NOT AUTHORIZED |
Current official npm Alpha: 0.1.0-alpha.4 (release notes — PUBLISHED). Install with dist-tag alpha (npm install @dndgem/react@alpha, @dndgem/vue@alpha, etc.) — resolves to 0.1.0-alpha.4. Previous: 0.1.0-alpha.3, 0.1.0-alpha.2 (superseded), 0.1.0-alpha.1. Historical first Alpha: 0.1.0-alpha.0. latest is not the Alpha channel (Core/DOM/React remain 0.1.0-alpha.0; Vue/Angular/Svelte remain 0.1.0-alpha.2 from first-package npm assignment).
Public product home: https://dndgem.dev (see Public site & domain hosting). Source: github.com/DnDGem/dndgem. Playground: https://playground.dndgem.dev/.
examples/react, examples/vanilla, examples/vue, examples/angular, examples/svelte (Vue, Angular, and Svelte are workspace-only). Meta-framework fixtures: apps/compat-next, apps/compat-nuxt, apps/compat-sveltekit (see Meta-frameworks).Validated for Public Alpha on Chromium, Firefox, and WebKit (Playwright desktop engines). Mobile / touch are not validated.
Details: Browser Support
Pointer drag and Escape cancel are supported. Focus / consumer ARIA preservation are baseline-supported. Keyboard drag and screen-reader drag announcements are deferred.
Details: Accessibility
DnDGemProvider is client-mount only (no server-side layout claim; Next.js / Nuxt / SvelteKit are validated compatibility environments — Meta-frameworks)@alpha (0.1.0-alpha.4); default offautomaticItemOrder are opt-in on @alpha; model assistance deferred@dndgem/vue, @dndgem/angular, @dndgem/svelte on @alpha)Details: Limitations · Alpha API Contract · Release notes
Preferred public playground: https://playground.dndgem.dev/
Provider URL (keep available): https://dndgem-playground.pages.dev/
Local static build:
pnpm --filter @dndgem/playground build
Public landing site (static):
pnpm --filter @dndgem/www build
| Need | Where |
|---|---|
| Reproducible bugs | GitHub Issues (Bug report form) |
| Usage / implementation questions | GitHub Discussions |
| Ideas / use cases / Alpha feedback | GitHub Discussions |
| Concrete feature requests | GitHub Issues (Feature request) |
| Private support | https://dndgem.dev/support/ · support@dndgem.dev |
| Security vulnerabilities | SECURITY.md · security@dndgem.dev (do not open a public Issue) |
Discussions is the planned home for usage questions and broader feedback. Category configuration may follow separately.
Requirements: Node.js 20+, pnpm 10.
pnpm install
pnpm build
pnpm lint
pnpm format:check
pnpm typecheck
pnpm test
pnpm check:boundaries
pnpm check:docs-links
pnpm test:pack
pnpm test:e2e
pnpm bench:core:semantics
pnpm test:e2e runs the Alpha browser matrix (Chromium + Firefox + WebKit). Install browsers once with pnpm test:e2e:install. Chromium-only: pnpm test:e2e:chromium.
Quality policy: feature → develop uses the full local Sprint Final Quality Gate (no GitHub CI). develop → master runs full GitHub CI. See Testing Strategy.
MIT — see LICENSE.
See CONTRIBUTING.md and CODE_OF_CONDUCT.md. Security reports: SECURITY.md.
178 commits
TypeScript
84.5%
JavaScript
9.0%
HTML
4.4%
CSS
1.5%
DnDGem — adaptive drag-and-drop and layout engine for modern applications.
0
stars
178
commits
TypeScript
primary language
Sep 11, 2026
updated
DnDGem by DA62
Drag. Resize. Adapt. Without breaking your content.
Category: Content-Aware Adaptive Layout Engine
Created and maintained by Davide Agosti.
Canonical website: https://dndgem.dev
DA62: https://davideagosti.com
DnDGem lays out draggable dashboard-style content using content-aware constraints, deterministic solving, and adaptive reflow — so a layout that geometrically fits can still be classified as less useful when content needs are missed.
GEOMETRICALLY FITS ≠ CONTENT REMAINS USEFUL
It is not merely a grid library, a drag-and-drop wrapper, a React-only library, or a dnd-kit abstraction. React is a thin adapter; Core stays framework-agnostic.
See it immediately: https://playground.dndgem.dev/
Integrate it: Quick Start (~10–15 minutes once packages are available to your app). Public page: https://dndgem.dev/docs/quick-start/
npm install @dndgem/react@alpha
npm install @dndgem/vue@alpha
npm install @dndgem/angular@alpha
npm install @dndgem/svelte@alpha
npm install @dndgem/dom@alpha
Install with dist-tag alpha only (@dndgem/*@alpha → 0.1.0-alpha.4). This is not a stable release; do not treat latest as a stable or Alpha channel.
pnpm install
pnpm build
pnpm --filter @dndgem/example-react dev
pnpm --filter @dndgem/example-vue dev
pnpm --filter @dndgem/example-angular dev
pnpm --filter @dndgem/example-svelte dev
See Quick Start for the full first-integration guide.
import { DnDGemProvider, useDnDGemContainer, useDnDGemItem } from '@dndgem/react';
function Board() {
const containerRef = useDnDGemContainer();
const revenue = useDnDGemItem('revenue');
return (
<div ref={containerRef} style={{ position: 'relative', width: 480, height: 240 }}>
<article ref={revenue.ref} style={{ background: '#2f6f5e', color: '#fff', ...revenue.style }}>
Revenue
</article>
</div>
);
}
export function App() {
return (
<DnDGemProvider
items={[
{ id: 'revenue', constraints: { minWidth: 96, minUsefulWidth: 140, preferredWidth: 180 } },
]}
desiredPlacements={{ revenue: { x: 12, y: 12, width: 180, height: 88 } }}
>
<Board />
</DnDGemProvider>
);
}
@dndgem/core renderer-agnostic domain, validity, scoring, solver
▲
@dndgem/dom DOM measurement, resize, drag, layout session
▲
@dndgem/react React adapter (peerDependency: react)
@dndgem/vue Vue 3 adapter (peerDependency: vue)
@dndgem/angular Angular adapter (peerDependency: @angular/core)
@dndgem/svelte Svelte 5 adapter (peerDependency: svelte)
| Need | Package |
|---|---|
| Headless solve / evaluate | @dndgem/core |
| Vanilla browser integration | @dndgem/dom |
| React integration | @dndgem/react |
| Vue integration | @dndgem/vue |
| Angular integration | @dndgem/angular |
| Svelte integration | @dndgem/svelte |
Validated meta-framework environments (not npm packages): Next.js → @dndgem/react; Nuxt → @dndgem/vue; SvelteKit → @dndgem/svelte.
DnDGem is open source (MIT). Development happens in this public GitHub repository. The project is early Alpha (product maturity: BETA-CANDIDATE): APIs may change; this is not a stable 1.0 release. A Beta readiness program is authorized; a Beta release is not authorized. Claim boundaries: Beta Claim & Support Policy.
| Phase | Status |
|---|---|
| Phase 1 Technical MVP | CLOSED (DND-1.1 → DND-1.8) |
| Phase 2 Public Alpha Readiness | PASS — Public Alpha LIVE |
| Phase 3 Adaptive Auto-Layout | COMPLETE / RELEASED (0.1.0-alpha.1) |
| Framework Expansion Gate | COMPLETE (DND-FX.1–FX.6; shipped as 0.1.0-alpha.3) |
| Phase 4 Layout Intelligence | COMPLETE AND SHIPPED (0.1.0-alpha.4) |
| Beta Readiness Program | AUTHORIZED — Beta release NOT AUTHORIZED |
Current official npm Alpha: 0.1.0-alpha.4 (release notes — PUBLISHED). Install with dist-tag alpha (npm install @dndgem/react@alpha, @dndgem/vue@alpha, etc.) — resolves to 0.1.0-alpha.4. Previous: 0.1.0-alpha.3, 0.1.0-alpha.2 (superseded), 0.1.0-alpha.1. Historical first Alpha: 0.1.0-alpha.0. latest is not the Alpha channel (Core/DOM/React remain 0.1.0-alpha.0; Vue/Angular/Svelte remain 0.1.0-alpha.2 from first-package npm assignment).
Public product home: https://dndgem.dev (see Public site & domain hosting). Source: github.com/DnDGem/dndgem. Playground: https://playground.dndgem.dev/.
examples/react, examples/vanilla, examples/vue, examples/angular, examples/svelte (Vue, Angular, and Svelte are workspace-only). Meta-framework fixtures: apps/compat-next, apps/compat-nuxt, apps/compat-sveltekit (see Meta-frameworks).Validated for Public Alpha on Chromium, Firefox, and WebKit (Playwright desktop engines). Mobile / touch are not validated.
Details: Browser Support
Pointer drag and Escape cancel are supported. Focus / consumer ARIA preservation are baseline-supported. Keyboard drag and screen-reader drag announcements are deferred.
Details: Accessibility
DnDGemProvider is client-mount only (no server-side layout claim; Next.js / Nuxt / SvelteKit are validated compatibility environments — Meta-frameworks)@alpha (0.1.0-alpha.4); default offautomaticItemOrder are opt-in on @alpha; model assistance deferred@dndgem/vue, @dndgem/angular, @dndgem/svelte on @alpha)Details: Limitations · Alpha API Contract · Release notes
Preferred public playground: https://playground.dndgem.dev/
Provider URL (keep available): https://dndgem-playground.pages.dev/
Local static build:
pnpm --filter @dndgem/playground build
Public landing site (static):
pnpm --filter @dndgem/www build
| Need | Where |
|---|---|
| Reproducible bugs | GitHub Issues (Bug report form) |
| Usage / implementation questions | GitHub Discussions |
| Ideas / use cases / Alpha feedback | GitHub Discussions |
| Concrete feature requests | GitHub Issues (Feature request) |
| Private support | https://dndgem.dev/support/ · support@dndgem.dev |
| Security vulnerabilities | SECURITY.md · security@dndgem.dev (do not open a public Issue) |
Discussions is the planned home for usage questions and broader feedback. Category configuration may follow separately.
Requirements: Node.js 20+, pnpm 10.
pnpm install
pnpm build
pnpm lint
pnpm format:check
pnpm typecheck
pnpm test
pnpm check:boundaries
pnpm check:docs-links
pnpm test:pack
pnpm test:e2e
pnpm bench:core:semantics
pnpm test:e2e runs the Alpha browser matrix (Chromium + Firefox + WebKit). Install browsers once with pnpm test:e2e:install. Chromium-only: pnpm test:e2e:chromium.
Quality policy: feature → develop uses the full local Sprint Final Quality Gate (no GitHub CI). develop → master runs full GitHub CI. See Testing Strategy.
MIT — see LICENSE.
See CONTRIBUTING.md and CODE_OF_CONDUCT.md. Security reports: SECURITY.md.
178 commits
TypeScript
84.5%
JavaScript
9.0%
HTML
4.4%
CSS
1.5%