windmill-labs/windmill · error · Error

AgGrid Enterprise Edition require Windmill Enterprise…

Error message

AgGrid Enterprise Edition require Windmill Enterprise Edition

What it means

Inserting an AgGrid component of type 'aggridcomponentee' (Enterprise Edition grid) requires a Windmill Enterprise Edition license. When no enterprise license is active, insertNewGridItem shows a toast and throws to block adding the component.

Solutions

  1. Use the community 'aggridcomponent' instead of 'aggridcomponentee'
  2. Obtain and activate a Windmill Enterprise Edition license (instance settings) and reload the editor
  3. Remove the EE grid components when copying apps between community and EE instances

Example fix

// before (component def)
{ type: 'aggridcomponentee', ... }
// after
{ type: 'aggridcomponent', ... }
Defensive patterns

Strategy: validation

Validate before calling

import { get } from 'svelte/store'; import { enterpriseLicense } from '$lib/stores'; if (componentType === 'aggridcomponentee' && !get(enterpriseLicense)) { alert('EE AgGrid requires an Enterprise license'); }

Type guard

function canInsertEeGrid(licensed: boolean): boolean { return licensed; }

Try / catch

try { insertNewGridItem(app, data); } catch (e) { if (String(e.message).includes('Enterprise Edition')) { sendUserToast('Switch to the community aggridcomponent or activate an EE license.', true); } else throw e; }

Prevention

When it happens

Trigger: Adding or pasting an aggridcomponentee component in the app editor (newItem, handlePaste, moveComponentBetweenSubgrids, moveToRoot, setUpTopBarComponentContent) while get(enterpriseLicense) is falsy.

Common situations: Community-edition instance trying to use EE-only AgGrid features; license expired or not loaded on the instance; duplicating/pasting an app section containing an EE grid into a community instance.

Related errors


AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03). Data as JSON: /api/errors/ddc0b039c7a71159. Report an issue: GitHub.

Appendix: source

Thrown at frontend/src/lib/components/apps/editor/appUtils.ts:552

export function insertNewGridItem(
	app: App,
	builddata: (id: string) => AppComponent,
	focusedGrid: FocusedGrid | undefined,
	columns?: Record<string, any>,
	keepId?: string,
	initialPosition: { x: number; y: number } = { x: 0, y: 0 },
	recOverride?: Record<number, Size>,
	keepSubgrids?: boolean,
	fixed?: boolean,
	shouldNotFindSpace?: boolean
): string {
	const id = keepId ?? getNextGridItemId(app)

	const data = builddata(id)

	if (data.type == 'aggridcomponentee' && !get(enterpriseLicense)) {
		sendUserToast('AgGrid Enterprise Edition require Windmill Enterprise Edition', true)
		throw Error('AgGrid Enterprise Edition require Windmill Enterprise Edition')
	}
	if (!app.subgrids) {
		app.subgrids = {}
	}

	// We only want to set subgrids when we are not moving
	if (!keepId || keepSubgrids) {
		for (let i = 0; i < (data.numberOfSubgrids ?? 0); i++) {
			app.subgrids[`${id}-${i}`] = []
		}
	}

	const key = focusedGrid
		? `${focusedGrid?.parentComponentId}-${focusedGrid?.subGridIndex ?? 0}`
		: undefined

	if (key && app.subgrids[key] === undefined) {
		let parent = findGridItemById(app.grid, app.subgrids, key)?.data

View on GitHub (pinned to e474e8803c)