← ToolJetCONTENT HISTORY

Update to ToolJet

Snapshot Nov 10, 2026 · 00:10 UTC · version 0.12.0

Collection source: downloaded plugin package.

WHAT CHANGED

First saved snapshot

No earlier snapshot is available to establish a change.

Save ToolJet and check future changes in Following.

Up to 3 plugins free · no card required.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Build or update ToolJet dashboards, internal tools, back-office and team operations apps, including spreadsheet replacements. Requires a ToolJet MCP connection. Excludes one-off spreadsheet analysis, static charts, advice-only comparisons and standalone code projects outside ToolJet.",
  "included_files": [
    {
      "relative_path": "references/catalog/Accordion.json",
      "size_in_bytes": 5460
    },
    {
      "relative_path": "references/catalog/AudioRecorder.json",
      "size_in_bytes": 4356
    },
    {
      "relative_path": "references/catalog/BoundedBox.json",
      "size_in_bytes": 2606
    },
    {
      "relative_path": "references/catalog/Button.json",
      "size_in_bytes": 7649
    },
    {
      "relative_path": "references/catalog/ButtonGroupV2.json",
      "size_in_bytes": 9718
    },
    {
      "relative_path": "references/catalog/Calendar.json",
      "size_in_bytes": 7147
    },
    {
      "relative_path": "references/catalog/Camera.json",
      "size_in_bytes": 3769
    },
    {
      "relative_path": "references/catalog/Cascader.json",
      "size_in_bytes": 13481
    },
    {
      "relative_path": "references/catalog/Chart.json",
      "size_in_bytes": 4355
    },
    {
      "relative_path": "references/catalog/Chat.json",
      "size_in_bytes": 8776
    },
    {
      "relative_path": "references/catalog/Checkbox.json",
      "size_in_bytes": 5622
    },
    {
      "relative_path": "references/catalog/CircularProgressBar.json",
      "size_in_bytes": 5073
    },
    {
      "relative_path": "references/catalog/CodeEditor.json",
      "size_in_bytes": 2341
    },
    {
      "relative_path": "references/catalog/ColorPicker.json",
      "size_in_bytes": 6868
    },
    {
      "relative_path": "references/catalog/Container.json",
      "size_in_bytes": 4865
    },
    {
      "relative_path": "references/catalog/CurrencyInput.json",
      "size_in_bytes": 7906
    },
    {
      "relative_path": "references/catalog/CustomComponent.json",
      "size_in_bytes": 1798
    },
    {
      "relative_path": "references/catalog/DatePickerV2.json",
      "size_in_bytes": 9643
    },
    {
      "relative_path": "references/catalog/DaterangePicker.json",
      "size_in_bytes": 9628
    },
    {
      "relative_path": "references/catalog/DatetimePickerV2.json",
      "size_in_bytes": 10452
    },
    {
      "relative_path": "references/catalog/Divider.json",
      "size_in_bytes": 2573
    },
    {
      "relative_path": "references/catalog/DropdownV2.json",
      "size_in_bytes": 11024
    },
    {
      "relative_path": "references/catalog/EmailInput.json",
      "size_in_bytes": 7584
    },
    {
      "relative_path": "references/catalog/FileButton.json",
      "size_in_bytes": 6773
    },
    {
      "relative_path": "references/catalog/FileInput.json",
      "size_in_bytes": 7204
    },
    {
      "relative_path": "references/catalog/FilePicker.json",
      "size_in_bytes": 7565
    },
    {
      "relative_path": "references/catalog/FlexContainer.json",
      "size_in_bytes": 4302
    },
    {
      "relative_path": "references/catalog/Form.json",
      "size_in_bytes": 11015
    },
    {
      "relative_path": "references/catalog/Html.json",
      "size_in_bytes": 2944
    },
    {
      "relative_path": "references/catalog/IFrame.json",
      "size_in_bytes": 3365
    },
    {
      "relative_path": "references/catalog/Icon.json",
      "size_in_bytes": 3256
    },
    {
      "relative_path": "references/catalog/Image.json",
      "size_in_bytes": 5844
    },
    {
      "relative_path": "references/catalog/JSONEditor.json",
      "size_in_bytes": 4945
    },
    {
      "relative_path": "references/catalog/JSONExplorer.json",
      "size_in_bytes": 5039
    },
    {
      "relative_path": "references/catalog/Kanban.json",
      "size_in_bytes": 9729
    },
    {
      "relative_path": "references/catalog/KeyValuePair.json",
      "size_in_bytes": 14424
    },
    {
      "relative_path": "references/catalog/Link.json",
      "size_in_bytes": 5363
    },
    {
      "relative_path": "references/catalog/Listview.json",
      "size_in_bytes": 8435
    },
    {
      "relative_path": "references/catalog/Map.json",
      "size_in_bytes": 4421
    },
    {
      "relative_path": "references/catalog/ModalV2.json",
      "size_in_bytes": 12047
    },
    {
      "relative_path": "references/catalog/ModuleContainer.json",
      "size_in_bytes": 1099
    },
    {
      "relative_path": "references/catalog/ModuleViewer.json",
      "size_in_bytes": 1250
    },
    {
      "relative_path": "references/catalog/MultiselectV2.json",
      "size_in_bytes": 11762
    },
    {
      "relative_path": "references/catalog/Navigation.json",
      "size_in_bytes": 8303
    },
    {
      "relative_path": "references/catalog/NumberInput.json",
      "size_in_bytes": 8821
    },
    {
      "relative_path": "references/catalog/PDF.json",
      "size_in_bytes": 1824
    },
    {
      "relative_path": "references/catalog/Pagination.json",
      "size_in_bytes": 3342
    },
    {
      "relative_path": "references/catalog/PasswordInput.json",
      "size_in_bytes": 7073
    },
    {
      "relative_path": "references/catalog/PhoneInput.json",
      "size_in_bytes": 7261
    },
    {
      "relative_path": "references/catalog/PopoverMenu.json",
      "size_in_bytes": 7950
    },
    {
      "relative_path": "references/catalog/ProgressBar.json",
      "size_in_bytes": 4637
    },
    {
      "relative_path": "references/catalog/QrScanner.json",
      "size_in_bytes": 951
    },
    {
      "relative_path": "references/catalog/RadioButtonV2.json",
      "size_in_bytes": 8208
    },
    {
      "relative_path": "references/catalog/RangeSliderV2.json",
      "size_in_bytes": 6639
    },
    {
      "relative_path": "references/catalog/ReorderableList.json",
      "size_in_bytes": 4626
    },
    {
      "relative_path": "references/catalog/RichTextEditor.json",
      "size_in_bytes": 2852
    },
    {
      "relative_path": "references/catalog/Spinner.json",
      "size_in_bytes": 974
    },
    {
      "relative_path": "references/catalog/StarRating.json",
      "size_in_bytes": 6454
    },
    {
      "relative_path": "references/catalog/Statistics.json",
      "size_in_bytes": 9071
    },
    {
      "relative_path": "references/catalog/Steps.json",
      "size_in_bytes": 6349
    },
    {
      "relative_path": "references/catalog/SvgImage.json",
      "size_in_bytes": 1239
    },
    {
      "relative_path": "references/catalog/Table.json",
      "size_in_bytes": 29235
    },
    {
      "relative_path": "references/catalog/Tabs.json",
      "size_in_bytes": 10506
    },
    {
      "relative_path": "references/catalog/Tags.json",
      "size_in_bytes": 6045
    },
    {
      "relative_path": "references/catalog/TagsInput.json",
      "size_in_bytes": 9172
    },
    {
      "relative_path": "references/catalog/Text.json",
      "size_in_bytes": 7686
    },
    {
      "relative_path": "references/catalog/TextArea.json",
      "size_in_bytes": 7835
    },
    {
      "relative_path": "references/catalog/TextInput.json",
      "size_in_bytes": 8404
    },
    {
      "relative_path": "references/catalog/TimePicker.json",
      "size_in_bytes": 7610
    },
    {
      "relative_path": "references/catalog/Timeline.json",
      "size_in_bytes": 2466
    },
    {
      "relative_path": "references/catalog/Timer.json",
      "size_in_bytes": 1816
    },
    {
      "relative_path": "references/catalog/ToggleSwitchV2.json",
      "size_in_bytes": 5127
    },
    {
      "relative_path": "references/catalog/TreeSelect.json",
      "size_in_bytes": 12056
    },
    {
      "relative_path": "references/catalog/VerticalDivider.json",
      "size_in_bytes": 1786
    },
    {
      "relative_path": "references/catalog/_index.json",
      "size_in_bytes": 6182
    },
    {
      "relative_path": "references/components.md",
      "size_in_bytes": 17776
    },
    {
      "relative_path": "references/datasources.md",
      "size_in_bytes": 24634
    },
    {
      "relative_path": "references/events.md",
      "size_in_bytes": 8848
    },
    {
      "relative_path": "references/forms.md",
      "size_in_bytes": 18870
    },
    {
      "relative_path": "references/migration.md",
      "size_in_bytes": 5243
    },
    {
      "relative_path": "references/qa.md",
      "size_in_bytes": 11750
    },
    {
      "relative_path": "references/security.md",
      "size_in_bytes": 3568
    },
    {
      "relative_path": "references/tables.md",
      "size_in_bytes": 14366
    },
    {
      "relative_path": "references/themes.md",
      "size_in_bytes": 14348
    },
    {
      "relative_path": "references/ui-layout.md",
      "size_in_bytes": 35747
    },
    {
      "relative_path": "references/workflow-builder.md",
      "size_in_bytes": 5895
    },
    {
      "relative_path": "references/workflows.md",
      "size_in_bytes": 48277
    },
    {
      "relative_path": "scripts/browser-audit.js",
      "size_in_bytes": 9317
    }
  ],
  "name": "tooljet-app-builder",
  "skill_md_contents": "---\nname: tooljet-app-builder\ndescription: \"Build or update ToolJet dashboards, internal tools, back-office and team operations apps, including spreadsheet replacements. Requires a ToolJet MCP connection. Excludes one-off spreadsheet analysis, static charts, advice-only comparisons and standalone code projects outside ToolJet.\"\nmetadata:\n  generated_by: scripts/generate-skill.mjs\n  sources: >-\n    Source-verified component binding rules (22 components);\n    ToolJet WidgetManager catalog (74 built-in components);\n    ToolJet appCanvasConstants (grid mechanics)\n---\n\n<!-- GENERATED FILE — do not edit by hand. Run `node scripts/generate-skill.mjs` to regenerate every host package. -->\n\n# ToolJet app builder\n\nBuild only what ToolJet's real components, connected datasources, and MCP tools support. Never invent a property, action, integration, or successful result. User requirements override the adaptable quality defaults in the references.\n\nUse the selected ToolJet connection's tools; ask if missing or ambiguous. This skill never configures credentials.\n\n## Existing app or website migrations\n\nFor migration/clone/replacement requests, first read `references/migration.md`. Discover expanded states, relationships and read-only journeys—not just screenshots. Map source coverage to ToolJet and report gaps. Skip this workflow for ordinary builds or visual-only inspiration.\n\n## Core workflow\n\n1. Call `list_workspaces`; if several exist, confirm and switch before creating anything. Decide the page architecture before components. A simple single-job app can stay on one page; separate substantial jobs into focused pages; add an overview only when cross-workflow orientation or decisions need it.\n2. Treat 3+ substantive pages, 2+ complex workflows, a multi-table model, or multiple integrations as a large build. Before mutations, show the page/phase plan and rough time ranges, then ask for phased checkpoints (recommended) or the whole app in one run. Do not re-ask if the user already chose.\n3. State the short design brief with the page plan before create_app (references/ui-layout.md): the user's job, dominant surface, relevant emphasis, and theme. Resolve the theme using `references/themes.md`: honor explicit design, selected themes, else derive from brand or use case (short prompts have one); ToolJet Modern only if asked. Pass the resolved `theme` to `create_app`, preserve its ids and links, then call `list_datasources`. Report any `theme.warning`. Fetch only the component, event-action, and datasource contracts needed for the current phase, using one selective batch per contract class, and reuse them. Request exact `sections` and `property_keys`/`style_keys`, not broad full contracts. Confirm a new data model before creating it; ToolJet DB table names are at most 31 characters.\n4. Implement that brief as a complete useful phase with stable `client_ref` values. Root components omit `parent` and `slot_name`; page ids are not component parents. Await `lint_app_spec` as a standalone barrier, fix its errors and review warnings, then pass its one-time `plan_token` to `apply_app_phase`. Never run the linter alongside a write. Put planned persisted component definition patches in `component_updates`; use targeted update tools for ad-hoc repairs, never duplicate resources or rebuild the app. After an error, inspect it and change the repair—never replay an identical mutation.\n5. Verify each completed page/primary flow using `references/qa.md`. For detailed requests, reconcile a compact requirement-to-implementation ledger at these checkpoints (`references/workflows.md`); page count is not feature coverage. Static validation does not prove runtime query behavior, rendering, or event delivery.\n6. Share `editor_url` while authoring. After the first meaningful page works, open `viewer_url` in the built-in browser when available and reuse that tab. The final handoff is at most 120 words: both links, what works, one line of limitations.\n\n## Design quality — required outcomes, flexible composition\n\nBuild a polished, contemporary 2026 product UI even from a short prompt: legible hierarchy, coherent theme surfaces, intentional density, clear actions and complete states. \"Modern\" is a quality bar, not a demand for gradients, glass, oversized cards or a fixed template. Do not claim production readiness from appearance.\n\n- **Resolve the design source:** explicit requirements/design system → existing or selected theme → recognizable brand → use case/industry/audience → ToolJet Modern. Preserve chosen themes, even on empty shells. For brand-led designs, map identity to visible component treatments—not just saved tokens (references/themes.md).\n- **Design the job, not a generic dashboard.** Identify the user's main decision and next action, then choose the dominant surface: agenda, review split-view, queue, map, board, analytics or form. Infer supporting views from the task and available data; a dashboard can need trends without the user naming charts. Do not invent metrics, records, capabilities or unrelated workflows.\n- **Freedom with purpose.** Derive headers, region proportions, typography, accents and density from the work; do not select a palette or composition merely because it appears in an example. ToolJet themes store the resulting design tokens, not a menu of allowed designs. Zero KPIs is valid. No fixed KPI count, root-component budget, mandatory overview, all-white-card rule or universal header position applies. Familiar patterns are welcome when justified; industry identity must affect information hierarchy, not just colour.\n- **HTML where it helps.** Use theme-aware Html for read-only summaries when helpful; headers and KPIs can be native. Keep controls, charts, tables and interactions native. Read references/ui-layout.md for background and escaping safeguards.\n- **Finish the workflow.** Format values for the user's locale, give states readable labels, and provide loading, empty, error and disabled states with useful recovery. Size content to fit; use intentional spacing and accessible contrast. Before handoff, check relevance, hierarchy, interaction and actual rendering—not merely whether lint passed.\n\n## Render safety\n\nDetail: `references/qa.md`.\n\n- Nested canvases have **43 local columns**, regardless of outer width. Container/Form/modal inset left/width:2/39; grid-mode Listview full-row left/width:0/43.\n\n- **One line per binding.** A line break anywhere inside `{{ }}` makes the whole binding render empty. Multi-line logic goes in a JavaScript query; never a literal backslash-n or code outside its braces.\n- **Modal and form children are parented to the modal or form**, never placed at root at its coordinates. `add_components` refuses overlaps.\n- **Navigation is the page menu** (`navigation_position`), never an `Html` sidebar with buttons on it.\n- **Items are authored, never defaulted**: `Tabs` (`tabItems`), `Steps` and `Kanban` without items render placeholders.\n- **Text fits its box**: size labels, values, captions and table columns for their rendered content; keep titles readable and let longer detail wrap within a deliberately sized region. Bind only fields the query returns.\n- **Toolbar buttons align with the field box**: a top-labelled input renders its label in its first 20px, so the row's button sits at the inputs' top + 20, height 40.\n- **Audit every page as rendered before the handoff** with `verify_page_render` (or the `references/qa.md` checks when it is unavailable) and fix everything it names; an unaudited page is not finished.\n\n## Datasource repair handoff\n\n**Sample data source is forbidden for AI**, even on request. Use ToolJet Database; synthetic rows are allowed.\n\nFor absent/failing sources, use `datasources_url`, `settings_url`, or `recovery.url`. Open it in the built-in browser when available; otherwise send the link. Never enter credentials, authorize OAuth, test, or save connections. For `connectable` sources, stop and hand off; if absent, report no connector and suggest REST API. See `references/datasources.md`.\n\n## Load only the references the phase needs\n\n- `references/workflows.md` — tool selection, plan/apply, repair, reuse, deletion, silent-failure guardrails, FX visibility.\n- `references/workflow-builder.md` — link workflows to apps, workflow discovery, authoring, validation, and execution safety.\n- `references/ui-layout.md` — page design, canvas geometry, nested layouts, charts, and visual defaults.\n- `references/tables.md` — Table binding, row actions, sizing, and datasource-neutral server-side pagination.\n- `references/forms.md` — generated-vs-standalone forms, validation, uploads, and modal geometry.\n- `references/events.md` — component/query/page events, mutation lifecycles, loading, empty, error, and success states.\n- `references/datasources.md` — connection recovery, exact query shapes, schema introspection, ToolJet DB, SQL, large reads, and billable reads.\n- `references/security.md` — authorization boundaries, current-user variables, permissions, and sensitive/destructive operations.\n- `references/qa.md` — static checks, safe runtime checks, the browser audit, triage, and confirmation.\n- `references/components.md` — selective component palette and exact binding/rendering rules not covered by Table/Form references.\n- `references/themes.md` — workspace theme creation and management, the exact theme definition structure, app assignment, and token-backed component styling.\n\nTool schemas and warnings are authoritative. Load references as needed. Keep inspection bounded with `get_app_summary` structure or exact fields; use `detail:\"full\"` only after narrowing. Reuse results.\n\n## Non-negotiable safety\n\n- Never author or execute `SELECT *` against an unfamiliar table. Count first when size is unknown; above 1,000 rows prefer server-side pagination. Large and billable reads require separate explicit approvals.\n- Never run mutations, AI, email, OAuth, or other side effects merely to validate. Version changes require explicit intent: create only when asked, pin the returned `version_id`, and release only that exact version with `confirm:true`.\n- Seed writes are insert-only; omit generated serial keys. A duplicate-key failure is never permission to update existing rows.\n- Page/query/component/table/column deletion requires exact-target approval plus `confirm:true`, except for resources this build created itself (a diagnostic query, a scratch page): delete those before finishing rather than renaming or hiding them. Visibility is not authorization.\n- Keep app chrome controls distinct: `hide_header` hides the app header/banner; `navigation_position` places the separate generated navigation menu on the side or top; `navigation_hidden` hides that whole menu in either position; and `update_pages.hidden` hides only one non-Home page. Home cannot be hidden.\n- Batch/phase writes can partially persist. Read reported completed resources and repair in place; never auto-delete or replay the whole batch blindly.\n"
}

SHA-256 of public snapshot: 20fd7f673bcdea58bab11f68bffe83862811736f960cf80db35d0e5fc9e93cf9