# @dazl/color-scheme (/docs/additional-resources/color-scheme) `@dazl/color-scheme` is a library for managing light/dark color schemes in web applications. It handles system preference detection, persistent storage, and CSS class application, with a React hook for integration into your components. ## Installation [#installation] ```bash npm install @dazl/color-scheme ``` ## Features [#features] * **Light/Dark/System modes:** supports explicit light or dark, or automatic OS-level detection * **System preference detection:** responds to changes in the OS theme in real time * **React integration:** `useColorScheme` hook for React components * **Persistent storage:** remembers user preference via `localStorage` * **CSS class management:** automatically applies theme classes to the document root * **Style injection:** injects the `color-scheme` CSS property on `` for native browser theming * **Zero dependencies:** no external runtime dependencies * **TypeScript support:** full type definitions included ## Client-side Setup [#client-side-setup] Import the client module to initialize color scheme management. This must run in client-side code, before the body is rendered. Place it in an inline script. ```typescript import "@dazl/color-scheme/client"; // The color scheme API is now available globally const currentScheme = window.colorSchemeApi.current; console.log(currentScheme); // { config: 'system', resolved: 'dark' } // Change the color scheme window.colorSchemeApi.config = "light"; // Subscribe to changes const unsubscribe = window.colorSchemeApi.subscribe(({ config, resolved }) => { console.log(`Color scheme changed: ${config} (resolved: ${resolved})`); }); ``` ### Color-scheme API (`window.colorSchemeApi`) [#color-scheme-api-windowcolorschemeapi] | Property / Method | Type | Description | | ----------------- | ------------------------------------------------------------------------ | -------------------------------------------------------------------------------- | | `config` | `'light' \| 'dark' \| 'system'` | Get or set the current color scheme configuration | | `currentState` | `{ config: 'light' \| 'dark' \| 'system', resolved: 'light' \| 'dark' }` | Current state including both config and resolved values | | `resolvedSystem` | `'light' \| 'dark'` | Resolved theme based on OS/system preferences | | `subscribe` | `(handler: (state) => void) => () => void` | Subscribe to color scheme changes; returns an unsubscribe function | | `getRootCssClass` | `(resolved?: 'light' \| 'dark') => string` | CSS class applied to the document root for the given (or current) resolved theme | ### Override root CSS class [#override-root-css-class] By default, `dark-theme` and `light-theme` are applied to the document root. Override them with `data-dark-class` and `data-light-class` attributes on the client script tag: ```html ``` ## React Integration [#react-integration] Use the `useColorScheme` hook to read and update the color scheme in React components: ```tsx import { useColorScheme } from "@dazl/color-scheme/react"; function ThemeToggle() { const { configScheme, resolvedScheme, setColorScheme, isLight, isDark } = useColorScheme(); return (

Current config: {configScheme}

Resolved theme: {resolvedScheme}

Is light theme: {isLight}

Is dark theme: {isDark}

); } ``` ### Hook API (`useColorScheme`) [#hook-api-usecolorscheme] | Property | Type | Description | | ---------------- | ------------------------------------------------- | ------------------------------------------------ | | `resolvedScheme` | `'light' \| 'dark'` | Resolved theme (never `'system'`) | | `configScheme` | `'light' \| 'dark' \| 'system'` | Current stored configuration | | `setColorScheme` | `(config: 'light' \| 'dark' \| 'system') => void` | Update the color scheme | | `isLight` | `boolean` | `true` when the resolved theme is light | | `isDark` | `boolean` | `true` when the resolved theme is dark | | `rootCssClass` | `string` | CSS class currently applied to the document root | ## CSS Styling [#css-styling] The library applies a class to `` based on the resolved theme. The default classes are `dark-theme` and `light-theme`: ```css :root.dark-theme { --bg-color: #000000; --text-color: #ffffff; } :root.light-theme { --bg-color: #ffffff; --text-color: #000000; } ``` *** ## Related Articles [#related-articles] * [Working with the Theme](/docs/building-with-dazl/design-and-refine/working-with-the-theme) – how Dazl manages theme tokens and design system colors in the editor * [Add-ons](/docs/feature-reference/addons) – pre-built recipes for installing libraries into your Dazl project # Release Notes (/docs/additional-resources/release-notes) ## May 31, 2026 [#may-31-2026] ### What's New [#whats-new] * **Interview before generating:** With **Plan** mode enabled on the **Dashboard**, generating a new project can now start with an interview, where the AI asks clarifying questions about what you're building before producing the plan. See [Plan](/docs/feature-reference/plan). * **Reasoning in AI responses:** AI requests now run with reasoning enabled, and the model's reasoning appears inline in the **Chat panel** as it works through a request. See [Chat](/docs/feature-reference/chat). * **Editor panels on mobile:** All editor panels are now available on mobile, so you can start a quick idea, draft a document, or review a project from your phone while you're on the go. See [The Editor Layout](/docs/feature-reference/the-editor-layout#on-mobile). * **New models in the Model selector:** Claude Opus 4.8 and Google's Gemini 3.5 Flash are now available in the chat **Model selector**. See [Chat](/docs/feature-reference/chat). ### Improvements [#improvements] * **Review starter AI Buttons before adding:** Selecting a built-in starter **AI Button** now opens the new-button dialog prefilled, so you can review and adjust it before saving. See [AI Buttons](/docs/feature-reference/ai-buttons). * **Right-click context menus in more panels:** Right-clicking now opens the context menu in the **Keys panel**, the **Add panel**, and the **Canvas panel** list, matching the rest of the editor. * **Expandable sidebar labels:** The **left sidebar** can now expand to show each tab's title next to its icon. Titles show by default, and Dazl remembers the setting. See [The Editor Layout](/docs/feature-reference/the-editor-layout). * **Fuzzy icon search:** Searching for icons now uses fuzzy matching and sorts results by relevance, so adding or replacing an icon surfaces better matches. See [Visual Editing](/docs/feature-reference/visual-editing). * **Agent Customization panel renamed to Skills & Rules:** The **Agent Customization panel** is now the **Skills & Rules panel**. See [Skills & Rules](/docs/feature-reference/skills-and-rules). * **Search limits for large projects:** The **Search panel** now caps file size, total results, and line length, so searching very large files or projects no longer hangs or floods the results list. See [Search](/docs/feature-reference/search). * **Pinned context clears on tab switch:** Context you attach to the **Chat panel** without pinning now clears when you switch tabs, instead of carrying over between the **Canvas panel** and the **Center area**. See [Chat](/docs/feature-reference/chat). ### Bug Fixes [#bug-fixes] * Fixed brief connection drops immediately showing "Connection lost" and forcing a refresh. Dazl now retries the connection first and only shows the disconnected state if it can't recover. * Fixed "Allow for session" not taking effect during app generation. Approving a tool for the rest of the session now works in the generation flow. * Fixed creating a file or folder inside a collapsed folder in the Files panel. The folder now expands automatically instead of the new-item input failing to appear. * Fixed being unable to clear an AI Button prompt completely while editing it. * Fixed a crash that could occur when large file attachments were restored after signing in. * Fixed nodes added to the Canvas panel (dropped, pasted, or centered in the viewport) appearing offset from where you placed them; they now center on the placement point. * Fixed comments on a Canvas panel node not linking back to that node. ## May 18, 2026 [#may-18-2026] ### What's New [#whats-new-1] * **Canvas:** A new workspace for planning, ideation, research, and asset generation. In the **Canvas panel** you place typed nodes (HTML, images, text files, doc templates), and the AI agent generates or refines their content. Connect nodes by dragging a reference between them, and attach a node to a chat to bring it in as project context. See [Canvas](/docs/feature-reference/canvas). * **Comments on the Preview:** Leave comments directly on the **Preview** to pin feedback to the part of the screen it refers to. See [Comments](/docs/feature-reference/comments). * **Comments on Canvas nodes:** Comment on individual nodes in the **Canvas panel** to discuss specific parts of a flow with your team. See [Canvas](/docs/feature-reference/canvas). * **Left sidebar stays accessible in Plan mode:** While **Plan mode** is generating, you can switch tabs in the left sidebar to enable integrations, upload files, or adjust settings. Panels that don't apply during generation are disabled. See [Plan](/docs/feature-reference/plan). * **AI Buttons in the Documents and Skills editors:** You can now create and use **AI Buttons** in the document and skill editors. Trigger them from the editor's context menu to run AI actions on the selected text without leaving the editor. See [AI Buttons](/docs/feature-reference/ai-buttons). * **Confluence integration:** Connect a **Confluence MCP integration** to bring Confluence pages into your project context. The Stripe entry has been removed from the integrations list. See [Integrations](/docs/feature-reference/integrations). ### Improvements [#improvements-1] * **File uploads in the Documents panel:** You can upload files directly from the **Documents panel** for use across documents and skills. See [Documents](/docs/feature-reference/documents). * **Selection becomes a chat context badge:** Text you have selected when invoking an **AI Button** from the document editor now appears as a pinnable badge in the **Chat panel**. See [AI Buttons](/docs/feature-reference/ai-buttons). * **Add Custom MCP button moved:** The **+ Add Custom MCP** button now sits in the standard location at the top of the **Integrations panel**. See [Integrations](/docs/feature-reference/integrations). * **Links in the document editor:** The **Documents editor** now supports markdown links. Paste a URL onto selected text or use the link control to insert one. See [Documents](/docs/feature-reference/documents). * **Preview matches published-app browser capabilities:** The **Preview** now grants the same browser permissions as a published project, so APIs like media capture, geolocation, clipboard, and hardware access work in preview the same way they would after publishing. Browsers still prompt for permission where they normally would. See [Visual Editing](/docs/building-with-dazl/design-and-refine/visual-editing). ### Bug Fixes [#bug-fixes-1] * Fixed an issue with attachments on the first prompt in the **Dashboard**. * Fixed the AI popup for inline reference-text editing being hidden behind other page elements. Edits now apply only to the selected reference, not every matching occurrence. * Fixed the "Current" label on chat messages when multiple chats are open — it now follows the most recent revision instead of marking every chat's last message. * Fixed ordered and unordered lists in chat markdown rendering broken; lists now use the browser's default styling. ## May 12, 2026 [#may-12-2026] ### What's New [#whats-new-2] * **Edit any previous chat message:** You can now edit any message you've sent earlier in a chat, not just the most recent one. The chat replays from the edited message, and the project is restored to the state it was in just before that message. See [Chat](/docs/feature-reference/chat). * **Edit reference text inline:** Reference text in the preview (such as `{title}` tokens) can now be edited directly. The change is sent to the AI as a prompt to rewrite the underlying code. See [Visual Editing](/docs/feature-reference/visual-editing). * **Radius tokens in the Theme panel:** The **Theme panel** now lists your project's global border-radius tokens and lets you edit them, alongside the existing color, typography, and shadow controls. See [Theme](/docs/feature-reference/theme). * **Add props from a list:** The **Props tab** now lets you add a prop by picking from the component's available props instead of typing the name. See [Inspect](/docs/feature-reference/inspect-panel). ### Improvements [#improvements-2] * **Clearer shell tool calls in chat:** Shell tool calls in the **Chat panel** now show a human-readable display name, and the confirmation dialog shows the exact command in a code block. * **Faster projects:** Projects now load and apply changes faster. ### Bug Fixes [#bug-fixes-2] * Fixed a rare issue where the Chat panel would stop updating until refreshed. * Shell tool output is now truncated at 20,000 characters to keep large outputs from exceeding the AI's input-token limit. * Fixed an editor crash that could happen when a CSS file was edited into a compilation error. * Fixed display issues in the Chat panel when a steering message was sent while the AI was actively streaming text or widgets. * Fixed steering messages being silently dropped when sent near the end of an AI response. * Fixed an issue where pages with errors couldn't be navigated to from the Pages dropdown. * Fixed Chat widgets in AI responses sometimes rendering as raw code instead of widgets. * Fixed an edge case causing users to be unexpectedly signed out. ## May 6, 2026 [#may-6-2026] ### What's New [#whats-new-3] * **Page variants:** Create new pages from the **Pages dropdown** using common templates, or create variants of an existing page. Give the variant a name, choose how large a redesign you want, and add optional instructions. Variants nest under their parent in the Pages dropdown, including for nested and dynamic routes. See [Pages and Routing](/docs/feature-reference/pages-and-routing). * **Variant gallery in chat:** When the AI generates multiple variations of a page, you can preview them side by side in the **Chat panel** before deciding which one to keep. See [Chat](/docs/feature-reference/chat). * **Shell access for the AI:** The AI can now run shell commands inside your project's dev environment when it needs to investigate or make changes that aren't covered by its other tools. Commands run inside the project's container, not against Dazl infrastructure. See [Chat-Driven Editing](/docs/building-with-dazl/design-and-refine/chat-driven-editing). * **Steer an AI request while it's running:** While the AI is working on a request, you can send another message to redirect or refine what it's doing. Your steering message appears in the **Chat panel** as a regular user message in the middle of the AI's response. Steering only applies to the chat where the request is active. See [Chat](/docs/feature-reference/chat). * **Shadow tokens in the Theme panel:** The **Theme panel** now lists your project's global shadow tokens and lets you edit them, alongside the existing color, typography, and spacing controls. See [Theme](/docs/feature-reference/theme). ### Improvements [#improvements-3] * **Rename and delete chats:** Rename a chat inline from the chat list, or delete one with a confirmation prompt. Deleting the active chat selects the most recently updated chat. The last remaining chat can't be deleted, and chats can't be renamed or deleted while the AI is processing. See [Chat](/docs/feature-reference/chat). * **More efficient AI requests:** The AI now loads its tools on demand instead of all at once. Common actions use less context, which typically means fewer credits per request. ### Bug Fixes [#bug-fixes-3] * Fixed project creation breaking when your access token had expired. The first attachment-upload request now recovers automatically instead of failing. * Fixed clicks on icons selecting inner SVG parts after the recent switch from Lucide to Tabler. Selection now stops at the icon itself; you can still drill into inner SVG parts from the **Elements panel**, and double-clicking opens the icons panel. ## April 28, 2026 [#april-28-2026] ### What's New [#whats-new-4] * **Share project templates:** Templates can now be shared with other users from the templates list. The list also shows avatars indicating each template's author. See [Templates](/docs/building-with-dazl/ideate-and-plan/templates). * **Model selection for app generation:** Choose between Claude Sonnet 4.6, Claude Opus 4.7, and Gemini 3.1 Pro when generating a new project from the **Dashboard**. See [Dashboard](/docs/feature-reference/dashboard). * **Agent Customization tab:** The **Documents panel** has been split into two tabs in the left sidebar — **Documents** for markdown documents and templates, and **Agent Customization** for prompts and skills. The create menu in each tab shows actions specific to that tab. See [Agent Customization](/docs/feature-reference/skills-and-rules). * **Jira integration:** Connect Jira to your project so the AI can read, reference, and update Jira content during conversations. See [Integrations](/docs/feature-reference/integrations). * **Prompt button widgets in chat:** The AI can now reply with action buttons inline in a chat conversation. Click a button to send its associated prompt back to the AI. See [Chat](/docs/feature-reference/chat). * **Tabler icons:** In addition to Lucide, projects can now use Tabler icons. Insert icons on the stage, drag them from the media manager, or replace one from the **Action Bar**. Dazl auto-detects which icon library the project uses. See [Visual Editing](/docs/feature-reference/visual-editing). * **Image preference in Plan mode:** In **Plan mode**, choose between AI-generated images and stock photos when generating a new project. With AI-generated, you can pick the image model. The default chat image-generation model is now Gemini 3.1 Flash Image (Nano Banana 2). See [Plan](/docs/feature-reference/plan). * **Background removal for image generation:** Generate images with transparent backgrounds. See [Media](/docs/feature-reference/media). * **`unindexedFolders` config option:** `dazl.config.json` now accepts an `unindexedFolders` array to omit specific folders from the agent's system prompt on very large projects. The agent can still access those folders on demand. ### Improvements [#improvements-4] * **AI buttons in the file tree:** Right-click a file or folder in the **Files panel** to run a saved or starter AI button on it. File-tree prompts can use the `{{fileName}}` and `{{filePath}}` placeholders, and the selected file or folder is attached to the chat request as context. Built-in starters include "Refactor File" and "Explain File for PM". See [AI Buttons](/docs/feature-reference/ai-buttons). * **More AI button entry points:** "New AI button" and "Show all AI buttons" now appear in the **Action Bar**, the on-stage context menu, and the **Files panel** context menu. Creating a new button opens a single shared dialog without switching the left panel. See [AI Buttons](/docs/feature-reference/ai-buttons). * **Notification dot for new MCP servers:** When new MCP servers or integrations become available, a small dot appears on the integrations icon. Opening the popover marks them as seen and clears the dot. ### Bug Fixes [#bug-fixes-4] * Fixed custom MCP server names that contained spaces breaking the final tool name. * Fixed the preview being clickable while loading in **Edit mode**. * Fixed table, header, and cell styling in chat so tables no longer render unstyled. * Made links inside chat messages more noticeable. * Fixed alignment in the templates list. ## April 20, 2026 [#april-20-2026] ### What's New [#whats-new-5] * **Miro integration:** Connect Miro boards to your project so the AI can read and reference board content during conversations. See [Integrations](/docs/feature-reference/integrations). * **Notion integration:** Connect Notion workspaces to your project so the AI can read and reference Notion pages during conversations. See [Integrations](/docs/feature-reference/integrations). * **Linear integration:** Connect Linear to your project so the AI can read and reference issues and project context during conversations. See [Integrations](/docs/feature-reference/integrations). * **Deep links in chat:** The AI can now reply with links that open directly in the editor — jump to a specific line in a code tab, open a document in the editor, or navigate to a page in the preview. * **Auto-allow tools for the session:** When the AI asks to run a tool, you can now approve it for the rest of the session instead of confirming every time. ### Improvements [#improvements-5] * **Specs renamed to Documents:** The **Specs panel** is now the **Documents panel**. * **Easier GitHub disconnect:** Removing a project's GitHub connection is now a click away in the **History panel**. See [GitHub](/docs/feature-reference/github). * **Show Image in media gallery:** The media gallery's item menu now includes a **Show Image** option. * **Components tree expands root by default:** The **Components tree** now expands the root item by default when requested. * **Skill name and description validation:** The skill editor now validates the name and description fields before saving. * **Clearer site-scraping errors:** Improved the error message shown when the site-scraping service fails. * **AI download error handling:** The chat now surfaces a clear error when an AI-generated file fails to download, instead of failing silently. ### Bug Fixes [#bug-fixes-5] * Fixed the active state of the ellipsis menu in the left sidebar. * Fixed a race condition in optimistic style updates on Firefox. * Fixed `?` opening the shortcuts panel while typing in the code editor on Chrome. * Failed file uploads no longer attempt to finalize, which previously left dangling upload state. * Fixed a rare edge case that would cause the editor to crash. ## April 16, 2026 [#april-16-2026] ### What's New [#whats-new-6] * **Claude Opus 4.7:** Anthropic's latest Opus model is now available in Dazl. Select it from the **Model selector** in the chat. ## April 15, 2026 [#april-15-2026] ### What's New [#whats-new-7] * **[Skills](/docs/feature-reference/skills) in the Specs panel:** View, create, edit, and delete skills directly from the [Specs panel](/docs/feature-reference/documents). You can also drag skills into the chat to include them as context. * **[AI Buttons](/docs/feature-reference/ai-buttons):** Create custom buttons that trigger AI actions on your project. Define a prompt, attach it to a button, and run it on demand from the editor. * **Google Sheets integration:** Connect Google Sheets to your project so the AI can read and reference spreadsheet data during conversations. See [Integrations](/docs/feature-reference/integrations). * **Google Docs integration:** Connect Google Docs to your project so the AI can read and reference document content during conversations. See [Integrations](/docs/feature-reference/integrations). * **Google Slides integration:** Connect Google Slides to your project so the AI can read and reference presentation content during conversations. See [Integrations](/docs/feature-reference/integrations). * **Pinnable left navigation:** Pin and unpin tabs in the left sidebar to control which ones appear in the icon rail. AI Buttons, Keys, Logs, and Search start unpinned by default. See [The Editor Layout](/docs/feature-reference/the-editor-layout). * **Elements tab in the [Add Panel](/docs/feature-reference/add-panel):** Browse available elements grouped by category, search by name, and drag them onto the stage. * **MCP server toggles in chat input:** Enable or disable MCP servers and integrations directly from the chat input area without opening the Integrations panel. See [Chat](/docs/feature-reference/chat). * **AI inspection tools:** The AI can now inspect elements in your project to gather visual and structural context before making changes. See [Chat-Driven Editing](/docs/building-with-dazl/design-and-refine/chat-driven-editing). * **Project screenshots:** The AI can now take screenshots of what it built to review and debug results. ### Improvements [#improvements-6] * **Expanded spec template capabilities:** Spec templates in the **Specs panel** now support groups, validation rules, and a frontmatter editor. New default spec templates are available for PRDs, technical designs, user flows, and agent instructions. * **Drag specs to chat:** Drag specs from the **Specs panel** directly into the chat to include them as context for your conversation. * **Image deletion protection:** Deleting an image that is referenced in your project files now shows a notification instead of removing the file. * **Token display name in color popover:** The color popover now shows the token's display name as its title, improving readability and fixing a layout overlap with the close button. * **CSS value floor for arrow keys:** CSS properties that don't support negative values (such as `padding`, `width`, and `font-size`) no longer go below 0 when you adjust them with arrow keys. * **AI context efficiency:** Integrations now use less of the AI's working context, leaving more room for your project details and conversation history. * **Scope selector highlights:** The scope selector now highlights the targeted element on the stage when you interact with the components tree. Tooltip text has been simplified. * **Gemini 3 Pro removed from model selector:** Gemini 3 Pro is no longer available in the **Model selector**. Use Gemini 3.1 Pro instead. * **Broken chat files relocated:** Chat files that fail to load are now moved to a dedicated folder instead of remaining in place and generating repeated error logs. ### Bug Fixes [#bug-fixes-6] * Fixed an issue where AI-generated class names starting with a digit caused stub generation to fail. * Fixed fallback model selection so the AI can recover when a model is temporarily unavailable. * Fixed CSS rules with attribute selectors being incorrectly auto-selected in the style inspector. * Fixed editor tabs incorrectly overflowing when a new tab is opened. ## April 6, 2026 [#april-6-2026] ### What's New [#whats-new-8] * **Files panel redesign:** The Files panel has a cleaner layout. Advanced developer files (such as configuration files) are hidden by default behind a toggle, and a new upload button at the root sends files directly to `/my-files`. * **Component selector:** The action bar now includes a component selector, replacing the previous scope selector, for picking components from the tree. ### Improvements [#improvements-7] * **Media gallery:** The media gallery dialog now includes search, upload, image generation, and chat-context attachment, matching the full set of capabilities available in the Media tab. * **Comment deletion:** Deleting a comment now shows a confirmation dialog before removing it. * **Margin and padding values:** Hovering over margin or padding handles in Edit mode now displays the original source value (e.g. `2rem` or `--space-5`) instead of the computed pixel value. * **Media dialog reset:** The media dialog resets its generation state when closed, so stale results no longer carry over to the next session. ### Bug Fixes [#bug-fixes-7] * Fixed the AI incorrectly claiming it cannot generate images when Discuss mode is off. It now knows which tools are available outside of Discuss mode. * Renaming a file or folder to a name that already exists in the same directory now shows an error notification instead of silently overwriting the existing file. * Fixed the preview getting stuck on an empty template during app generation when the dev server connects mid-update. * Fixed a layout issue in the Plan tab where the preview was incorrectly positioned. ## March 31, 2026 [#march-31-2026] ### What's New [#whats-new-9] * **Spec creation:** Click **+ New** in the [Specs panel](/docs/feature-reference/documents) to create a spec from built-in templates (PRD, System Prompt, Technical Design, User Flow) or your own custom templates. * **Edit comments and replies:** You can now edit your own comments and replies. Edit actions only appear on comments you authored. See [Comments](/docs/feature-reference/comments). * **Auto-attach active file to chat:** The [Chat panel](/docs/feature-reference/chat) automatically attaches the file from the active code or spec editor tab as context. * **Modifier keys for margin and padding:** Hold **Alt** while dragging a margin or padding handle to edit opposite sides together. Hold **Shift** to edit all sides at once. See [Visual Editing](/docs/feature-reference/visual-editing). ### Improvements [#improvements-8] * **Modifier key hints:** A tooltip showing available keyboard modifiers appears when you drag a margin or padding handle. * **Smarter margin handles:** Vertical margin handles no longer appear on inline elements, where top and bottom margins have no effect. * **Comment character limit:** The comment input shows a character count indicator. * **Chat panel resizer controls:** Controls on the left sidebar resizer let you expand the **Chat panel** to full height or collapse it. * **Team members on the Dashboard:** Project cards on the **Dashboard** now show team member avatars. * **Comments panel polish:** The comments panel has an additional close button, improved reply button alignment, and corrected pill text in dark mode. * **Add Panel auto-edit:** Dragging an element from the **Add Panel** automatically switches to **Edit mode** if you're in **Preview mode**. * **Plan editor tweaks:** The Regenerate Plan button has been removed. The home page URI field now shows validation instead of being disabled. New features and sections receive a counter suffix. Empty action menus on page cards are hidden. ### Bug Fixes [#bug-fixes-8] * Fixed modifier keys (Alt, Cmd, Shift) getting stuck after taking a macOS screenshot. * Fixed a misleading dynamic text notification that referenced the **Props tab**. It now reads "Ask AI to edit." * When signing in from the LinkedIn iOS in-app browser, a notice now guides you to open your default browser. ## March 25, 2026 [#march-25-2026] ### What's New [#whats-new-10] * **Comments:** You can now leave comments on any page in your project. Navigate to a page, add a comment, and collaborate with your team in a threaded panel. * **Improved first generation agent:** The agent that builds your first project now produces better designs and has access to web crawling and searching tools, giving it more context to work with. * **Add Panel:** A new sidebar panel that shows all media files in your project. Browse images, videos, and other assets, use the scopes selector to filter them, and attach media to chat conversations with a context toggle. * **Typing indicators:** When a collaborator is typing in the **Chat panel**, a typing indicator shows their name so you know a message is on the way. * **Drag-and-drop chat attachments:** Drag files and folders from the **Files panel** or media tab directly into the chat input to attach them to your message. * **Distance measurement:** Hold **Alt** and hover over an element to see pixel distances between it and the selected element. Distance lines with labels appear as an overlay on the canvas. ### Improvements [#improvements-9] * **Spec validation:** The plan editor now validates your project spec before building. Errors are highlighted by section, and the **Build** button is disabled until the spec is valid. * **Light and dark mode suggestion:** When your project supports only one color scheme, a callout suggests adding support for the other. The AI can add the missing theme for you. * **Fix with AI for invalid routes:** If a dynamic route in the **Pages dropdown** points to a 404 or returns an error, a **Fix with AI** button appears to resolve it. * **Plan tab:** The plan editor now opens in its own dedicated tab in the center area instead of appearing as a preview overlay. * **Duplicate name prevention:** Creating a file or folder with a name that already exists in the same directory shows a toast notification instead of silently overwriting. * **Expandable message queue titles:** Long titles in the message queue can be expanded to read the full text. * **Smoother style editing:** CSS transitions are temporarily disabled while you edit styles through the **Editing Toolbar** or drag handles, preventing visual jitter during adjustments. * **Components button visibility:** The **Components** button in the address bar is hidden when the project has no component gallery route defined. ### Bug Fixes [#bug-fixes-9] * Fixed an issue where app generation in default mode could use the wrong AI model, causing generation failures. * Fixed chat sections expanding unexpectedly when hovering on Safari. * Fixed scrollbars always appearing in the chat selector on Windows, and long chat titles wrapping incorrectly. * Fixed the code editor not jumping to a new location when the file is already open in a tab. * Fixed search results opening in the primary tab area instead of the secondary tab group. * Fixed cursor styles for resizer controls and added a visible border to the resize handle. ## March 17, 2026 [#march-17-2026] ### What's New [#whats-new-11] * **Real-time collaboration:** Invite team members to work on a project together or hand off work in progress. * **Project plans:** Start a new project with a plan that defines pages and features before development begins. * **Custom MCP integrations:** Connect external services or your own MCP servers from the **Integrations panel**. * **New add-ons:** Lexical, AG Grid, and Monaco Editor are now available as add-ons. * **Margin and padding handles:** Adjust margins and paddings directly on the canvas using handles that appear when you hover over the selection frame. * **Chat threads:** Create new Chat threads for a clean conversation or return to previous threads when you need existing context. ### Improvements [#improvements-10] * **Faster editor server startup:** The editor server now starts more quickly. * **Gemini 3.1 Flash (Nano Banana 2):** Added to the **Media panel** model options and now the default model for AI-generated images in Chat. * **Unpublish projects:** You can now unpublish a published project. * **Add-on suggestions in insertion points:** On-canvas insertion points now suggest add-ons alongside other elements. * **Preview mode as default:** The editor now opens in **Preview mode** by default. * **Faster initial project generation:** The AI generates new projects more quickly on the first run. * **Font family design tokens:** The **Theme panel** now supports editing font family design tokens. ### Bug Fixes [#bug-fixes-10] * Buttons in the top-right corner of the **Top bar** no longer get clipped when panels are open. * Resolved edge cases that prevented the code editor from loading. * File attachments in **Chat** messages now display their previews correctly. ## March 10, 2026 [#march-10-2026] ### What's New [#whats-new-12] * **Mobile-specific visual edits:** Visual edits made while in mobile Preview now apply through a CSS media query, so they only affect the mobile layout without changing the desktop view. ### Improvements [#improvements-11] * **Large text pastes as file attachments:** Pasting large text snippets (such as PRDs or code) into the Chat now automatically attaches them as files instead of inserting raw text into the prompt, keeping the conversation readable. * **Faster project generation:** The AI generates new projects faster. * **Chat file links open in split view:** Opening files referenced in Chat responses now opens the Code panel in a split view alongside the Preview. * **Color picker dismiss behavior:** Clicking outside the color picker now closes it. * **Edit / Preview toggle:** Clicking anywhere on the toggle now switches modes. ### Bug Fixes [#bug-fixes-11] * Stale build error messages in the Chat are now cleared once the issue is resolved. * File icons in the **Files panel** now display correctly in both light and dark modes. * Theme color changes now update more smoothly in the **Theme panel**. * The color picker now displays colors correctly according to the current light or dark mode. ## March 4, 2026 [#march-4-2026] ### What's New [#whats-new-13] * **Typography controls:** Edit and fine-tune your project's typography design tokens with new visual controllers in the Theme panel. * **AI image editing:** Ask the AI to edit any image in your project. Describe the changes you want in the Chat panel and watch it happen. ### Improvements [#improvements-12] * **Drag into sibling containers:** Drag elements on the stage into sibling containers within the same scope. * **Markdown tables in Specs:** The Specs editor now supports displaying and editing markdown tables. * **Keep changes on cancel:** Canceling an AI operation now preserves all file changes, so you can continue from where the AI left off or prompt differently. * **Smarter AI guidance:** The AI is now more knowledgeable about Dazl's capabilities and can guide you when asked. * **Preview address bar:** Improved responsive behavior in the Preview address bar. * **Consistent property reset:** Aligned reset behavior across the visual controllers in the Editing Toolbar. * **Improved insertion points:** Improved the experience of using insertion points on the stage. * **Updated model list:** Removed older models, keeping only the latest and most capable options. ### Bug Fixes [#bug-fixes-12] * Fixed an issue where the Chat input would hide text unexpectedly. * The code editor now resizes correctly when the window size changes. * Resolved an issue where the Specs editor could get out of sync after external changes to markdown files. * Resolved a rare edge case where Chat messages could get stuck temporarily. ## February 25, 2026 [#february-25-2026] ### What's New [#whats-new-14] * **Component page:** Browse and edit your project's entire design system in one place. * **Split-screen view:** See code and specs side by side with the Preview. * **Gemini 3.1 Pro:** A new model geared toward design and creativity. Select it from the Model selector to explore different design directions. * **dazl.dev redesign:** The Dazl website has a fresh new look. * **Help Center:** New documentation and an AI assistant for Dazl questions, available at [https://help.dazl.dev/](https://help.dazl.dev/). ### Improvements [#improvements-13] * **Visual editing:** Actions now handle a wider range of complex CSS designs. * **JSX expression context:** JSX expressions can be attached as context in the Chat panel, just like any other component or element. * **Preview address bar:** Shows a cleaner version of the current URL unless you focus it. * **Concurrent projects:** You can now run up to 3 projects at once. Opening a 4th prompts you to choose which one to close. * **Third-party component selection:** Improved how Dazl handles selecting elements inside third-party components. * **Preview overscroll:** Removed overscroll behavior from the Preview. ### Bug Fixes [#bug-fixes-13] * Fixed a rare case where chat messages failed to send after loading the Editor. * Improved messaging when disconnected from the server. ## February 18, 2026 [#february-18-2026] ### What's New [#whats-new-15] * **GitHub integration:** Connect your project to a repo and bring your whole team along. Real handoffs and access to the rest of your toolset. * **Claude Sonnet 4.6:** Anthropic's newest model has landed. It strikes a great balance between cost and performance — try it out in the Chat model picker. * **Google Fonts:** The Font Family input now suggests top fonts and lets you search the entire Google Fonts library. * **Quick insert buttons:** Insertion points now let you add any element — from simple divs to complex structures with Emmet — or ask the AI to build exactly what you need. * **Queue AI tasks:** You can now queue new tasks for the AI while it's still working on the current one. * **Shortcuts reference:** See all Dazl shortcuts in one place through the Project Menu or by pressing **Shift+?**. * **Completion sounds:** Enable a notification sound in User Settings to know when the AI has finished its task. ### Improvements [#improvements-14] * **Mode switching:** Improved the experience for toggling between Edit and Preview modes. * **Faster Theme panel:** Improved loading performance. * **Create Supabase projects:** You can now create a new Supabase project directly from Dazl after connecting your account. * **Auto-pin code editor:** Start typing in an unpinned code editor and it automatically pins itself. * **Focus filter:** The **Filter selected** toggle in the Elements panel narrows the tree to show only the current selection and its descendants. ### Bug Fixes [#bug-fixes-14] * Fixed an issue where the AI response animation in the Chat would reset when changing panels. * Fixed Feature Panels jittering on resize. * Removed a duplicate heading that appeared while dragging a component or element on the preview. * You can now enter a Supabase project ID manually if automatic retrieval fails. ## February 11, 2026 [#february-11-2026] ### What's New [#whats-new-16] * **Brand new UI:** We've completely redesigned the editor. Feature panels live on the left, inspection panels on the right, and a multi-tabbed stage front and center. It's cleaner, faster, and built for how product teams actually work. * **Clone any website:** Want to riff on an existing design or quickly prototype for an existing app? Just give the AI any website URL and use it as your starting point. * **Docs as context:** See a spec or system prompt you want the AI to follow? Attach any markdown file from the Specs panel to the Chat with a single click. * **Claude Opus 4.6:** Anthropic's smartest and most capable model is now ready to use in Dazl. ### Improvements [#improvements-15] * **Fresher typography:** The AI now pulls from a wider range of fonts when designing, so your projects look less templated and more unique * **Smarter file selection:** The AI is now better at figuring out which files actually matter for your request * **Search and filter:** The Simple Editing Bar inputs now support searching and quick filtering * **Layout controls:** The Sizes panel now includes positioning controllers for fast layout tweaks * **Quick duplicate:** Duplicate any selected element on stage instantly with Cmd/Ctrl+D * **Clear values:** Toggle buttons and the Simple Editing Bar now let you clear values with a click ### Bug Fixes [#bug-fixes-15] * The Specs editor no longer marks files as changed when nothing was actually modified * Formatting text and header blocks in the Specs editor now works as expected * Fixed a rare case where the AI would receive outdated files as context ## February 6, 2026 [#february-6-2026] ### What's New [#whats-new-17] * **Claude Opus 4.6:** Anthropic's newest and most capable model just dropped, and it's already available in Dazl. Try it out in the model selection menu. ## February 4, 2026 [#february-4-2026] ### What's New [#whats-new-18] * **Addons:** Connect external libraries and services to your project with a prompt and a click. Add AI capabilities, interactive maps, flow builders, beautiful galleries, and more. * **Custom domains:** You can now connect your own custom domains to any project * **History panel:** A new panel offering a single view of your entire project history with the ability to restore to any point in time * **Object editing:** The Property Panel now offers a visual controller to view and edit Objects passed to components ### Improvements [#improvements-16] * **Integration status:** Built-in integrations (Supabase, Figma) now show a warning badge if their connection has broken * **Figma re-auth:** You can now re-authorize your Figma integration with a click if it loses connection * **Download project moved:** The "Download Project" option has moved from the Dev Tools menu to the User Menu in the top left * **Simple Editing Bar:** Now part of the Preview Stage * **Faster image handling:** Improved the performance of saving and viewing generated images * **Draggable panels:** The Integrations and Theme panels are now draggable and can be moved around ### Bug Fixes [#bug-fixes-16] * Fixed an issue where pressing Up after selecting a node in the Elements panel would cause the selection to jump too many parents in the tree * Fixed an issue where the Stage would sometimes lose hashes at the end of URLs * Fixed warning notifications about disconnected integrations not being displayed * Fixed an edge case where the Icons panel would show an empty list when selected on an appropriate icon * The Media panel now properly updates when new assets are added to the project ## January 29, 2026 [#january-29-2026] ### What's New [#whats-new-19] * **Figma integration:** Authorize with a click, select a frame, copy the link, and ask Dazl to implement it for you. Get to interactive prototypes faster than ever and stay on brand. * **Markdown editor:** Dazl now locates and offers an editing panel for any markdown file in your project, including system prompts. Open the Dev Tools, create specs, and tweak the AI behavior to your liking. * **Array editing:** The Property Panel now includes a new visual controller to view and edit any arrays passed to the component ### Improvements [#improvements-17] * **Sticky selection:** Dazl's Stage now uses Sticky Selection for better, more exact selection control. Double-click to drill into nested elements, or use Cmd/Ctrl+click to select any element immediately. * **Link panel:** Improved behavior, bound URL UI, and corrected behavior when removing existing links * **Larger attachments:** You can now upload assets of up to 15MB to the Chat * **Better AI context:** Improved what selection context is provided to the AI * **Draggable panels:** All panels in the Simple Editing bar now include a handle to drag them anywhere on screen * **Analytics preference:** Choosing to share analytical data with us is now persisted for each user (it really helps us improve Dazl!) * **Auto-collapsing messages:** The latest Chat message now auto-collapses when new messages are added ### Bug Fixes [#bug-fixes-17] * Reloading a page no longer incorrectly redirects to the home page * Resolved an edge case where sending code examples to the AI could break the Chat * Canceling pending messages to the AI no longer causes manual edits to disappear * The Stage scroll behavior is now better synchronized even when manipulated programmatically * Duplicating a project now displays its home page screenshot without requiring a refresh * Dazl is now better aware of the current time and date * Removed unnecessary "unsaved" tag appearing in the Secrets panel ## January 20, 2026 [#january-20-2026] ### What's New [#whats-new-20] * **AI web search:** The AI can now search the web for the most up-to-date information, best practices, documentation, and more * **AI personality:** You can now set the AI chat personality to "Friendly", "Direct", or "Technical" in the User Settings panel * **Children property editing:** The property panel now shows element tags for the Children property, with the ability to reorder, duplicate, or delete them * **Image previews in chat:** Images generated through the chat now include a preview and can be viewed full screen with a click * **Console explainer:** You can now ask the AI to explain any message in the client or server consoles in the Dev Tools with a single click ### Improvements [#improvements-18] * **Multiple file attachments:** You can now attach multiple files to the Chat * **Better text editing:** Editing text on Stage with a double click is now smoother * **Consistent chat styling:** AI responses in the Chat now look more consistent * **Smoother toolbar loading:** The toolbar now loads more smoothly on project start ### Bug Fixes [#bug-fixes-18] * Resolved an edge case where the Secrets panel would maintain stale state data * The Publish panel is now disabled during AI operations ## January 13, 2026 [#january-13-2026] ### What's New [#whats-new-21] * **AI image generation:** The AI can now generate custom images on demand using Imagen 4. Additional models are still available via the Media Panel. * **Gemini 3.0 Flash:** Now available in the model selection menu, ideal for quick tweaks and small changes * **Auto-saved gradients:** Color gradients generated via the panel are now automatically saved to the project * **Quick icon swap:** Double-clicking on any Lucide icon on the Stage opens the Media Panel to let you change it ### Improvements [#improvements-19] * **Visual image editing:** Images in component properties can now be edited visually through the Simple Properties Panel * **Gradient panel state:** The gradient panel will no longer reset its state during generation ### Bug Fixes [#bug-fixes-19] * Resolved an edge case where the Stage would fail to connect to the editor environment * Dazl will no longer create an empty .env file when the panel is opened and no secrets are detected ## January 6, 2026 [#january-6-2026] ### What's New [#whats-new-22] * **Project screenshots:** The Dazl home page now shows screenshots for each project's home page * **Secrets management:** Manage your keys and secrets through a dedicated panel in the Dev Tools * **User settings:** A new User Settings panel has been added, starting with color scheme preference. This is saved to your account and syncs across sessions and devices. * **Direct edit mode:** The editor now loads directly into Edit mode, so you can start making changes right away without an extra click * **Advanced Properties panel:** The Dev Tools computed properties panel is now the Advanced Properties panel, capable of displaying and editing all properties connected to the current selection * **Visual color editing for component props:** Component properties used to determine colors can now be edited visually in the Simple Editing properties panel ### Improvements [#improvements-20] * **MCP status indicators:** MCP integrations now show an indicator for their current state, not just whether the integration was authorized * **Better ".env" file handling:** The structure and comments inside ENV files are now better preserved * **Cleaner hover behavior:** Removed stage highlights from appearing when the chat history was hovered * **Fullscreen preview:** Items inside the preview on stage can now go full screen with user consent * **Crash recovery:** Crashes to the development server are now better reported and can be automatically fixed by AI ### Bug Fixes [#bug-fixes-20] * Fixed an edge case where after navigating to a new page on screen, the scroll would misbehave * Attempting to rename a project to the same name as an existing project now displays a better error message * Some editing actions were mistakenly left open during server initialization. They are now blocked. * Fixed publishing projects with certain dependencies resulting in an error ## December 22, 2025 [#december-22-2025] ### What's New [#whats-new-23] * **Supabase integration:** The first built-in integration is here! Extend your project with Supabase for a database, user management, storage, and more. Supabase will ask for confirmation before performing any potentially dangerous actions. * **Model selection:** Choose your favorite model per task with a new dropdown menu offering models from Anthropic and Google, including Claude Opus 4.5 and Gemini 3.0 Pro * **AI-powered gradients:** Generate beautiful gradients using AI through the background color panel ### Improvements [#improvements-21] * **Image panel design:** Improved the design of the image panel when the image source is dynamic * **More concise AI:** The AI is now more to the point in its responses * **Color panel behavior:** Selecting a color after detaching the color panel from the Simple Editing bar no longer causes the panel to close * **Faster panel opening:** Panels in the Simple Editing bar now open faster ### Bug Fixes [#bug-fixes-21] * Fixed unintended cases where the stage would jump to a selection even in preview mode * Logs are now better preserved across refreshes ## December 15, 2025 [#december-15-2025] ### What's New [#whats-new-24] * **Project management:** You can now rename, duplicate, and delete any of your projects from the home page * **System theme support:** The theme panel now supports viewing light/dark mode according to your system preference * **Eyedropper color picker:** Pick any color visible on your screen directly from the color picker (Chrome only) * **Delete generated images:** You can now delete images in the image panel * **Expanded visual editing:** More cases where elements are defined outside of their components can now be visually edited ### Improvements [#improvements-22] * **Hex color support:** The color picker now also supports Hex color format * **More font variety:** The AI will now suggest more diverse font offerings in its designs * **Better spacing overlays:** Improved how margin/padding overlays are displayed on text nodes * **More attachment types:** You can now attach js, ts, css, and md files to the Chat * **Clearer bound expressions:** The property panel now displays better information about bound expressions ### Bug Fixes [#bug-fixes-22] * Fixed panel dragging from the Simple Editing bar on Safari * Fixed changes to the node\_modules directory sometimes not being picked up * Fixed a rare issue where the AI responded with broken output (you can now retry these requests) * Fixed a rare issue where panels in the Simple Editing bar would not open on first click ## December 8, 2025 [#december-8-2025] ### What's New [#whats-new-25] * **Preview mode highlights:** Selection highlights now appear on stage even in preview mode when referencing elements in the Chat or Dev Tools panels * **Download code:** You can now download your code from the Dev Tools panel menu (in addition to the Code tab) ### Improvements [#improvements-23] * **Theme manager:** Improved search, color visibility, and light/dark mode toggle behavior * **Image generation panel:** Improved button states, icons, spacing, and tooltips * **Smarter AI:** Improved knowledge of visual (manual) edits you've made to the code * **Smarter AI:** Will no longer wrongfully retry requests that previously failed or were cancelled, unless explicitly asked to * **Smoother updates:** When a new version of Dazl is deployed while you're using it ### Bug Fixes [#bug-fixes-23] * Fixed an issue where reconnect sync failures could leave the editor in a broken state requiring a refresh * Resolved an edge case where forced element states couldn't be cancelled * package-lock.json changes are no longer treated as manual edits ## December 1, 2025 [#december-1-2025] ### What's New [#whats-new-26] * **Image Generation gets a major upgrade** * **More creative control:** Generate with new AI models (including Nano Banana Pro!), choose aspect ratios, and apply style presets for better results * **Auto-save:** Generated images now save automatically and can be applied straight from the panel * **Double-click to edit:** Interact with images on the stage more intuitively * **Stage and editor enhancements** * **Visual spacing overlays:** See margin and padding overlays on stage when the relevant visual controllers are open * **Quick access to published projects:** View your published project directly from the Dazl home page * **Mobile publishing:** You can now publish your project even when in mobile mode ### Improvements [#improvements-24] * **Improved connection stability:** Complete rework of Dazl's connection mechanism, making it more stable than ever and eliminating client disconnections * **Smarter AI assistance** * **Better context awareness:** The AI now understands your selections more accurately * **Graceful error recovery:** If something goes wrong mid-task, the AI will try an alternative approach instead of stopping * **Devtools access during generation:** You can now inspect and view your project while the AI is working, instead of the UI being fully blocked * **Quality of life** * **Live config reload:** Changes to your environment settings now apply without a manual restart * **Billing portal always accessible, even on the free plan:** Manage your subscription anytime from your account * **Faster Style Panel suggestions** in the Dev Tools * **Better Theme Panel:** Now indicates if any colors under a specific palette are invalid and allows editing them. Changing colors is also significantly faster ### Bug Fixes [#bug-fixes-24] * Safari stage rendering errors * File attachments sometimes failing to include in the chat * AI referencing outdated element positions * Package-lock showing phantom diffs # Skills Library (/docs/additional-resources/skills-library) Skills give the AI in your project focused expertise for a specific task, loaded only when relevant. This page collects ready-made skills you can download and add to your own projects through the **Skills & Rules panel**. ## Adding a Skill to Your Project [#adding-a-skill-to-your-project] 1. Download a skill file from the sections below. 2. In the editor, open the **Skills & Rules panel** in the left sidebar. 3. Click the **Upload skill files** button in the **Skills** section header. 4. Select the downloaded file. The skill's name and description are read from the block at the top of the file. The AI loads the skill automatically when your request matches its description. To invoke it directly, click the skill's **Attach to Chat Context** button in the panel and then write your prompt. These skills are starting points. Edit the downloaded file (or the skill after uploading it) to match how your team works: adjust the questions it asks, the output structure, or the quality bar. ## Competitive Analysis [#competitive-analysis] Builds a sourced competitive brief for a product, company, or feature area. The skill starts by confirming who you're analyzing, what decision the analysis informs, and whether to compare competitors against your own product or map the market as a neutral landscape. It then verifies every claim through web research, weighs any materials you've uploaded to the project (win/loss notes, prior analyses, user interviews), and delivers a landscape table, per-competitor deep dives, a differentiation thesis, and recommendations with trade-offs. Use it when you're preparing positioning, prioritization calls, battle cards, or leadership and board materials. **Download:** competitive-analysis.md ## PRD Writing [#prd-writing] Turns a problem statement, user request, or rough feature idea into a structured PRD. The skill gathers missing context conversationally (the problem, the audience, success measures, constraints), then produces a document covering the opportunity, business and user goals, non-goals, prioritized user stories with acceptance criteria, UX considerations, and measurable success criteria. Use it when you're scoping a feature, aligning stakeholders on a new initiative, or breaking a big ask into a phased spec. **Download:** prd-writing.md ## Demo Script Generator [#demo-script-generator] Builds a complete demo script around a working prototype. The skill asks three questions in sequence: how long your demo slot is, who's in the room and what the goal is, and which flows you want to show. It then produces a timed script with a spoken agenda, talking points for each flow, an objection-handling table, a close with a concrete next step, and delivery tips. Use it when you're preparing a sales demo, a stakeholder review, or a user validation session for a prototype you built in Dazl. **Download:** demo-script-generator.md *** ## Related Articles [#related-articles] * [Skills & Rules](/docs/feature-reference/skills-and-rules) – full reference for the panel where prompts and skills live * [Chat-Driven Editing](/docs/building-with-dazl/design-and-refine/chat-driven-editing) – how the AI uses project context when you prompt it # Chat-Driven Editing (/docs/building-with-dazl/design-and-refine/chat-driven-editing) Some changes go beyond what visual editing can express, like adding features, restructuring layouts, or changing logic. That's where the **Chat panel** comes in: you describe what you want, the AI reads your project, and the result lands as real code edits.
![The Chat panel showing a conversation with the AI, including file edit cards and a prompt box at the bottom](/images/chat-panel.png)
## When to Use Chat vs. Visual Editing [#when-to-use-chat-vs-visual-editing] **Use visual editing** when you know exactly what the visual change should be — moving an element, changing a color, editing text, adjusting spacing. It's immediate and doesn't cost credits. **Use the chat** when the change involves reasoning — adding a new feature, restructuring components, fixing logic, connecting to a database, or when you need the AI to figure out *how* to implement something. ## Giving the AI Context [#giving-the-ai-context] The AI works better when it understands what you're referring to. Dazl provides context automatically in several ways: * **Element attachment** — When you select an element in **Edit mode**, it appears as a chip above the prompt box (e.g., `HomeHeroBlock.homeheroblock`) with a **Clear** button. This tells the AI exactly which component you're talking about. You don't need to describe "the big button in the hero section" — select it, and the AI knows. JSX expressions can also be attached as context, just like any other component or element. * **Code analysis** — Dazl's code analysis engine gives the AI an understanding of your project's structure, file organization, component hierarchy, naming conventions, and design system. The AI reads this context before making changes, which helps it produce code that fits your project. * **URL references** — Share a URL in the chat and ask the AI to recreate or riff on an existing website. The AI can visit the site and use it as a reference when generating or modifying your project. * **Figma design references** — Once you've connected the [Figma integration](/docs/feature-reference/integrations), you can paste a Figma frame URL into the chat. The AI reads the design from Figma and uses it as a reference — useful for translating existing designs into working code. * **Documents** — If you've written documents in the **Documents panel**, the AI uses them as guidelines when generating code. Well-written documents lead to better results because they give the AI a framework for decision-making. * **Skills** — [Skills](/docs/feature-reference/skills-and-rules#skills) focus the AI on a particular domain, such as brand voice or accessibility standards. They live in the **Skills & Rules panel** and can be attached to the chat or dragged into the prompt. * **File attachments** — Click the **attachment button** (paperclip icon) next to the prompt box to attach images, documents, data files, and more. You can also drag files and folders from the **Files panel** or the **Add Panel** directly into the chat input. Pasting large text (such as PRDs or code snippets) into the prompt also automatically attaches it as a file to keep the conversation readable. * **Active tab file** — When a code editor or document editor tab is active, the **Chat panel** automatically attaches that file as context. This keeps the AI focused on what you're currently working on without manual attachment. * **Project file context** — In the **Files panel**, you can attach project files to the conversation to point the AI at specific source code. * **Media context** — In the [Add Panel](/docs/feature-reference/add-panel), hover over any image and use **Attach to Chat Context** to give the AI a visual reference from your project. * **Inspection tools** — The AI can inspect your project on its own while working: reading browser console logs, server logs, computed CSS styles, and page HTML. It also has access to your project's public URL, which means it can take screenshots of what it built and visually verify the result. You don't need to provide this information manually — if the AI needs to debug a layout issue or understand why something looks wrong, it can check these details as part of its workflow. ## Discuss Mode [#discuss-mode] When you want to talk through ideas or ask questions about your project without the AI making changes, toggle the **Discuss** button next to the prompt box. In this mode, the AI responds conversationally — no code is generated, no files are changed. You can also ask the AI about Dazl's own capabilities and how to use specific features. Toggle it off to switch back to code generation. See [Chat](../../features/chat.md#discuss-mode) for details. ![The prompt box with Discuss mode enabled, showing the element attachment chip, model selector, and Discuss button](/images/chat-discuss-mode.png) ## Writing Effective Prompts [#writing-effective-prompts] A few patterns that work well: * **Be specific:** "Change the hero headline font to the Display scale and make the subtext use the Caption scale" is better than "make the text look better" * **Reference what you see:** "The pricing cards are too close together — add more horizontal spacing between them" * **Describe the outcome:** "Add a sentiment analysis badge below each post showing positive, negative, or neutral with a color indicator" * **Work incrementally:** Handle one change per message rather than combining many requests. This makes it easier to review and undo if something isn't right. * **Queue follow-ups:** You can send additional prompts while the AI is still responding. Queued prompts run in order automatically, so you don't have to wait for one response to finish before sending the next request. * **Steer mid-task:** If the AI starts drifting, you can [steer the active request](/docs/feature-reference/chat#steering) without canceling. Push a follow-up message into the current run and the AI adjusts course while continuing the task. * **Cancel and continue:** If you want to stop completely instead of correcting, cancel the operation. All file changes made so far are preserved, so you can continue from where the AI left off or prompt differently. * **Start a new thread:** Click the + button next to the thread name at the top of the Chat panel to start a fresh conversation. This is useful when you want to change direction without prior context influencing the AI. You can switch back to earlier threads any time. * **Collaborate in chat:** When [collaborators](/docs/feature-reference/collaboration) are working on the same project, typing indicators show who is composing a message so you can coordinate prompts.
![The Chat panel showing four queued tasks pending while the AI works on the current request](/images/chat-queue-tasks.png)
## Understanding AI Responses [#understanding-ai-responses] Each AI response in the chat can include: * **Formatted text** — explanation of what was done, with markdown formatting * **File edit cards** — expandable cards showing "Updated `filename.tsx`" or "Created `filename.ts`", with an "Open file" icon to open the file in a split view alongside the Preview * **Action cards** — "Read file: `filename.tsx`" showing what the AI inspected before making changes * **File count summary** — e.g., "5 files changed" with a "Show more" toggle * **Generated and edited images** — the AI can generate new images and edit existing ones in your project. Describe the changes you want and the AI applies them directly. Image generation in Chat uses Gemini 3.1 Flash by default. * **Tool usage** — if you've connected integrations like Supabase or Figma, the AI can use them directly — querying a database, reading a Figma design, or performing other actions on your behalf. You can toggle individual integrations on or off using the **MCP toggles** button in the prompt box. * **Shell commands** — when its other tools aren't enough, the AI can run shell commands in your project's dev environment to investigate or make changes. The AI asks for your approval before each run, showing the exact command in a code block, and the output appears inline in the response. * **Token cost** — the credit cost of the response, shown next to the model icon ### Feedback [#feedback] Each response has **thumbs up** (Helpful) and **thumbs down** (Not helpful) buttons. This feedback helps improve the AI over time. ### Restore and View Code [#restore-and-view-code] The response that represents the current state of your project shows a **"Current Version"** badge with a **"View Code"** button to see the code changes. Older responses show a **"Restore"** button — click it to roll back your project to that point in the conversation. ## Choosing a Model [#choosing-a-model] The **Model selector** below the prompt box lets you pick which AI model to use for each message. Different models have different strengths: some are faster and cheaper for routine changes, others handle complex reasoning better. You can switch models at any point in the conversation. See [Chat](/docs/feature-reference/chat) for a comparison of available models. ## Voice Input [#voice-input] The **voice input** button (microphone) next to the prompt box lets you dictate prompts using speech-to-text. Voice input is currently only available on Chromium-based browsers (Chrome, Edge, Arc, etc.). ## AI Buttons [#ai-buttons] For prompts you run repeatedly, [AI Buttons](/docs/feature-reference/ai-buttons) let you save them as reusable buttons that appear in the action bar or the right-click context menu. Define a prompt with template variables like `{{elementName}}` and `{{currentRoute}}`, and the button fills in the details automatically when you click it. Useful for workflows like generating handoff documents or running accessibility checks on selected elements.
![The AI Buttons panel showing custom and starter buttons](/images/ai-buttons-panel.png)
## Related Articles [#related-articles] * [Visual Editing](/docs/building-with-dazl/design-and-refine/visual-editing) – direct manipulation for visual changes * [Chat](/docs/feature-reference/chat) – model selector and available models * [AI Buttons](/docs/feature-reference/ai-buttons) – save reusable AI prompts as buttons * [Skills & Rules](/docs/feature-reference/skills-and-rules) – prompts and skills that shape AI behavior * [Writing Documents](/docs/building-with-dazl/ideate-and-plan/writing-documents) – guide the AI with specifications * [Understanding Changes](/docs/building-with-dazl/iterate-and-collaborate/understanding-changes) – review what the AI modified # Styling Element States (/docs/building-with-dazl/design-and-refine/styling-element-states) Buttons, links, and other interactive elements often look different when hovered, focused, or clicked. Static design tools force you to mock those states; in Dazl you can lock an element into a state and edit its styling there directly. ## Selecting a State [#selecting-a-state] 1. In **Edit mode**, select an element 2. In the **Action Bar**, find the **Element states** control 3. Check the state you want to style: **Hover**, **Active**, **Focus**, **Focus visible**, or **Focus within**. You can enable multiple states at once to preview combined interactions. ![The Action Bar showing the Element states control with Hover selected](/images/element-states-hover.png) The preview locks the element into that state, so you can see and edit how it looks. For example, checking Hover on a button shows it as if your cursor were over it. ## Editing a State [#editing-a-state] Once you've selected a state, use any of the toolbar controls to make changes: * Change the text color or background color on hover * Adjust borders or shadows for the focus state * Modify typography for the active state These changes are written as CSS pseudo-class rules (`:hover`, `:focus`, `:active`) in the source code, targeting that specific state. ## Previewing States [#previewing-states] After making your changes, uncheck all states in the state selector and then switch to **Preview mode** to interact with the element normally. Hover over the element to see your hover styles in action. Designing interactive states is one of the areas where Dazl's web-native approach matters most. Static design tools let you mock up a hover state, but you can't actually hover to see how it feels. In Dazl, you're designing the real interaction. ## Common State Styling Patterns [#common-state-styling-patterns] * **Buttons** — darken the background on hover, add a subtle shadow on focus * **Links** — change color or add an underline on hover * **Cards** — lift with a shadow on hover to suggest clickability * **Input fields** — highlight the border on focus to show which field is active ## Related Articles [#related-articles] * [Visual Editing](/docs/building-with-dazl/design-and-refine/visual-editing) – selecting and editing elements in Edit mode * [The Action Bar](/docs/building-with-dazl/design-and-refine/the-action-bar) – full reference for Action Bar controls * [Working with the Theme](/docs/building-with-dazl/design-and-refine/working-with-the-theme) – use theme colors for consistent state styling # The Action Bar (/docs/building-with-dazl/design-and-refine/the-action-bar) Whenever you select an element in **Edit mode**, the **Action Bar** appears below the top bar. It's the visual route to most styling decisions: every change saves straight to the source code and shows up in the preview right away. ![The Action Bar with a button element selected, showing the full row of controls](/images/action-bar.png) ## Knowing Where You Are [#knowing-where-you-are] The left side of the toolbar always shows a **file breadcrumb** and **component name** (e.g., `home.tsx` > `HomeHeroBlock`). This is useful context: it tells you which file your changes will affect, and gives you the exact component name to reference if you switch to the Chat panel. ## Adjusting Spacing and Layout [#adjusting-spacing-and-layout] When an element doesn't feel right spatially — too cramped, too far from a neighbor, or not aligned the way you want — start with **Margin** and **Padding**. The visual four-sided editor makes it clear which side you're adjusting, and you can link sides to edit them in pairs or all at once. You can also skip the toolbar panel entirely and drag the handles that appear on the selection frame when you hover over its edges — orange for margin, green for padding. The current value shows as a tooltip as you drag. ![The Margin panel with four directional input fields arranged around a center cross](/images/toolbar-margin.png) For structural changes, use the **Layout** panel. If you want a row of items, pick **Horizontal Stack**. For a column, **Vertical Stack**. The grid presets are helpful for card layouts. If you need finer control, switch to the **Custom** tab for full flexbox and grid properties. ![The Layout panel showing preset options: Box, Horizontal Stack, Vertical Stack, 2x2 Grid, 3x3 Grid, and None](/images/toolbar-layout.png) ## Working with Colors [#working-with-colors] The color pickers (for both **Text Color** and **Background**) offer three ways to pick a color: * **Theme** tab — your project's design tokens. This is the best default choice because it keeps your project consistent. If you later change a token in the Theme panel, every element using it updates automatically. * **Palette** tab — useful when you want to explore a broader range of colors without committing to a custom value. * **Custom** tab — for precise color control. The eyedropper tool is handy for sampling a color from somewhere else in your design. ![The Text Color picker showing the Theme tab with semantic design tokens organized by color group](/images/toolbar-text-color.png) For backgrounds, there's also a **Gradient** tab where you describe what you want in plain language ("warm sunrise", "mint to dark blue") and the AI generates it. ![The Gradient tab with a prompt field for describing the gradient and a Generate button](/images/toolbar-background-gradient.png) Prefer theme tokens over custom colors whenever possible. They keep your project visually coherent and make future theme changes painless. ## Styling Text [#styling-text] The **Typography** panel lets you adjust font family, size, weight, line height, alignment, and more. The dropdown at the top pulls from your theme's **font presets**, which is the easiest way to keep typography consistent. Use the individual controls below when you need to override a specific property. ![The Typography panel showing font family, size, weight, line height, and alignment controls](/images/toolbar-typography.png) ## Adding Polish [#adding-polish] The **Border**, **Corners**, and **Shadow** controls handle visual refinement. Corners use your theme's radius scale, so buttons and cards stay consistent. Shadows come as numbered presets — start with Shadow 1 for subtle depth and go higher for more dramatic effects. ## Handling Images and Icons [#handling-images-and-icons] **Media** activates when you select an image. You can replace it with another image from your project, upload a new one, paste a URL, or generate one with AI. Double-clicking an image in the preview opens this panel directly. ![The Media panel showing project images with Upload and Generate buttons](/images/toolbar-media.png) When you select an SVG icon, the **SVG Element** control appears instead, letting you browse the project's icon library for a replacement. Dazl auto-detects whether the project uses Lucide or Tabler and shows icons from that library. ## When to Use the Toolbar vs. the Chat [#when-to-use-the-toolbar-vs-the-chat] The toolbar is ideal for visual tweaks you can point to: adjusting a color, increasing padding, changing a font size, replacing an image. These changes are instant, precise, and don't consume credits. For anything structural — rearranging components on a page, adding new sections, changing how data flows, or refactoring multiple elements at once — the **Chat panel** is more effective. The AI can reason about your project's architecture in ways that go beyond individual CSS properties. A good workflow: use the toolbar for targeted refinements, and the chat for bigger changes. ## Related Articles [#related-articles] * [Visual Editing](/docs/building-with-dazl/design-and-refine/visual-editing) – selecting and manipulating elements in Edit mode * [Visual Editing](/docs/feature-reference/visual-editing) – full reference for every toolbar control * [Styling Element States](/docs/building-with-dazl/design-and-refine/styling-element-states) – editing hover, focus, and active states * [Working with the Theme](/docs/building-with-dazl/design-and-refine/working-with-the-theme) – customize colors and typography at the project level # Visual Editing (/docs/building-with-dazl/design-and-refine/visual-editing) **Edit mode** is the direct route to making visual changes. Point at an element on the live preview and adjust it, with no prompts or credits involved. ![Edit mode with an element selected showing blue outline, breadcrumb label, and resize handles](/images/edit-mode-selected.png) ## Entering Edit Mode [#entering-edit-mode] The editor opens in **Preview mode** by default. Switch to **Edit** using the toggle in the top bar to start selecting and modifying elements. Switch back to **Preview** to interact with the app normally (following links, clicking buttons). ![The Edit / Preview toggle in the top bar of the center area](/images/edit-preview-toggle.png) The **Preview** runs your project with the same browser permissions as a published version, so APIs like microphone, camera, geolocation, clipboard, screen sharing, and hardware access (USB, Bluetooth, MIDI) work in preview the way they would after publishing. Browsers still prompt for permission where they normally would. ## Selecting Elements [#selecting-elements] Click any element in the preview to select it. A selected element shows: * **Blue outline** around the selected element, with drag handles at corners and edges * **Green outline** around the parent component * **Breadcrumb label** in the top-left of the selection (e.g., "HomeHero...") showing the component name * **Arrow** to drill into the component's inner scope To select nested elements, **double-click** to drill into a component's inner scope. You can also hold **Cmd** (Mac) or **Ctrl** (Windows) and click to select any deeply nested element directly. Whatever you select is sent to the AI as context, so it knows exactly what you're referring to when you type in the **Chat panel**. ## Editing Text [#editing-text] Double-click any text element to edit it directly. Type your changes and click away to confirm. The change is immediately saved to the source code. ## Replacing Images [#replacing-images] Double-click any image to open the **Media** panel in the **Action Bar**, where you can replace it with a different image. Text and images can be bound to data expressions, where the same value appears in multiple places. If you edit one and notice other elements changing too, the content is shared. For complex data changes, use the **Chat panel** instead — the AI can update the underlying data without unintended side effects. ## Dragging and Repositioning [#dragging-and-repositioning] Click and drag a selected element to move it. When you release, Dazl updates the layout in the source code. You can reorder items within a container, drag elements into sibling containers within the same scope, or reposition components on the page. You can also drag images, icons, and HTML elements from the [Add Panel](/docs/feature-reference/add-panel) directly onto the preview to place them into a component scope. The Add Panel's **Elements** tab lists standard HTML elements (headings, paragraphs, images, links, and more) organized by category. ## Measuring Distances [#measuring-distances] Select an element, then hold **Alt** and hover over another element to see pixel distances between them. Distance lines with labels appear as an overlay, showing the exact spacing in each direction. This is useful for checking alignment and spacing consistency without opening the Inspect panel. ![The distance measurement overlay showing pixel distances between a selected element and a hovered element](/images/distance-measurement.png) ## The Action Bar [#the-action-bar] When an element is selected in Edit mode, the **Action Bar** appears below the top bar. Each icon opens a panel for a different aspect of the element's appearance: * **Size and position** — set width, height, min/max constraints, and CSS positioning * **Layout** — choose between box, horizontal/vertical stacks, or grid presets * **Margin and padding** — adjust outer and inner spacing with a visual four-sided editor, or drag the handles that appear on the selection frame edges (orange for margin, green for padding). Handles show the original source value (e.g., `2rem` or `--space-5`) as you drag. Hold **Alt** to edit opposite sides together, or **Shift** for all sides at once. * **Typography** — pick from theme font presets, adjust size, weight, alignment, and more * **Text color and background** — choose from theme tokens, the full palette, a custom picker, or AI-generated gradients * **Border, corners, shadow** — style edges, set border-radius from the theme scale, and add shadow depth * **Link** — connect elements to pages, URLs, emails, or phone numbers * **Media** — replace images, upload new ones, or generate them with AI * **Properties** — edit React component props directly The toolbar handles the visual properties you can see. For deeper changes — component logic, data flow, or structural refactoring — use the **Chat panel** to ask the AI. See [Visual Editing](/docs/feature-reference/visual-editing) in the Feature Reference for a detailed breakdown of every control. ## What Happens Under the Hood [#what-happens-under-the-hood] Every visual change you make is immediately written to the source code. Dazl's code analysis engine knows which file and which CSS rules are responsible for each element, so it makes precise, targeted edits — not broad rewrites. When you edit in a mobile viewport (using the **Responsive buttons** in the top bar), your changes are scoped to that breakpoint through a CSS media query. This means mobile edits only affect the mobile layout and leave the desktop view unchanged. You can see this in the **Chat panel**, where visual edits appear as manual edit entries showing exactly what was modified. Visual editing doesn't consume credits. Use it for any change where you know what you want — adjusting colors, tweaking spacing, repositioning elements. Save AI interactions for changes that require reasoning about structure or logic. ## Related Articles [#related-articles] * [The Action Bar](/docs/building-with-dazl/design-and-refine/the-action-bar) – guide to using the Action Bar effectively * [Visual Editing](/docs/feature-reference/visual-editing) – full reference for every Action Bar control * [Styling Element States](/docs/building-with-dazl/design-and-refine/styling-element-states) – edit hover, focus, and active states * [Chat-Driven Editing](/docs/building-with-dazl/design-and-refine/chat-driven-editing) – when to use the AI instead of visual editing * [Inspecting Your Project](/docs/building-with-dazl/iterate-and-collaborate/inspecting-your-project) – see the CSS behind your visual edits # Working with the Theme (/docs/building-with-dazl/design-and-refine/working-with-the-theme) Every Dazl project ships with a built-in design system: semantic tokens for color, typography, and shadow. The AI tunes the theme to whatever you're building, so two projects might look very different, but the same controls apply to both. The **Theme panel** lets you view and modify these tokens, changing your project's look across every component at once. ## How Tokens Work [#how-tokens-work] Design tokens are named values that your project's components reference instead of hardcoded colors or sizes. When you change a token in the Theme panel, every component that uses it updates automatically. This means you can change your brand color once and see it across every button and link, switch between dark and light mode with consistent color relationships, and maintain visual consistency without updating individual components. ![The Theme panel showing the Color tab with semantic color groups: Neutral, Accent, Error, Success, Warm, and Warning](/images/theme-colors.png) ## Color [#color] The **Color** tab organizes colors into semantic groups. A project might include groups like: * **Neutral** – backgrounds, text, borders * **Accent** – brand color, interactive elements, highlights * **Error** – error states, destructive actions * **Success** – confirmation, positive states * **Warm** – warm accent tones * **Warning** – caution states Your project may have fewer groups, more groups, or different names. ### Color Scales [#color-scales] Click any color group to expand it and see 12 graded colors plus a Contrast swatch (a white or black that pairs well with the group's colors). Each step maps to a CSS custom property named after the base color. For example, an accent group based on blue uses `--blue-1` through `--blue-12` plus `--blue-contrast`. ![The Accent color group expanded showing the 12-step scale](/images/theme-accent-expanded.png) Lighter steps (1–4) are typically used for backgrounds, mid steps (5–8) for borders and secondary elements, and darker steps (9–12) for text and primary elements. The Contrast swatch is designed to look good against color 9, which is the highest chroma color in the palette, useful for text on buttons and other high-contrast surfaces. ### Changing Brand Colors [#changing-brand-colors] To change a color group (for example, shifting your brand accent from blue to lime), click the controls icon next to the group name. A popup appears with a grid of base colors to choose from. Pick one and Dazl regenerates the entire 12-step scale automatically, keeping the relationships between shades consistent. ![The base color picker popup showing a grid of available colors with the current color checked](/images/theme-change-accent.png) Change the accent color once and see it reflected everywhere: buttons, links, highlights, and interactive elements across the entire project. It's a quick way to explore brand directions. Press **Cmd+Z** (Mac) or **Ctrl+Z** (Windows) to undo a theme change if you don't like the result. ### Light and Dark Mode [#light-and-dark-mode] At the top of the Color tab, use the **System / Light / Dark** toggle to preview your colors in different modes. This only changes the preview. The color tokens adapt so you can see how your design looks in each mode. To switch the entire editor to light or dark mode, use the project menu at the top left.
![The Theme panel showing the light and dark mode suggestion callout with Dismiss and Ask AI buttons](/images/theme-light-dark-suggestion.png)
If your project only supports one color scheme, a callout appears suggesting you add the other. Click **Ask AI** and the AI adds the missing theme for you, creating a consistent set of tokens for both light and dark modes. ## Typography [#typography] The **Typography** tab shows your project's type scales: * **Display** – large, prominent text (hero headlines) * **Heading** – section headings * **Subheading** – secondary headings * **Body** – paragraph text * **Caption** – small labels and metadata * **Code** – monospace text for code snippets Each scale shows a live preview of the font at its configured size and weight. Click any scale to expand it and edit its properties with visual controllers: * **Font Family** – the CSS font-family value * **Font Size** – size using the project's fluid type scale * **Font Weight** – boldness (e.g., 400, 700, 800) * **Line Height** – spacing between lines * **Italicize** – toggle between normal and italic Changes apply everywhere that scale is used, so adjusting the Display scale updates every hero headline across the project. ![The Theme panel Typography tab with the Display scale expanded, showing visual controllers for font family, size, weight, line height, and italicize](/images/theme-typography-controls.png) ## Related Articles [#related-articles] * [Component Page](/docs/feature-reference/component-page) – browse and edit your project's entire design system in one place * [The Action Bar](/docs/building-with-dazl/design-and-refine/the-action-bar) – use theme tokens when editing individual elements * [Styling Element States](/docs/building-with-dazl/design-and-refine/styling-element-states) – apply theme colors to hover and focus states * [Theme](/docs/feature-reference/theme) – full reference for the Theme panel # Handing Off to Developers (/docs/building-with-dazl/handoff-and-validation/handing-off-to-developers) Once your interactive prototype captures the right experience, the next step is getting it into engineering's hands. The right approach depends on how the team works and how much of the prototype they want to carry forward as production code. If you're still iterating together, you can also [invite collaborators](/docs/feature-reference/collaboration) to work on the project in real time before handing off. ## Handoff Options [#handoff-options] ### Share a Published URL [#share-a-published-url] Publish the project and share the live URL. Developers can interact with the prototype to understand the intended behavior — click through flows, inspect states, test on different devices. This is especially useful for communicating interactions and animations that are hard to describe in a static document. ### Share a Document or Prompt [#share-a-document-or-prompt] Export your project's documents from the **Documents panel** and share them as a prompt or brief that a developer can feed into their own AI coding tool. The combination of a clear spec plus a working interactive prototype gives engineering a strong foundation to implement from. This approach works well when: * The engineering team uses a different tech stack than the prototype * The developer prefers to implement from scratch using their own tools * The prototype is meant to communicate behavior and design intent, not be the production codebase ### Push to GitHub [#push-to-github] Click the **GitHub** icon in the top bar to connect your project to a GitHub repository. Once connected, you can push commits and pull changes without leaving the editor. This is the most seamless handoff option — your engineering team works from the same repo and can pick up exactly where you left off. ### Download the Project [#download-the-project] From the **Project menu** (click the project name in the top-left corner), select **Download Project** to get a copy of the source code. Share the downloaded files with your team through whatever channel works — email, Slack, a shared drive. ## What Makes a Good Handoff [#what-makes-a-good-handoff] A Dazl prototype is more than a static mockup. When you hand off, the developer gets: * **Working interactions** — they can click through the prototype to see exactly how flows should behave * **Real code** — the code is readable, structured, and uses standard web technologies (React, CSS) * **Design system** — the theme tokens, color scales, and typography scales are defined and consistent * **Documents** — the markdown documents in your project capture the reasoning and requirements behind the decisions You don't need a 20-page spec when you have a working interactive prototype. A focused spec that explains the *why* behind key decisions, paired with a prototype that demonstrates the *what*, communicates more effectively than a document alone. ## Related Articles [#related-articles] * [Publishing and Sharing](/docs/building-with-dazl/handoff-and-validation/publishing-and-sharing) – share a live URL for review * [Writing Documents](/docs/building-with-dazl/ideate-and-plan/writing-documents) – create documents that support handoff # Publishing and Sharing (/docs/building-with-dazl/handoff-and-validation/publishing-and-sharing) When a prototype is ready for stakeholder feedback or a quick test, you can either share the preview link directly or publish a snapshot to a stable URL. The two routes serve different purposes. If you need your team working on the project directly, [invite them as collaborators](/docs/feature-reference/collaboration) instead. ## Sharing the Preview [#sharing-the-preview] Every active project has a **preview URL** that works as long as the project's server is running. You don't need to publish to share — the preview URL is accessible from any device and any browser. To share the preview: 1. Copy the URL shown in the **URL bar** at the top of the center area 2. Send it to the people you want to see the project This is useful for quick feedback loops — share the link in a message, and your team can interact with the prototype on their own device, including mobile. The preview URL is available as long as the project's server is active. It doesn't require the publishing step. ## Publishing [#publishing] For a more permanent URL, use the **Publish** feature: 1. Click **Publish** in the top-right corner of the top bar 2. In the Publish dialog, click **Publish** ![The Publish dialog showing the Publish button](/images/publish-dialog.png) Once published, your project gets a dedicated live URL that persists independently of your editing session. You can share this URL for: * **Stakeholder demos** — present a high-fidelity, functional interactive prototype * **User testing** — let real users interact with the experience on any device * **Team review** — give everyone a single link to the current state of the project To unpublish your project, open the Publish dialog and select **Unpublish** from the three-dot menu next to the URL. ## Custom Domains [#custom-domains] You can connect a custom domain to your published project for a more polished presentation URL. This is useful when presenting to external stakeholders or running validation tests where the URL itself matters. See [Publishing](/docs/feature-reference/publishing) for setup details. ## What Gets Published [#what-gets-published] Publishing serves the same real application that you see in the editor — the same code, the same server, the same behavior. It's not a simplified or stripped-down version. Dev routes are excluded from the published version. Pages you've created as development-only tools (admin panels, data management interfaces) don't appear in the published project. See [Pages and Routing](/docs/feature-reference/pages-and-routing) for more on dev routes. ## Related Articles [#related-articles] * [Publishing](/docs/feature-reference/publishing) – the Publish dialog, custom domains, and what gets published * [Handing Off to Developers](/docs/building-with-dazl/handoff-and-validation/handing-off-to-developers) – go beyond sharing to production handoff * [Pages and Routing](/docs/feature-reference/pages-and-routing) – dev routes and dynamic pages # Starting a Project (/docs/building-with-dazl/ideate-and-plan/starting-a-project) ![The Dashboard prompt box with the attachment and enhance prompt buttons](/images/dashboard-prompt-box.png) ## From a Text Prompt [#from-a-text-prompt] The most common starting point. Type a description of what you want to build in the prompt box on the **Dashboard** and send it. A good prompt includes: * **What it is** — "A landing page for a drone pet delivery service" * **Key sections or features** — "with a hero, features grid, pricing, and sign-up form" * **Any design direction** — "modern, clean, with a playful tone" The AI generates a complete project with pages, components, and styling. During generation, the agent can crawl websites and search the web for reference material, helping it produce designs that better match your description. You can always refine from there. Working in smaller, incremental steps tends to get better results than putting everything into a single large prompt. Start with the basics, then iterate. ## From a Plan [#from-a-plan] Enable the **Plan** toggle in the prompt box before sending your prompt. Instead of generating code immediately, Dazl creates an editable project plan with: * **Pages** — each with a description, URL, and a list of sections you can reorder, add, or remove * **Features** — cards describing the key capabilities, with descriptions you can edit * **Theme guidelines** — design direction for the AI to follow ![The project plan view showing the project title, an interview summary, and pages with their sections](/images/project-plan.png) You can edit every part of the plan directly — rename sections, rewrite descriptions, remove features, or add new ones. Use the Chat to ask the AI for plan changes, or edit it yourself. The plan is validated before you can build — errors are highlighted by section, and the **Build** button stays disabled until they're resolved. When you're satisfied, click **Build** to generate the project. Click **Regenerate plan** to start over with a fresh plan from the same prompt. See [Plan](/docs/feature-reference/plan) for the full reference. ## From a Screenshot or File [#from-a-screenshot-or-file] Click the **attachment button** (paperclip icon) in the prompt box to attach files as context. You can attach: * **Screenshots** — of an existing UI to recreate or riff on * **Images** — design mockups, logos, or other visual assets * **Documents** — PRDs, briefs, or reference material * **Data files** — CSVs, JSON, or other structured data Add a prompt describing what you want: > "Here's a screenshot of our current dashboard. Recreate it and add a dark mode toggle" or "Build a project tracker based on this spreadsheet" This is useful when you want to experiment with changes to an existing product without affecting the real thing. ## From a Specification [#from-a-specification] If you have a detailed specification — a PRD, a feature description, or technical requirements — you can paste it directly into the prompt or add it to the **Documents panel** after creating the project. Well-written specs give the AI a clearer understanding of what you're trying to build. See [Writing Documents](/docs/building-with-dazl/ideate-and-plan/writing-documents) for how to get the most out of spec-driven development. ## Exploring on the Canvas [#exploring-on-the-canvas] Open the **Canvas panel** from the left sidebar to lay out research, design variants, and assets alongside the project itself. Add image, document, HTML, and text-file nodes; the AI agent can populate any of them, and you can reference one node from another with `#node-name` so the work builds on itself. See [Canvas](/docs/feature-reference/canvas) for the full reference. ## Using Discuss Mode [#using-discuss-mode] The **Discuss** button in the **Chat panel** toggles discuss mode. When active, the AI responds conversationally without modifying your project's code. This is useful for: * **Brainstorming** — think through ideas, explore directions, or plan features together with the AI before committing to changes * **Understanding your project** — ask the AI why something behaves a certain way, how a component works, or what a piece of code does * **Experimenting** — test ideas and get the AI's perspective without generating code changes Toggle it off when you're ready for the AI to start making changes again. ## Choosing Your AI Model [#choosing-your-ai-model] The **Model selector** in the Dashboard prompt box lets you pick the model that generates the initial project. Three top-tier models are available there: Claude 4.6 Sonnet (default), Claude 4.8 Opus, and Gemini 3.1 Pro. After the project is created, the **Chat panel** exposes a wider set of models for ongoing work. See [Chat](/docs/feature-reference/chat) for a comparison of available models. ## Related Articles [#related-articles] * [Writing Documents](/docs/building-with-dazl/ideate-and-plan/writing-documents) – guide the AI with structured specifications * [Templates](/docs/building-with-dazl/ideate-and-plan/templates) – save and reuse project starting points * [Chat](/docs/feature-reference/chat) – model selector and available models * [Your First Project](/docs/getting-started/your-first-project) – step-by-step walkthrough for beginners # Templates (/docs/building-with-dazl/ideate-and-plan/templates) If a project's structure or theme is something you'll want again, like a base for experiments or a starter for client work, save it as a template instead of rebuilding it each time. ## Why Templates Matter [#why-templates-matter] If you've built a project to a point where it's a solid base — the layout is right, the design system is set, the core structure works — you can save it as a template. Then every new experiment, feature exploration, or design variation gets its own project, branching off from that common starting point. This is especially useful when: * You're a PM testing multiple feature directions on the same product * You want to explore different designs without losing the original * Your team needs a shared base that everyone starts from * You're running workshops or design challenges with a consistent starting point ## Saving a Template [#saving-a-template] 1. Open the project you want to save as a template 2. Click the **project name** in the top-left corner to open the **Project menu** 3. Select **Save as Template** ![The Project menu showing Save as Template, Download Project, Appearance, Settings, Keyboard Shortcuts, and Contact Us](/images/project-menu.png) In the modal, you can configure: ![The Save As Template modal with name, description, preserve options, and a share template section](/images/save-as-template-modal.png) * **Name** — pre-filled with the project name, but you can change it * **Description** — an optional summary that appears alongside the template on the Dashboard * **Preserve Secrets** — include the values stored in the **Keys panel** (API keys, tokens, etc.) * **Preserve Chat History** — include the conversation history from the **Chat panel** * **Share template** — invite teammates by email so they can use the template Click **Save** and the template appears on your Dashboard. ## Sharing a Template [#sharing-a-template] You can share a template either while saving it or any time after. To share an existing template, open its dropdown menu on the Dashboard and select **Share template**. Add teammates by email in the dialog, and remove anyone you previously added. ![The Share template dialog with an email input and a list of users who already have access](/images/share-template-dialog.png) Shared templates show small avatars on the template card to indicate who has access. ## Using a Template [#using-a-template] Templates appear on your **Dashboard**. Click a template to create a new project based on it — Dazl copies the entire project (code, documents, theme, everything) into a fresh instance that you can modify independently. ![The Dashboard showing the Create From Your Template section with saved templates and avatars on shared templates](/images/dashboard-templates.png) The original template stays unchanged, so you can create as many projects from it as you need. Think of templates as snapshots. Build your project to a good baseline, save it as a template, then branch off for each experiment. If an experiment doesn't work out, start fresh from the template. ## Related Articles [#related-articles] * [Starting a Project](/docs/building-with-dazl/ideate-and-plan/starting-a-project) – all the ways to begin a new project * [The Dashboard](/docs/getting-started/the-dashboard) – where templates and projects live # Writing Documents (/docs/building-with-dazl/ideate-and-plan/writing-documents) Documents are where product work lives alongside the code: PRDs, user stories, technical designs, research notes, brand voice guides. They keep your team aligned and give the AI the context it needs when making changes.
![The Documents panel showing My Documents with a README and feature spec files](/images/documents-panel.png)
### Documents [#documents] Any markdown files you create to describe what you're building appear in the **Documents panel**: feature specs, design direction, technical constraints, or a project README. This makes it a convenient place to write and edit requirements, PRDs, acceptance criteria, or any context that helps the AI understand what you're building. ### Content Files [#content-files] Markdown files that are part of the project itself (like individual blog posts, help articles, or landing page copy) also show up here. You can write and edit them directly in the Documents panel alongside your other documents. ### Prompts and Skills [#prompts-and-skills] System prompts and skills — files that shape how the AI behaves rather than describing what you're building — live in a separate **Skills & Rules panel** next to the Documents panel. See [Skills & Rules](/docs/feature-reference/skills-and-rules) for the reference. You can attach any file from the Documents panel as context for the chat by clicking **Attach to Chat Context** on the file, or by dragging it directly into the chat input. ## Creating a Document [#creating-a-document] Click **+ New** at the top of the **Documents panel** to create a document. You can start from a blank file or choose a built-in template: PRD, User Flow, Technical Design, or Agent Instruction. Each template provides a structured starting point so you don't have to write from scratch. ![The document creation menu showing built-in templates and custom template option](/images/documents-creation-menu.png) A name dialog appears so you can name the file before it opens. You can also enable custom templates to create your own reusable starting points alongside the built-in options. Templates can belong to groups that define shared defaults (icon, filename, folder, file extension), which helps teams standardize their document types. To turn an existing document into a template, use the context menu on the file in the Documents panel. ## The Document Editor [#the-document-editor] Click any file in the Documents panel to open it as a tab in the **Center area**. ![A document open in the WYSIWYG markdown editor with the formatting toolbar visible](/images/documents-editor.png) The document editor is a WYSIWYG markdown editor with a formatting toolbar that includes: * **Undo** and **Redo** * **Format** dropdown — switch between Paragraph, Heading 1, Heading 2, Heading 3 * **Text formatting** — Bold, Italic, Underline, Strikethrough, Inline Code * **Blocks** — Code Block, Bullet List, Numbered List * **Tables** — insert and edit markdown tables You can write and edit documents visually without needing to know markdown syntax, though the underlying format is standard markdown. ## Writing Your Own Documents [#writing-your-own-documents] Some practical approaches for markdown document files: * **Feature specs** — describe a feature's behavior, edge cases, and user flows * **Design direction** — specify the visual tone, brand constraints, or reference styles * **Technical constraints** — list technologies to use or avoid, API patterns, data structures * **Accessibility requirements** — define WCAG compliance levels or specific needs Better documents lead to better AI results. A clear spec reduces back-and-forth because the AI understands your intent from the start. You don't need to write a 20-page PRD. A focused, 1-2 page document paired with an interactive prototype communicates more than a lengthy document ever could. ## Documents as Living Reference [#documents-as-living-reference] Documents aren't just for the AI. They serve as living reference for your team. Since these files are part of your project, every [collaborator](/docs/feature-reference/collaboration) who opens it can see the thinking behind the decisions. This makes handoff clearer and keeps the team aligned. ## Related Articles [#related-articles] * [Starting a Project](/docs/building-with-dazl/ideate-and-plan/starting-a-project) — different ways to begin a project, including from documents * [Chat-Driven Editing](/docs/building-with-dazl/design-and-refine/chat-driven-editing) — how the AI uses documents and context when making changes * [Documents](/docs/feature-reference/documents) — full reference for the Documents panel * [Skills & Rules](/docs/feature-reference/skills-and-rules) — prompts and skills that shape AI behavior # Inspecting Your Project (/docs/building-with-dazl/iterate-and-collaborate/inspecting-your-project) When you need to know what's behind an element (which CSS rules apply, what props it received, where the styling lives), the **Inspect panel** gives you that view. It's like browser DevTools, but integrated into your workflow with readable source names and changes that persist to the source code instead of disappearing on refresh. ![The Inspect panel showing the Style tab with CSS rules for a selected element](/images/inspect-panel-style.png) ## Opening the Inspect Panel [#opening-the-inspect-panel] Click the **Inspect** button in the top-right area of the top bar. The Inspect panel opens on the right side of the editor, alongside the preview. Select an element in **Edit mode** to see its details in the panel. ## Style Tab [#style-tab] The **Style tab** shows every CSS rule affecting the selected element, ordered from most specific to least specific. Rules are grouped by source file: * Project stylesheets (e.g., `home.module.css`, `home-hero-block.module.css`) * Theme files (`theme.css`, `colors.css`, `typography.css`, `spacings.css`) * Reset and base styles (`reset.css`) * User agent stylesheet (browser defaults, shown as read-only) Each rule shows its CSS declarations, and you can **edit values inline** by clicking on them. Changes are written directly to the source file. The Style tab also shows: * **Inherited styles** – styles cascading from parent elements (body, html) * **Design tokens** in use – color variables, spacing values, typography settings Seeing which file a style comes from helps you understand your project's CSS architecture. If a color is defined in `theme.css`, changing it there will affect every element that uses that token. ## Props Tab [#props-tab] The **Props tab** shows the React component properties for the selected element, for example, `className: {styles.homeheroblock}`. Inline values (strings, numbers, objects, arrays) can be edited directly in the text input. Bound expressions (e.g., `{styles.homeheroblock}`) show the expression and possibly the runtime value, but should be changed through the AI chat instead. If the selected element has no configurable props, the tab shows "No configured properties for this selection." ![The Props tab showing React component properties for a selected element](/images/inspect-panel-props.png) ## Why Inspection Matters [#why-inspection-matters] Dazl's code analysis engine displays everything in its **original source names** — the class names, component names, and file names you'd see in the actual code. Nothing is garbled or hashed in the Inspect panel. This matters because: * You can **communicate precisely** with your team about what needs to change ("the `heroSection` class in `home.module.css` needs more padding") * You can **understand the AI's work** by seeing exactly how it structured the CSS and components * You can **debug visual issues** by tracing a style back to its source file * The **AI uses the same tools** — it can read the same style and prop information when making changes, which helps it produce more accurate results ## Related Articles [#related-articles] * [The Elements Tree](/docs/building-with-dazl/iterate-and-collaborate/the-elements-tree) – navigate the component hierarchy * [Visual Editing](/docs/building-with-dazl/design-and-refine/visual-editing) – make changes to what you find during inspection * [Inspect](/docs/feature-reference/inspect-panel) – full reference # The Elements Tree (/docs/building-with-dazl/iterate-and-collaborate/the-elements-tree) The **Elements panel** shows your page as a tree of components. It's useful when an element is hard to reach with the cursor, when you want to understand how a page is structured before changing it, or when you need to act on multiple elements in sequence. ![The Elements panel showing a component tree with NavigationHeaderBlock, HomeHeroBlock, and other components](/images/elements-panel.png) ## Using the Elements Tree [#using-the-elements-tree] Click the **Elements** tab in the left sidebar to open the panel. You'll see a collapsible tree of component names and CSS class names, similar to the Elements panel in browser DevTools. * **Click** a component or element to select it on the preview * **Expand/collapse** nodes to explore the hierarchy * **Hover** over a node to highlight the corresponding element in the preview ## Readable Source Names [#readable-source-names] Unlike browser DevTools, where class names are often hashed or minified, the Elements panel shows everything in its **original source name**. You'll see names like `NavigationHeaderBlock`, `HomeHeroBlock`, and `heroSection` — the actual names used in the code. This makes it straightforward to: * Identify which component owns which part of the UI * Find the right element to feed as context to the AI * Align your team's vocabulary around consistent component names ## When to Use the Elements Tree [#when-to-use-the-elements-tree] The Elements tree is especially helpful when: * **An element is hard to select on the preview** — it's behind another element, has zero dimensions, or is otherwise hard to click * **You want to understand the nesting structure** — see which components contain which children * **You need to pass a specific element to the AI** — select it in the tree, and it appears as context in the **Chat panel** You can keep the Chat panel visible while browsing the Elements tree. Select an element from the tree, switch to Chat, and the element is already attached as context. ## Related Articles [#related-articles] * [Inspecting Your Project](/docs/building-with-dazl/iterate-and-collaborate/inspecting-your-project) – see the CSS and props for selected elements * [Visual Editing](/docs/building-with-dazl/design-and-refine/visual-editing) – select and edit elements on the preview * [Elements](/docs/feature-reference/elements) – full reference # Understanding Changes (/docs/building-with-dazl/iterate-and-collaborate/understanding-changes) Dazl records every change to a project: AI edits, visual edits, code edits, and manual file changes. The **History panel** is where you replay that record, see exactly what each change did, and roll back when something didn't go the way you wanted. ![The History panel showing a timeline of revisions grouped by date](/images/history-panel.png) ## The History Panel [#the-history-panel] Click the **History** tab in the left sidebar. Revisions are displayed as a timeline grouped by collapsible date sections (e.g., "Today", "February 10", "February 6"), each showing a count of revisions. If your project isn't connected to GitHub yet, a **GitHub Connect** link appears in the panel header — click it to link your project to a repo. Each revision shows: * **Title** — a description of the change (e.g., "Build complete PetDrone app", "Updated hero section colors") * **AI / Manual label** — whether the change was made by the AI or by you directly * **Timestamp** — when the change happened * **View changes** — shows a diff of exactly what was modified * **Restore** — rolls the project back to this revision ## Viewing Diffs [#viewing-diffs] Click **View changes** on any revision to see a diff — the exact lines of code that were added, removed, or modified. This works for: * AI-generated changes (from chat prompts) * Visual edits (color changes, drag-and-drop, text edits) * Code changes (direct edits in the code editor) Seeing diffs for visual edits is particularly useful — when you drag an element or change a color, you can verify exactly what CSS was modified. ![The diff view showing a side-by-side comparison of code changes, with removed lines in red and added lines in green](/images/history-diff-view.png) ## Restoring a Previous Version [#restoring-a-previous-version] Click **Restore** on any revision to roll your project back to that point. This is a safe operation — the current state is preserved as its own revision, so you can always restore forward again if needed. ## Changes in the Chat [#changes-in-the-chat] The **Chat panel** also tracks changes inline. Each AI response shows: * **File edit cards** — expandable cards showing which files were updated or created, with an option to open the file in a split view alongside the Preview * **File count summary** — e.g., "5 files changed" with a "Show more" toggle to see all affected files * **View Code button** — on the response marked "Current Version", click **View Code** to see a diff of the changes introduced by that response * **Version badge** — the response that matches the current project state is marked "Current Version"; older responses show a **Restore** button ![An AI response in the Chat panel showing file edit cards, a summary of changes, the View Code button, and the Current Version badge](/images/chat-view-code-button.png) Clicking **View Code** opens a full diff view showing exactly what that response changed: ![The diff view opened from the Chat panel showing a side-by-side comparison of code changes across multiple files](/images/chat-diff-view.png) This makes it easy to trace back: if something looks wrong, scroll through the chat to find the response that introduced the change and view the diff directly. Before making a large change, note the current revision in the History panel. If the result isn't what you expected, you can restore to that point in one click. ## Related Articles [#related-articles] * [Chat-Driven Editing](/docs/building-with-dazl/design-and-refine/chat-driven-editing) – understanding AI responses and file change summaries * [History](/docs/feature-reference/history) – full reference # Working Together (/docs/building-with-dazl/iterate-and-collaborate/working-together) Dazl supports real-time collaboration so your team can work on the same project at the same time, from ideation through handoff. ![The top-right area of the top bar showing Online members, Inspect, Create repository, Comments, Share, and Publish buttons](/images/collaboration-top-bar.png) ## When to Collaborate [#when-to-collaborate] Collaboration fits naturally into several points in the product workflow: * **Aligning on direction** — a product manager and designer iterate on the same prototype, refining the experience together rather than passing screenshots back and forth * **Leaving feedback** — use the [Comments panel](/docs/feature-reference/comments) to leave feedback that your team can reply to and resolve * **Reviewing AI changes** — one person prompts the AI while another reviews the diffs and inspects the output. Typing indicators in the Chat panel show who is composing a message. * **Preparing for handoff** — a designer and developer work side by side, with the developer inspecting code and structure while the designer refines the visual details ## Getting Started [#getting-started] Click **Share** in the top bar to invite collaborators by email. Everyone you invite gets full access to the project — visual editing, Chat, code, documents, and all other features. The **Online members** indicator in the top bar shows who's currently connected. For the full details on inviting, presence, and how credits work, see [Collaboration](/docs/feature-reference/collaboration). ## Related Articles [#related-articles] * [Collaboration](/docs/feature-reference/collaboration) – the Share dialog, online members, and credits * [Inspecting Your Project](/docs/building-with-dazl/iterate-and-collaborate/inspecting-your-project) – review what the AI built with your team * [Publishing and Sharing](/docs/building-with-dazl/handoff-and-validation/publishing-and-sharing) – share a live URL for external feedback # Working with Code (/docs/building-with-dazl/iterate-and-collaborate/working-with-code) A Dazl project is real source code: React components, CSS modules, TypeScript files. When the AI's edits aren't quite what you want, or you'd rather make a small change directly, the code editor and **Files panel** are right there alongside the live preview. ![A code file open in a tab showing syntax highlighting and line numbers](/images/code-editor-tab.png) ## Browsing Files [#browsing-files] Click the **Files** tab in the left sidebar to open the file tree. You'll see the full directory structure of your project, organized into folders with expand/collapse controls. Files are shown with type-specific icons (`.tsx`, `.css`, `.ts`). Click any file to open it as a tab in the center area. ## Quick Open [#quick-open] Press **Cmd+P** (Mac) or **Ctrl+P** (Windows) to open the **Quick Open** dialog. Start typing a filename and the list filters in real time using fuzzy matching. ![The Quick Open dialog showing filtered results for "hero", with matching files listed by name and folder path](/images/quick-open-filtered.png) ## The Code Editor [#the-code-editor] Code files open in an editor with: * **Syntax highlighting** – color-coded TypeScript, CSS, JSON, and other languages * **Line numbers** – in the left gutter * **Code folding** – collapse and expand blocks using the arrows next to line numbers You can edit code directly in the editor. Changes are saved automatically and reflected in the preview. ## Tabbed Editing [#tabbed-editing] The center area is a tabbed container. You can have multiple files and the Preview open as tabs simultaneously. Tabs follow a **dynamic-until-pinned** system: * Opening a file replaces the current unpinned tab (shown in *italic* text) * **Double-click** a tab to pin it (it switches to normal text and stays open) * Start typing in a file or making an edit to automatically pin its tab This keeps your workspace clean while letting you pin the files you're actively working with. ![Multiple tabs in the center area showing Preview and a code file](/images/multiple-tabs.png) ## Split-Screen View [#split-screen-view] Open a code or document tab while the Preview is visible to work in a split-screen layout. The Preview stays on the left and the code editor appears on the right, so you can see your changes reflected in real time. ![The Editor in split-screen view with the Preview on the left and the code editor on the right](/images/split-screen-view.png) This is especially useful when you want to read the source while looking at the rendered result, or when you're making targeted edits and want immediate visual feedback. ## When to Edit Code Directly [#when-to-edit-code-directly] Most of the time, you'll work through visual editing or the chat. But direct code access is useful when: * **You want to paste something** – a code snippet, a configuration block, or content from another source * **You need to understand the structure** – reading the code helps you see how components are organized and how data flows * **You're debugging** – sometimes the fastest way to fix something is to read the code and make a targeted edit * **You want to verify AI changes** – open the file that was modified to see exactly what the AI wrote You can open a file from the chat by clicking the "Open file" icon on any file edit card in an AI response. This opens the file in a split view alongside the Preview, so you can review the code and see the result side by side. ## Searching Across Files [#searching-across-files] Use the **Search panel** (in the left sidebar) to search for text across your entire project. Toggle options for **Match Case**, **Whole Word**, and **Regex** are available. Results are grouped by file with line numbers, and clicking a result opens the file at that line. ## Related Articles [#related-articles] * [Chat-Driven Editing](/docs/building-with-dazl/design-and-refine/chat-driven-editing) – let the AI modify code through conversation * [Inspecting Your Project](/docs/building-with-dazl/iterate-and-collaborate/inspecting-your-project) – see CSS rules and props without opening files * [Files](/docs/feature-reference/files) – full reference for the Files panel * [Search](/docs/feature-reference/search) – full reference for the Search panel # Add Panel (/docs/feature-reference/add-panel) The **Add Panel** is a sidebar tab for adding visual assets and HTML elements to your project. It has three tabs: **Media** for images, **Icons** for icon libraries, and **Elements** for dragging HTML elements onto the page.
![The Add Panel showing Media, Icons, and Elements tabs, with the Media tab active showing project images, search, Generate and Upload buttons, and the scope selector](/images/add-panel.png)
## Media Tab [#media-tab] The **Media** tab displays a thumbnail grid of every image in your project. Each thumbnail shows the filename below it. Drag any image from the grid directly onto the preview to place it into a component scope. If you're in **Preview mode**, Dazl automatically switches to **Edit mode** when you start dragging. At the top of the tab: * **Search** — filter media by filename * **Adding media to** — a scope selector showing which component new media will be added to. Click to choose a different component on the current page.
![The scope selector expanded, showing Layout, App, and component names under the current page](/images/add-panel-scopes.png)
* **Generate** — create a new image using AI. Opens the same generation modal as the Media panel in the Action Bar. * **Upload** — add an image from your computer ## Icons Tab [#icons-tab] The **Icons** tab lets you browse and search icons. Select an icon or drag it onto the preview to add it to a component.
![The Icons tab showing a search box, component scope selector, and a grid of available icons](/images/add-panel-icons.png)
## Elements Tab [#elements-tab] The **Elements** tab lists HTML elements organized by category (Basic, Formatting, and others). Each item shows the element name and its HTML tag. Drag an element from the list onto the preview to add it to a component. At the top of the tab: * **Search** — filter elements by name * **Drag elements to** — a scope selector showing which component the element will be added to
![The Elements tab showing a search box, scope selector, and a list of Basic HTML elements like headings, paragraphs, and images](/images/add-panel-elements.png)
## Item Menu [#item-menu] Hover over any media item and click the menu button to see options: * **Show Image** — open the image at full size in a preview * **Attach to Chat Context** — adds the image as context for the AI, so it can reference it when making changes * **Delete** — removes the file from your project Attaching an image is useful when you want the AI to use an existing image as a reference — for example, asking it to apply a similar style to another section, or to replace an image elsewhere in the project. ## Related Articles [#related-articles] * [Media](/docs/feature-reference/media) – the Media panel in the Action Bar for replacing images on selected elements * [Chat-Driven Editing](/docs/building-with-dazl/design-and-refine/chat-driven-editing) – giving the AI context for better results # Add-ons (/docs/feature-reference/addons) **Add-ons** are pre-built recipes for adding popular libraries to your project: animations, 3D, maps, data grids, and more. Each one handles the install steps so you can start using a library without configuring it yourself, and they live in the **Add-ons** tab inside the **Integrations panel**. ![The Add-ons panel showing the catalog of available add-ons](/images/addons-panel.png) ## How Add-ons Work [#how-add-ons-work] 1. Click an add-on to see its details, description, and tags 2. Click **Install** to add the package to your project 3. A success dialog appears asking what you'd like to do with the library, pre-filled with a suggested prompt 4. Click **Send to Chat** to have the AI start using the library in your project, or **Skip** to install without further action ![The success dialog after installing an add-on, showing a pre-filled prompt suggestion with Skip and Send to Chat buttons](/images/addons-install-success.png) Installed add-ons show an "Installed" badge in the catalog. ## Available Add-ons [#available-add-ons] | Add-on | Description | | ---------------------------- | ---------------------------------------------- | | **AG Grid** | Feature-rich data grid | | **Deck.gl** | 3D-enabled data visualization overlays | | **Google AI** | Integration with Google AI services | | **GSAP** | JavaScript animation library | | **Image Gallery (Carousel)** | Image carousel gallery | | **Leaflet** | Interactive maps | | **Lexical** | Text editor framework for React | | **Mermaid** | Diagrams from markdown-like text | | **Monaco Editor** | Code editor for the web, used in VS Code | | **Motion** | Production-grade animation library | | **PDF Viewer** | Display PDFs in your app | | **ProseMirror** | Structured document editor (WYSIWYG) | | **Text Loading Animation** | Text loading animation effects | | **Three.js** | 3D graphics in the browser | | **XYFlow** | Node-based editors and interactive flow charts | The catalog is updated regularly. Use the search box at the top of the panel to find add-ons by name or description. Add-ons also appear in the **quick insert** element picker when you click an insertion point on the canvas, so you can discover and add them directly where you need them.
![The quick insert element picker showing the Addons section with available add-ons](/images/quick-insert-addons.png)
Add-ons are different from Integrations. Integrations (Supabase, Figma) are MCP connections that give the AI tools to interact with external services. Add-ons are library recipes that configure packages within your project. ## Related Articles [#related-articles] * [Integrations](/docs/feature-reference/integrations) – MCP-based service connections * [Chat-Driven Editing](/docs/building-with-dazl/design-and-refine/chat-driven-editing) – using add-ons through the AI chat # AI Buttons (/docs/feature-reference/ai-buttons) The **AI Buttons** panel lets you save reusable AI prompts as buttons. Define what the AI should do, choose where the button appears, and run it on demand. This is useful for actions you repeat often, such as generating a handoff document, extracting user stories, or running an accessibility audit on a selected element. Buttons are saved per project.
![The AI Buttons panel showing a custom Relayout button in Your Buttons, and starter buttons like Create Handoff Doc and Extract User Story](/images/ai-buttons-panel.png)
## The AI Buttons Panel [#the-ai-buttons-panel] The **AI Buttons** panel is a tab in the left sidebar. It starts unpinned by default. Open the **Organize panels** menu (the ellipsis icon at the bottom of the tab rail) and pin it to add it to the sidebar. The panel has two sections: * **Your Buttons**: buttons you've added to this project. Toggle them on or off at any time. * **Starter Buttons**: built-in templates for common workflows like creating handoff documents, extracting user stories, writing acceptance criteria, identifying edge cases, refactoring a file, or explaining a file for product managers. Click **Add** on a starter to open it in the button editor, prefilled so you can review and adjust it before saving. ## Creating a Button [#creating-a-button] Click the **+** button at the top of the panel to open the button editor. Click an existing button to edit it, or **Add** a starter button to open the editor prefilled with that template. The same dialog is used for all three.
![The Edit Button dialog showing a Relayout button configured with Action Bar location, With Context Review apply mode, and a prompt using template variables](/images/ai-buttons-edit-dialog.png)
| Field | Description | | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Label** | The button name shown in the panel and in the editor | | **Icon** | An icon from a curated set | | **Location** | Where the button appears: **Action Bar** (visible when you select an element), **Context Menu** (when you right-click an element), **File Tree Context Menu** (when you right-click a file or folder in the **Files panel**), or **Document Editor Context Menu** (when you right-click in a document or skill editor). The Action Bar and on-stage Context Menu require **Edit mode**; the other two work in either mode. | | **Apply Mode** | **Direct** sends the prompt immediately. **With Context Review** opens a dialog first so you can review how variables resolved and add context before sending. | | **Description** | Optional longer text shown in the panel and sent to the AI as additional context | | **AI Action Prompt** | The prompt the AI receives when you click the button | ## Template Variables [#template-variables] The prompt can include template variables that resolve to the current state of the editor. Wrap them in double curly braces: | Variable | Description | | -------------------- | ------------------------------------------------------------------------------------------------ | | `{{elementName}}` | The name of the selected element or component | | `{{elementHtml}}` | The rendered HTML of the selected element | | `{{sourceLocation}}` | The file path and location of the selected element's source code | | `{{fileName}}` | The active file's name, or the right-clicked file's name when triggered from the **Files panel** | | `{{filePath}}` | The full path of the file or folder the button was triggered on (used by File Tree buttons) | | `{{currentRoute}}` | The page route currently shown in the preview | | `{{documentId}}` | The project's document identifier | For example, a prompt like `"Write acceptance criteria for {{elementName}} on {{currentRoute}}"` resolves to the actual element and page before the AI sees it. ## Running a Button [#running-a-button] Where you trigger a button depends on its **Location** setting: * **Action Bar**: the button appears in the **Action Bar** when you select an element
![The AI Buttons dropdown open from the Action Bar with New AI button and Show all AI buttons entries](/images/ai-buttons-action-bar.png)
* **Context Menu**: the button appears when you right-click an element on the stage
![The on-stage right-click menu showing AI Buttons highlighted with a submenu listing custom buttons plus New AI button and Show all AI buttons](/images/ai-buttons-on-stage-menu.png)
* **File Tree Context Menu**: the button appears when you right-click a file or folder in the **Files panel**
![A file's right-click menu in the Files panel showing AI Buttons with a submenu for Explain File for PM, Refactor File, New AI button, and Show all AI buttons](/images/ai-buttons-file-tree-menu.png)
* **Document Editor Context Menu**: the button appears when you right-click in a **Documents panel** or **Skills & Rules panel** editor, scoped to the selected text
![A document open in the editor with the Background heading selected, and a right-click context menu showing Copy, Cut, Paste, Delete, Select all, a Write Acceptance Criteria button, New AI button, and Show all AI buttons entries](/images/ai-buttons-document-editor-menu.png)
The Action Bar and on-stage Context Menu require **Edit mode**, since there's no element selection in **Preview mode**. File Tree and Document Editor buttons work in either mode. If the apply mode is **With Context Review**, a dialog shows the resolved prompt and any attached context before sending. ## Managing Buttons [#managing-buttons] Each button in the **Your Buttons** section can be toggled on or off, duplicated, edited, or deleted. ## Related Articles [#related-articles] * [Chat-Driven Editing](/docs/building-with-dazl/design-and-refine/chat-driven-editing) – working with the AI through the Chat panel * [Chat](/docs/feature-reference/chat) – the Chat panel reference * [The Editor Layout](/docs/feature-reference/the-editor-layout) – overview of the editor workspace # Canvas (/docs/feature-reference/canvas) The **Canvas panel** is a workspace inside your project for gathering research, sketching design variants, drafting an asset library, or working through a plan before making changes to the prototype. Canvases are saved with the project, but they're not part of the prototype itself, so nothing on a canvas ships when you publish. ![A canvas with six nodes connected by dashed reference lines: a PRD document, three user-story text files, and two HTML onboarding variants](/images/canvas-overview.png) ## Creating a Canvas [#creating-a-canvas] Open the **Canvas panel** from the left sidebar. Click the **+** next to **Ideation Canvas** to create a new canvas, give it a name, and confirm. The canvas opens as a tab in the **Center area** next to the **Preview**, and you can switch between canvases from the panel's list at any time. A brand-new canvas starts empty and prompts you to add your first node. ![An empty canvas showing the four node-type tiles: Image, Document, HTML, and Text File](/images/canvas-node-picker.png) ## Node Types [#node-types] | Type | Use it for | | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Image** | Reference images, AI-generated illustrations, screenshots, mockup concepts | | **Document** | Long-form markdown content like PRDs, briefs, and notes. Uses the same editor as the **Documents panel**; documents created as canvas nodes also appear in that panel | | **HTML** | Rendered HTML the AI agent writes from your prompt: comparison pages, mockups, finished sections | | **Text File** | Plain text and data files: user stories, observations, do/don't lists, CSVs, snippets | Each node has a name that's used to reference it from other nodes. Double-click the node title to rename it. Double-click the node body to open it fullscreen. ## Generating a Node's Content [#generating-a-nodes-content] Selecting a node opens its settings panel. Write a prompt there and click **Generate**. The agent that runs from the node settings is intentionally focused: it can read other nodes you reference on the canvas, but its toolset is smaller than the main **Chat panel** agent. Use it for self-contained generation. ![The prd-onboarding-v2 node selected, with its settings panel showing the prompt, template selector, the "use # to reference any node in the canvas" hint, credits indicator, and Generate button](/images/canvas-node-settings.png) Need MCPs, web scraping, or the full agent toolset? Build canvas nodes from the main **Chat panel** instead. The Chat agent can read from and write to the canvas alongside its full toolset. ## Referencing Other Nodes [#referencing-other-nodes] Type `#` followed by a node's name (for example `#prd-onboarding-v2`) in a node's prompt to pull that node in as context for generation. References let you chain work, so a synthesis HTML node can read the text-file notes that feed it. The AI receives both the prompt and the referenced nodes when it generates. References render as dashed lines between nodes on the canvas surface, so the dependency graph is visible at a glance. You can also create a reference by dragging from a node's connection handle (it appears on hover) onto another node. ![Close-up of a PRD node referencing three user-story text nodes, which in turn feed two HTML variants, visible as dashed reference lines](/images/canvas-node-connection.png) ## Commenting on Nodes [#commenting-on-nodes] Each node has a comment button in its header. Click it, write a comment, and the comment thread anchors to that node. A small count badge appears on the node once comments exist. ![The prd-onboarding-v2 node with a comment popover open, showing one comment from a teammate suggesting alternate wording for the Background section](/images/canvas-node-comments.png) Replies, reactions, and resolution work the same way as elsewhere in the project. See [Comments](/docs/feature-reference/comments) for the full reference. ## Working with the Canvas Surface [#working-with-the-canvas-surface] * Drag a node to reposition it. * Select a node and press **Backspace** to delete it. * Copy and paste nodes with **Cmd+C** / **Cmd+V** (Mac) or **Ctrl+C** / **Ctrl+V** (Windows). * Right-click a node for a context menu of additional actions. * Double-click a node body to open it fullscreen; double-click the title to rename. * Zoom with the trackpad or the zoom control at the bottom-right of the canvas. **Zoom to fit** centers all nodes in view. * Pan by dragging the canvas background, or hold **Space** to pan from anywhere on the canvas. ## Related Articles [#related-articles] * [Chat](/docs/feature-reference/chat) – build canvas nodes from the main Chat panel with the full agent toolset * [Documents](/docs/feature-reference/documents) – the document editor that powers Document nodes * [Comments](/docs/feature-reference/comments) – how comment threads work across the project * [Plan](/docs/feature-reference/plan) – another planning surface; Plan generates a project, while Canvas captures research and exploration around it # Chat (/docs/feature-reference/chat) The **Chat panel** is your direct line to the AI. Every prompt, response, and action card lives here, alongside the controls for choosing a model and managing the conversation.
![The Chat panel showing conversation history with AI responses, file edit cards, and the prompt box](/images/chat-panel.png)
## Chat Threads [#chat-threads] Each project can have multiple Chat threads. The current thread's name appears at the top of the Chat panel. Click it to open a dropdown listing all threads, with timestamps showing when each was last active. ![The chat selector showing the active thread name with a + button next to it for starting a new chat, and an open dropdown listing two threads — the hovered thread shows pencil and trash icons for renaming and deleting, and the active thread is marked with a checkmark](/images/chat-threads-with-actions.png) * Click **Start new chat** (the + button) to create a fresh thread with no prior context * Click any thread in the dropdown to switch to it * Hover a thread and click the **pencil** to rename it inline, or the **trash** to delete it Renaming happens inline in the dropdown. Deleting asks for confirmation first, and if you delete the active chat, Dazl falls back to the most recently updated chat. The last remaining thread can't be deleted, and renaming or deleting is blocked while the AI is processing. Starting a new thread is useful when you want to change direction without the AI being influenced by earlier conversation. Previous threads are preserved — switch back any time you need the context from an earlier conversation. ## Conversation History [#conversation-history] Messages are displayed chronologically within the active thread. Each message shows: * **User messages** — your icon, name, and timestamp * **AI responses** — timestamp, model icon, and token cost (credits consumed) AI responses can include formatted text (headings, lists, code blocks), file edit cards, action cards, generated or edited images, and file count summaries. The AI can also inspect your project while working — reading logs, computed styles, and page HTML, and taking screenshots of the live project to verify its changes visually. See [Chat-Driven Editing](/docs/building-with-dazl/design-and-refine/chat-driven-editing) for details on response types. When [collaborators](/docs/feature-reference/collaboration) are working on the same project, a typing indicator appears in the Chat panel showing who is composing a message. ## Reasoning [#reasoning] On each request, the AI works through the problem before it answers, and that reasoning appears inline as a **Thinking** block above the response. Expand a Thinking block to follow how the AI interpreted your prompt and planned its approach, or leave it collapsed to focus on the result.
![A chat response with an expanded Thinking block showing the model's reasoning, followed by the files it read and the start of the answer](/images/chat-reasoning.png)
Reasoning runs on all chat messages, including app generation. ## Editing Messages [#editing-messages] You can edit any message you've sent earlier in a chat. Hover a user message and click the **pencil** icon to open it inline for editing.
![A previously sent user message in edit mode, showing the text in an editable input with an attach button, a cancel button, and a save and resend button](/images/chat-edit-message.png)
When you save the edit, the chat replays from the edited message: everything after it is removed, the project is restored to the state it was in just before that message, and the AI runs the edited prompt as a fresh request. Use it to retry a prompt with different wording, or to branch back to an earlier point in the conversation without starting a new thread. ## In-Chat Links [#in-chat-links] AI responses can include links that open directly in the editor: * **Code tabs** — jump to a specific file and line in the code editor * **Document tabs** — open a document in the **Documents panel** * **Preview pages** — navigate the preview to a specific route Click a link in an AI message to go straight to the referenced location without leaving the chat. ## Prompt Box [#prompt-box] Located at the bottom of the Chat panel: ![The prompt box showing the element attachment chip, text input, model selector, Discuss button, screen share, and voice input](/images/chat-panel-prompt.png) | Control | Description | | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Text input** | Multiline field with "What's next?" placeholder. Pasting large text (such as PRDs or code snippets) automatically attaches it as a file instead of inserting raw text. | | **Element attachment** | When an element or JSX expression is selected in Edit mode, it appears as a chip with the component name. JSX expressions can be attached as context just like any other component or element. | | **Clear** | Removes the attached element | | **Attachment button** | Paperclip icon — attach files or images. You can also drag files and folders from the **Files panel** or **Add Panel** directly into the chat input. | | **Send button** | Submit the prompt (disabled when empty) | | **Model selector** | Choose the AI model for this message | | **Discuss** | Toggle discuss mode — the AI responds conversationally without modifying code | | **MCP toggles** | Opens a popover listing connected MCP servers with on/off toggles so you can enable or disable them without leaving the chat. | | **Screen share** | Share screen context with the AI | | **Voice input** | Microphone for speech-to-text | When a code editor or document editor tab is active, the Chat panel automatically attaches that file as context so the AI stays focused on what you're working on. This context follows the active tab, so switching tabs replaces it and the AI always has the context for what you're currently viewing. The Chat agent can also read from and write to **canvas nodes**. Drag a node from the **Canvas panel** into the chat input to bring it in as context for a specific message. See [Canvas](/docs/feature-reference/canvas). ## Queuing Tasks [#queuing-tasks] You can send additional prompts while the AI is still working. Queued prompts appear as a **"Tasks pending"** list above the prompt box and run in order automatically once the current task finishes.
![The Chat panel showing four queued tasks pending while the AI works on the current request](/images/chat-queue-tasks.png)
This lets you line up a sequence of changes without waiting between each one. Describe the next step as soon as you think of it. If you decide a queued task shouldn't wait, you can [steer](#steering) it into the current request from the queue. ## Steering [#steering] If the AI is heading the wrong way mid-task, you can nudge it without canceling. Type a message into the prompt box while the AI is working; it goes into **Tasks pending** like any queued prompt. Then click the **Push now** arrow next to the task to send it into the current request instead of waiting.
![The Tasks pending drawer showing a queued task with the Push now tooltip on the up arrow next to it](/images/chat-steering-push-now.png)
The AI picks up the steering message at the next step of the current request and adjusts what it's doing. The message appears inline in the AI's response as a regular "You" message, so it's clear when in the response the steer landed.
![The chat showing a steering message — give it a standout color! — appearing in the middle of the AI's ongoing response, with the AI continuing to create files, run checks, and execute a shell command after picking up the steer](/images/chat-steering-inline-message.png)
Steering only works in the chat where the active request is in progress. Use it for course corrections like "make it more compact" or "stick to neutral colors", without losing the work the AI has already done. ## Canceling an Operation [#canceling-an-operation] If the AI is heading in the wrong direction, you have two options. For a course correction, [steer](#steering) the active request; the AI keeps working but adjusts to your nudge. To stop completely, cancel the current operation. Either way, all file changes made so far are preserved, so you can continue from where the AI left off or prompt differently. ## Approving Tool Calls [#approving-tool-calls] When the AI wants to run a tool that requires your permission, like an action from a connected integration, a shell command in your project's dev environment, or another sensitive operation, the chat shows a confirmation prompt before the tool runs. Shell commands show the exact command in a code block so you can review what will run before approving.
![A confirmation card titled Confirm this action with a Shell Command label, the prompt List all git branches in the project, the command git branch -a in a code block, and Deny and Allow buttons](/images/chat-shell-confirm.png)
You have three options: * **Allow once** — approve this single call * **Allow for the rest of the session** — skip the prompt for the same tool until you close or refresh the project * **Deny** — cancel the call Session-wide approvals reset when you leave the project, so the AI asks again the next time you return. ## Discuss Mode [#discuss-mode] The **Discuss** button toggles discuss mode. When active, the AI answers questions and talks through ideas without making changes to your project's code. ![The prompt box with Discuss mode active, showing a conversational question and the Discuss button highlighted](/images/discuss-mode-active.png) Use it to brainstorm features, plan an approach, or ask the AI about how your project works — why a component behaves a certain way, what a piece of code does, or how things are connected. You can also ask the AI about Dazl's own capabilities — what features are available, how to use a specific tool, or what's possible in the platform. Toggle it off when you're ready for the AI to start making changes again. ## Model Selector [#model-selector] The **Model selector** below the prompt box lets you choose which AI model processes your next message. Click the model name to open the dropdown and select a different one.
![The model selector dropdown showing Claude Sonnet 4.6 (default), Claude Opus 4.8, Claude Haiku 4.5, Gemini 3.1 Pro, Gemini 3.5 Flash, and Gemini 3 Flash](/images/model-selector-dropdown.png)
| Model | Description | | ------------------------------- | ------------------------------------------------------------------------------------------- | | **Claude Sonnet 4.6** (default) | Balanced coding model – high-quality output, moderate cost, fast enough for most tasks | | **Claude Opus 4.8** | Top-tier reasoning and code quality – highest cost and slower, best for complex problems | | **Claude Haiku 4.5** | Lightweight coding assistant – good results, low cost, very fast responses | | **Gemini 3.1 Pro** | High-tier reasoning and code synthesis – solves complex patterns efficiently, moderate cost | | **Gemini 3.5 Flash** | Balanced agentic model – moderate cost, optimized for real-world tasks at higher speed | | **Gemini 3 Flash** | Ultra-fast generation for simple code – lowest cost, reduced reasoning depth | There's no single best model — it depends on the task: * **Starting a new project** — Claude Sonnet 4.6 is a good default. It balances quality and cost well for initial generation. * **Complex logic or architecture decisions** — Claude Opus 4.8 excels at reasoning through complex problems, though it takes longer and costs more. * **Quick tweaks and routine changes** — Claude Haiku 4.5 or Gemini 3 Flash handle routine modifications quickly and cheaply. * **Design exploration** — Gemini 3.1 Pro handles complex patterns efficiently. Use it when you want to explore different visual directions. * **Trying a different perspective** — if one model isn't giving you the results you want, try a different one. Each model has different strengths. You can switch models mid-conversation. Use a capable model for the initial structure, then switch to a lighter model for smaller refinements. Each model consumes credits at a different rate. The token cost of each AI response is displayed next to the model icon. Lighter models (Haiku, Flash) consume fewer credits per interaction than heavier models (Opus). Visual editing, inspecting, and browsing your project don't consume credits — only AI-generated changes do. ## Chat Overlay [#chat-overlay] When you switch to another sidebar panel (History, Elements, Documents, etc.), the Chat panel stays available as a collapsible overlay at the bottom of the sidebar. This lets you keep your conversation visible while working in other panels. ![The sidebar showing the History panel with the Chat overlay expanded below](/images/chat-overlay-expanded.png) The divider between the active panel and the Chat panel has two controls: click the up arrow to give the **Chat panel** the full sidebar height (collapsing the panel above), or the down arrow to collapse the chat and give the active panel more room. Click **See Chat** at the bottom to expand it again. ![The sidebar with the Chat overlay collapsed, showing only the History panel](/images/chat-overlay-collapsed.png) ## Prompt Buttons [#prompt-buttons] The AI can include **prompt buttons** inline in its replies — clickable suggestions for what to do next. Click a button to send the suggested prompt back to the AI without typing it. ![A chat message asking which feature to build first, followed by Pet Profiles, Meet Our Chefs, Subscription Plans, and build all 3 at once prompt buttons](/images/chat-prompt-button.png) Buttons can appear anywhere in a response — at the end as a follow-up suggestion, or inline within a sentence. They give the AI a way to hand the next step back to you when there's a clear set of choices. ## Variant Gallery [#variant-gallery] When you ask the AI for design directions for a page, a section, a component, or any other part of your project, it can reply with a **variant gallery**: a set of named previews you can compare before picking one. ![A chat message showing four design variants in a 2 by 2 grid — Editorial Magazine, Stacked Polaroid Deck, Bento Mosaic Grid, and Chef Spotlight Stage — each with a name, an arrow button, and a thumbnail of the rendered variant](/images/chat-variant-gallery.png) Each card shows the variant's name, a thumbnail of how it looks, and an arrow button. * **Click a card** to open a larger preview in a modal. Use the arrows at the bottom to flip through the other variants in the gallery without closing the preview. * **Click the arrow button** on a card to send that variant back to the chat for the AI to implement immediately. ![A modal showing a large preview of the Stacked Polaroid Deck variant with pagination at the bottom indicating it's variant 2 of 4](/images/chat-variant-preview.png) The gallery is a low-cost way to compare directions side by side. Nothing is changed in your project until you choose a variant. ## Message Actions [#message-actions] Each AI response has: * **Helpful / Not helpful** — thumbs up/down feedback buttons * **View Code** — opens a diff showing the changes made by that response * **Restore** — rolls back the project to the state after that response * **Current Version** badge — marks the response that matches the current project state ## Related Articles [#related-articles] * [Chat-Driven Editing](/docs/building-with-dazl/design-and-refine/chat-driven-editing) – how to work effectively with the AI * [Skills & Rules](/docs/feature-reference/skills-and-rules) – prompts and skills that shape AI behavior * [Upgrading to Pro](/docs/getting-started/upgrading-to-pro) – get more credits # Collaboration (/docs/feature-reference/collaboration) Dazl projects don't have to be solo work. Invite teammates and they can edit, prompt the AI, and see who's online alongside you in real time. ## Inviting Collaborators [#inviting-collaborators] Click **Share** in the top-right corner of the **Top bar** to open the Share dialog.
![The Share a project dialog showing the email invite field, member list, and credits notice](/images/share-dialog.png)
Enter the person's email address and click **Invite**. They receive an email notification with a **Join Project** button that opens the project directly. If the invitee doesn't have a Dazl account yet, they can create one when they open the link.
![The collaboration invite email with a Join Project button](/images/collaboration-invite-email.png)
The Share dialog lists everyone who has access to the project, with the project creator marked as **Owner**. ## Online Members [#online-members] The **Online members** button in the top bar shows which collaborators are currently connected to the project. Click it to see a list of online users with their avatar and email. ![The Online members popover showing a connected user's avatar and email](/images/online-members.png) When multiple people are working on the same project, each person has full access to the editor — visual editing, Chat, code, documents, and all other features. When a collaborator is typing in the **Chat panel**, a typing indicator shows their name so you know a message is on the way. Use the **Comments panel** to leave feedback and discuss changes with your team. See [Comments](/docs/feature-reference/comments) for details. ## How Credits Work [#how-credits-work] AI operations in a shared project are deducted from the **owner's** credits, regardless of which collaborator triggers them. The Share dialog displays a reminder of this. Collaboration is scoped to individual projects. Invite the people you want to work with on each project separately. ## Related Articles [#related-articles] * [Comments](/docs/feature-reference/comments) – leave feedback and discuss changes * [Publishing and Sharing](/docs/building-with-dazl/handoff-and-validation/publishing-and-sharing) – share a live URL for feedback * [Handing Off to Developers](/docs/building-with-dazl/handoff-and-validation/handing-off-to-developers) – handoff options for engineering teams * [GitHub](/docs/feature-reference/github) – connect to a repo for code-level collaboration # Comments (/docs/feature-reference/comments) The **Comments panel** lets you and your collaborators leave feedback on the project. A comment can be tied to a whole page or pinned to a specific element in the **Preview**, so collaborators can see exactly what each comment is about and where.
![The Comments panel showing four threaded comments scoped to different parts of the project: an element comment on a.primaryBtn, a canvas node comment, and two page-level comments with replies](/images/comments-panel.png)
## Opening the Comments Panel [#opening-the-comments-panel] Click the **Comments** button (speech bubble icon) in the top-right area of the top bar. The panel opens on the right side of the editor, alongside the preview. ![The top-right area of the top bar showing Online members, Inspect, Create repository, Comments, Share, and Publish buttons](/images/collaboration-top-bar.png) ## Leaving a Page-Level Comment [#leaving-a-page-level-comment] 1. Navigate to the page you want to comment on using the **Pages dropdown** 2. Open the **Comments panel** 3. Type your feedback in the "Write a comment..." input at the top 4. Click the send button The comment is tagged with the current page name (e.g., "checkout", "Home") so collaborators know which page it refers to. ## Pinning a Comment to an Element [#pinning-a-comment-to-an-element] When the feedback is about a specific button, section, or any other piece of the UI, pin the comment to that element instead of the whole page. 1. Switch to **Edit mode** and select the element in the **Preview** 2. In the selection badge that appears above the element, click the **comment icon** next to the element's name 3. Write your comment in the popover that opens, then send
![The Explore the Menu link selected in the preview with a Link.primaryBtn selection badge and a "Write a comment…" popover open below the element](/images/preview-comment-popover.png)
The comment appears in the **Comments panel** tagged with the element selector (e.g., `a.primaryBtn`). Clicking the tag re-selects the element in the **Preview** so collaborators can jump straight to what the comment is about. ## Commenting on a Canvas Node [#commenting-on-a-canvas-node] Comments can also be left on individual nodes in the **Canvas panel**. The flow is the same as pinning a comment to an element: click the comment button in the node's header, write your comment, and it anchors to that node. Canvas-node comments appear in the **Comments panel** tagged with the canvas filename and node name. See [Canvas](/docs/feature-reference/canvas) for the full reference. ## Replies and Threads [#replies-and-threads] Each comment has a **Reply** button. Click it to add a response, creating a threaded conversation. Multiple collaborators can participate in the same thread, keeping related discussion together. ## Editing Comments [#editing-comments] You can edit your own comments and replies after posting. Hover over a comment you authored to reveal the edit action. ## Deleting Comments [#deleting-comments] Hover over a comment you authored to reveal the delete action. A confirmation dialog appears before the comment is removed. ## Filtering Comments [#filtering-comments] Three tabs at the top of the panel control which comments are visible: * **Active** — comments that are still open * **Resolved** — comments that have been marked as resolved * **All** — every comment regardless of status ## Related Articles [#related-articles] * [Collaboration](/docs/feature-reference/collaboration) – inviting team members and working together * [Working Together](/docs/building-with-dazl/iterate-and-collaborate/working-together) – collaboration patterns in your workflow # Component Page (/docs/feature-reference/component-page) The **Component page** displays your project's entire design system as a live gallery of components. Open it by clicking **Components** in the top bar, next to **Pages**. The button only appears if your project has a component gallery route defined. ![The Component page showing a gallery of project components including Accordion, Alert, Avatar, Badge, Breadcrumb, Button, Card, and Checkbox](/images/component-page.png) ## What It Shows [#what-it-shows] The page renders every component in your project with its variants and states. Each component appears in its own card with a label — buttons show their Default, Secondary, and Destructive variants; checkboxes show Unchecked, Checked, and Disabled states; and so on. This gives you a bird's-eye view of your design system without navigating through individual pages to find each component. ## Editing Components [#editing-components] Select any component on the page to edit it directly. Your changes apply everywhere that component is used across the project. The **Action Bar** appears as usual, so you can adjust colors, typography, spacing, and other visual properties. You can also use the **Chat panel** to make broader changes — for example, asking the AI to update all buttons to use a new border radius or to restyle your card components. ## When to Use It [#when-to-use-it] * **Design system review** — check that all components look consistent with your theme * **Bulk styling** — select a component and update its appearance project-wide * **Component inventory** — see what components exist in your project at a glance ## How `.example.tsx` Files Work [#how-exampletsx-files-work] If the **Component page** doesn't show the variants and states you expect for a component, you can control what appears by adding an `.example.tsx` file. These files define which prop configurations the gallery renders, without applying any styles of their own. The **Editor** finds example files automatically and shows them on the **Component page**. ### Guidelines [#guidelines] * **Default export**: Export a single component that renders the entire demonstration. * **Organization**: Use the `Section` component (imported from `@dazl/component-gallery`) to group variants. * **Layout**: Use `
` to control item alignment. * **Headings**: Use `` to label each group. ### Example File Template [#example-file-template] ```tsx import { Section } from "@dazl/component-gallery"; import { Button } from "./button"; export default function ButtonExample() { return ( <>
Variants
Sizes
); } ``` ## Related Articles [#related-articles] * [Theme](/docs/feature-reference/theme) – manage color tokens and typography scales * [Working with the Theme](/docs/building-with-dazl/design-and-refine/working-with-the-theme) – guide to customizing your design system * [Visual Editing](/docs/feature-reference/visual-editing) – selecting and editing elements directly # Dashboard (/docs/feature-reference/dashboard) The Dashboard is the first screen you see when you open Dazl. It's where every project starts, where existing ones live, and where you manage templates and your account. ![The Dashboard prompt box with the attachment, enhance prompt, model selector, plan toggle, and voice input controls](/images/dashboard-prompt-box.png) ## Prompt Box [#prompt-box] The prompt box at the top of the Dashboard is the entry point for new projects. Type a description, hit **Send**, and Dazl generates a working project from it. | Control | Description | | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Text field** | The main input. Describe what you want to build. | | **Attachment** (paperclip) | Attach screenshots, images, documents, or data files as context. See [Starting a Project](/docs/building-with-dazl/ideate-and-plan/starting-a-project). | | **Enhance prompt** (sparkle) | Expand a short prompt into a more detailed brief before generating. | | **Model selector** | Choose which AI model generates the project. | | **Plan** toggle | Generate an editable project plan first, before any code. See [Plan](/docs/feature-reference/plan). | | **Voice input** (microphone) | Dictate your prompt instead of typing. | | **Send** | Submit the prompt to start generation. | ### Model Selector [#model-selector] The **Model selector** on the Dashboard lets you pick the model that generates your new project. Only top-tier models are available here: * **Claude 4.6 Sonnet** (default) * **Claude 4.8 Opus** * **Gemini 3.1 Pro** Once the project is created, the [Chat panel](/docs/feature-reference/chat) exposes a wider selection of models for ongoing work. ### Plan Toggle [#plan-toggle] Enable **Plan** to review and edit a structured project plan before the AI writes code. The plan covers pages, sections, features, and theme guidelines, and you can edit any part of it before clicking **Build**. See [Plan](/docs/feature-reference/plan) for the full reference. ## Templates [#templates] Once you've saved a project as a template, a **Create From Your Template** section appears on the Dashboard between the prompt box and your projects. ![The Create From Your Template section showing template cards with thumbnails and descriptions](/images/dashboard-templates.png) Click a template card to start a new project based on it. Templates shared with you by teammates show user avatars on the card. See [Templates](/docs/building-with-dazl/ideate-and-plan/templates) for saving, sharing, and using templates. ## My Projects [#my-projects] The **My Projects** grid shows every project you have access to. ![The My Projects grid showing project cards with Published badges and Running indicators](/images/dashboard-my-projects.png) Each card includes: * **Preview thumbnail** — a screenshot of the project's home page * **Project name** — click the card to open the project in the **Editor** * **Timestamp** — when the project was last opened * **Published badge** — appears when the project has been published * **Running indicator** — appears when the project's preview server is active * **Team member avatars** — collaborators on the project * **Options menu** — three-dot button for additional actions Use the **Search projects** field to filter by name, and the **Sort by Recent** dropdown to reorder the grid. ## Concurrent Projects [#concurrent-projects] You can run up to three projects at the same time. Opening a fourth shows a dialog that lets you close one of the running projects, or close them all at once. ![The Maximum Opened Projects Reached dialog listing currently running projects with Close buttons and a Close All option](/images/max-open-projects-dialog.png) ## User Menu [#user-menu] Click your **avatar** in the top-right corner to open the user menu: * Your current plan and email * **Balance** — remaining credits * **Upgrade** — link to the pricing page * **Manage Billing** — payment and invoice management * **Contact Us** — reach the Dazl team * **Sign Out** ## Related Articles [#related-articles] * [Starting a Project](/docs/building-with-dazl/ideate-and-plan/starting-a-project) – the different ways to begin a new project * [Templates](/docs/building-with-dazl/ideate-and-plan/templates) – save, share, and reuse project starting points * [Plan](/docs/feature-reference/plan) – review and edit a project plan before building * [Chat](/docs/feature-reference/chat) – model selector and available models inside the Editor # Documents (/docs/feature-reference/documents) Use the **Documents panel** to write and manage the markdown files that describe what you're building: PRDs, user flows, technical designs, brand voice notes, research, and anything else your team works from. The AI can also read them as context when generating or modifying code.
![The Documents panel showing My Documents with a README and feature spec files, plus the Enable Custom Templates option](/images/documents-panel.png)
Prompts and skills used to live in this panel too. They've moved to the [Skills & Rules panel](/docs/feature-reference/skills-and-rules), which sits next to Documents in the left sidebar. ## Creating Documents [#creating-documents] Click **+ New** to create a document from a blank file or a built-in template (PRD, User Flow, Technical Design, Agent Instruction). You can also create a custom template from the same menu. To bring an existing file in, hover over a folder in the panel — an upload control appears in the folder's row. ### Custom Templates [#custom-templates] Enable custom templates from the **+ New** menu or the button at the bottom of the panel. Once enabled, Dazl creates a templates directory with starter templates and a README explaining how the system works.
![The Documents panel with My Documents and Templates sections, showing six starter templates including blank, prd, user-flow, technical-design, system-prompt, and template](/images/documents-panel-with-templates.png)
Custom templates appear in the **+ New** menu alongside the built-in options. Each template can belong to a **group** that defines shared defaults for that document type: display name, icon, default filename, folder, and file extension. This lets teams standardize document types like PRDs, bug reports, or internal instructions. To turn an existing document into a reusable template, use the context menu on any file in the **Documents panel**. ### Template Editor [#template-editor] Open a template file to edit it. The template editor shows structured settings at the top (template name, group, and folder override) with the markdown body below. This replaces hand-editing raw frontmatter.
![The Custom Document Templates README showing how templates work, with Name, Group, and Folder fields explained](/images/documents-template-readme.png)
## Editing Documents [#editing-documents] Click a document to open it as a tab in the **Center area**. The editor is a WYSIWYG markdown editor with a formatting toolbar: * **Format** dropdown — switch between Paragraph, Heading 1, Heading 2, Heading 3 * **Text formatting** — Bold, Italic, Underline, Strikethrough, Inline Code * **Blocks** — Code Block, Bullet List, Numbered List * **Links** — wrap selected text in a markdown link, or paste a URL onto a selection to insert one * **Tables** — insert and edit markdown tables
![A document open in the WYSIWYG editor with the formatting toolbar visible](/images/documents-editor.png)
The same editor powers **Document nodes** on the [Canvas panel](/docs/feature-reference/canvas), and documents you create as canvas nodes also appear in this panel alongside the rest of your project's documents. ## Attaching Documents to Chat [#attaching-documents-to-chat] Each file in the panel has an **Attach to Chat Context** button. You can also drag any document directly from the panel into the chat input to give the AI access to its contents. ## Related Articles [#related-articles] * [Skills & Rules](/docs/feature-reference/skills-and-rules) — prompts and skills that shape AI behavior * [Writing Documents](/docs/building-with-dazl/ideate-and-plan/writing-documents) — guide to writing effective documents * [Chat-Driven Editing](/docs/building-with-dazl/design-and-refine/chat-driven-editing) — how the AI uses documents # Elements (/docs/feature-reference/elements) The **Elements panel** is a tree of every component on the current page. Use it when an element is hard to click on the preview, or when you want to see how a page is structured before changing it. ![The Elements panel showing a component tree with readable component and class names](/images/elements-panel.png) ## Tree View [#tree-view] * Component names (e.g., `NavigationHeaderBlock`, `HomeHeroBlock`) and CSS class names displayed in their **original source names** * Expandable/collapsible hierarchy * Click a node to select the element on the preview and in the Inspect panel * Useful for selecting elements that are hard to click directly on the preview ## Filter Selected [#filter-selected] The **Filter selected** toggle at the top of the panel narrows the tree to show only the selected component and its children. This is useful when you're working inside a deeply nested component and want to focus without the surrounding tree nodes. ## Context Menu [#context-menu] Right-click any element in the tree to open a context menu with quick actions. ![The context menu on an element in the Elements tree](/images/elements-context-menu.png) | Action | Shortcut | Description | | ----------------------- | -------------------- | ------------------------------------------------- | | **Duplicate** | **Cmd/Ctrl+D** | Copy the element and insert it after the original | | **Wrap with div** | — | Wrap the element in a new `
` container | | **Select parent** | **Shift+↑** | Move the selection up to the parent element | | **Add to chat context** | **Alt/Option+Click** | Attach the element as context in the Chat prompt | | **View code** | — | Open the element's source file in the code editor | | **Delete** | **Backspace** | Remove the element from the page | ## Related Articles [#related-articles] * [The Elements Tree](/docs/building-with-dazl/iterate-and-collaborate/the-elements-tree) – guide to using the elements tree * [Inspecting Your Project](/docs/building-with-dazl/iterate-and-collaborate/inspecting-your-project) – see styles and props for selected elements # Files (/docs/feature-reference/files) The **Files panel** is a file explorer for your project. Click any file to open it in the code editor, drag a file or folder into chat as context, or use it as the entry point for direct code edits.
![The Files panel showing the directory tree with the Dev files toggle and Upload button in the header](/images/files-panel.png)
## File Tree [#file-tree] The panel shows the full directory structure of your project. Folders appear before files, and items are sorted alphabetically. Click any file to open it in the code editor. ## Uploading Files [#uploading-files] Click **Upload files** in the Files panel header to add files from your computer. Uploaded files are saved to the `my-files` folder automatically. ## Dev Files Toggle [#dev-files-toggle] The **Dev files** toggle in the Files panel header shows or hides advanced developer files (such as configuration files at the project root). These files are hidden by default. ## Quick Open [#quick-open] Press **Cmd+P** (Mac) or **Ctrl+P** (Windows) to open the Quick Open dialog. Start typing a filename and the list filters in real time using fuzzy matching. This is a fast way to jump to any file without browsing the tree. ![The Quick Open dialog showing the full unfiltered file list](/images/quick-open-dialog.png) ![The Quick Open dialog showing filtered results for "hero", with matching files listed by name and folder path](/images/quick-open-filtered.png) ## Code Editor [#code-editor] Files open in a tabbed code editor in the center area, alongside the Preview tab. The editor includes: * **Syntax highlighting** for TypeScript, CSS, JSON, and other languages * **Line numbers** in the left gutter * **Code folding** to collapse and expand blocks ![A code file open in a tab showing syntax highlighting and line numbers](/images/code-editor-tab.png) You can edit code directly in the editor. Changes are saved automatically and reflected in the preview. ## Tabbed Editing [#tabbed-editing] The center area works like a tabbed editor. You can have multiple files and the Preview open as tabs simultaneously. Tabs follow a dynamic-until-pinned system: * Opening a file replaces the current unpinned tab (shown in *italic* text) * **Double-click** a tab to pin it (it switches to normal text and stays open) * Making an edit to a file automatically pins its tab ## Related Articles [#related-articles] * [Working with Code](/docs/building-with-dazl/iterate-and-collaborate/working-with-code) – guide to browsing and editing code * [Search](/docs/feature-reference/search) – search across file contents # GitHub (/docs/feature-reference/github) Connect your project to a GitHub repository to push and pull commits without leaving the editor — the most direct way to hand off working code to your engineering team. ## Connecting to GitHub [#connecting-to-github] The **GitHub** button appears in two places: the top bar and the **History panel** header. Click either one to start — you'll be prompted to sign in with your GitHub account, then the button changes to **Create repository**. Click it to open the **Create Repository** dialog. You need a GitHub account to use this feature. If you don't have one, create one at [github.com](https://github.com). In the Create Repository dialog, fill in the details:
![The Create Repository dialog showing fields for repository name, owner, description, and a private toggle](/images/github-create-repo.png)
* **Repository name** — defaults to your project name. Only letters, numbers, hyphens, underscores, and dots are allowed. * **Owner** — select the GitHub account or organization that will own the repo. * **Description** (optional) — a short summary of the repository. * **Private** — toggle on to keep the repo visible only to you and collaborators. On by default. Click **Connect repository** to create the repo and link it to your project. Once connected, the GitHub button becomes a Sync button for pushing and pulling. ## Disconnecting from GitHub [#disconnecting-from-github] To unlink your Dazl project from its GitHub account, open the **History panel** and click the chevron next to the GitHub button in the panel header. Choose **Remove connection** from the menu — the repository stays intact on GitHub; only the link between Dazl and your GitHub account is removed.
![The History panel header showing the Create repository button and its chevron menu with Create repository and Remove connection options](/images/github-connection-dialog.png)
## Pushing Commits [#pushing-commits] After connecting, click the Sync button (in the top bar or the **History panel** header) to push your latest changes as a commit. Each push sends the current state of your project to the connected repository. This is the most direct handoff option. Your engineering team works from the same repo and can pick up exactly where you left off. The code is readable, structured, and uses standard web technologies. ## Pulling Changes [#pulling-changes] If changes have been made to the repo outside of Dazl, click the Sync button (in the top bar or the **History panel** header) and pull to bring them into your project. This keeps the Dazl project in sync with work happening elsewhere. ## Working with External Tools [#working-with-external-tools] Once your project is connected to a repo, anyone on the team can clone it and work with their preferred tools — a local IDE, Claude Code, Cursor, or any other development environment. Push changes from those tools, then pull them back into Dazl to continue iterating visually. This makes GitHub the bridge between Dazl's visual, AI-assisted workflow and the broader development toolchain your team already uses. For real-time collaboration inside the Dazl editor, see [Collaboration](/docs/feature-reference/collaboration). ## When to Use GitHub [#when-to-use-github] GitHub is best suited for teams where: * Engineering works from the same codebase the prototype was built in * The team wants a shared repository as the single source of truth * Team members want to use their own editors or AI coding tools alongside Dazl * You need version-controlled handoff rather than a file download or published URL For other handoff approaches (sharing a published URL, exporting documents, or downloading the project), see [Handing Off to Developers](/docs/building-with-dazl/handoff-and-validation/handing-off-to-developers). ## Related Articles [#related-articles] * [Handing Off to Developers](/docs/building-with-dazl/handoff-and-validation/handing-off-to-developers) – all handoff options compared * [History](/docs/feature-reference/history) – the revision timeline where GitHub Connect also appears * [Publishing](/docs/feature-reference/publishing) – share a live URL for demos and validation # History (/docs/feature-reference/history) Every change in your project is recorded, whether it came from the AI, visual editing, or a direct code edit. The **History panel** is where you replay that record, see what each change did, and roll back if needed. ![The History panel showing revisions grouped by date](/images/history-panel.png) ## GitHub Connect [#github-connect] The **GitHub Connect** link appears in the panel header when your project is not yet connected to a GitHub repository. Click it to connect — once linked, you can push and pull commits from the top bar's **GitHub** button. ## Revision Timeline [#revision-timeline] Revisions are grouped by date. Each entry shows: * **Title** — description of the change * **AI / Manual label** — source of the change * **Timestamp** * **View changes** — opens a diff showing exactly what was modified * **Restore** — rolls the project back to this revision ## Viewing Diffs [#viewing-diffs] Click **View changes** on any revision to see a side-by-side comparison of the code that was added, removed, or modified. ![The diff view showing a side-by-side comparison of code changes, with removed lines in red and added lines in green](/images/history-diff-view.png) ## Related Articles [#related-articles] * [Understanding Changes](/docs/building-with-dazl/iterate-and-collaborate/understanding-changes) – how to use history effectively # Inspect (/docs/feature-reference/inspect-panel) The **Inspect panel** shows what's behind the element you're looking at. Open it on any selection and you can read the active CSS rules, the props passed in, and the source they come from. ![The Inspect panel showing the Style tab with CSS rules grouped by source file](/images/inspect-panel-style.png) ## Style Tab [#style-tab] Shows every CSS rule affecting the selected element, ordered from most specific to least specific. Rules are grouped by source file: * **Project stylesheets** – your component and page styles (e.g., `home-hero-block.module.css`, `home.module.css`) * **Theme files** – design tokens defined in `theme.css`, `colors.css`, `typography.css`, `spacings.css`, `decorations.css`, `animations.css` * **Reset and base styles** – `reset.css`, `global.css` * **User agent stylesheet** – browser default rules (read-only) Click any value to **edit it inline**. Changes are written directly to the source file. The Style tab also shows **inherited styles** from parent elements (e.g., "Inherited from body", "Inherited from html.light-theme"), so you can trace where a style originates. ## Props Tab [#props-tab] Shows React component props for the selected element: * Prop name and current value * **Inline values** (strings, numbers, objects, arrays) can be edited directly in the text input * **Bound expressions** (e.g., `{styles.homeheroblock}`) show the expression and possibly the runtime value, but should be changed through the AI chat instead ![The Props tab showing component properties](/images/inspect-panel-props.png) ### Adding Props [#adding-props] Use the **Add property** field at the top of the Props tab to pick from a list of the component's available props. Start typing to narrow the list.
![The Add property field in the Props tab with onClic typed, showing a filtered dropdown of matching props like onClick, onClickCapture, onAuxClick, and onDoubleClick](/images/inspect-props-add-dropdown.png)
## Opening the Inspect Panel [#opening-the-inspect-panel] Click the **Inspect** button in the top-right area of the top bar. Select an element in **Edit mode** to see its details. ![The Inspect button in the top-right area of the top bar, next to Publish](/images/inspect-button.png) ## Related Articles [#related-articles] * [Inspecting Your Project](/docs/building-with-dazl/iterate-and-collaborate/inspecting-your-project) – guide to using inspection effectively * [The Elements Tree](/docs/building-with-dazl/iterate-and-collaborate/the-elements-tree) – navigate the component hierarchy * [Visual Editing](/docs/building-with-dazl/design-and-refine/visual-editing) – edit the elements you're inspecting # Integrations (/docs/feature-reference/integrations) The **Integrations panel** connects your project to external services like databases, design tools, and issue trackers, so the AI can read from and act on them as part of a conversation. It has two tabs: **Integrations** for MCP connections, and **Add-ons** for library recipes (covered in a [separate article](/docs/feature-reference/addons)).
![The Integrations panel listing the available platform connections](/images/integrations-panel.png)
## Available Integrations [#available-integrations] ### Supabase [#supabase] Connects your project to a Supabase backend for: * **Database** – store and query data * **Authentication** – user sign-up, login, and session management * **Storage** – file and asset management Once connected, the AI can create database-backed features, authentication flows, and data-driven pages. You can also create a new Supabase project directly from Dazl after connecting your account. Learn more at [supabase.com](https://supabase.com).
![The Supabase connection modal showing project URL and API key fields](/images/integration-supabase-modal.png)
### Figma [#figma] Import frames and designs from Figma directly into Dazl. The AI uses the design as a reference to generate working code that matches your layout and styling. Learn more at [figma.com](https://www.figma.com).
![The Figma connection modal showing authorization steps](/images/integration-figma-modal.png)
### Google Sheets [#google-sheets] Connect a Google Sheets account to read spreadsheet data into your project or create new spreadsheets from your project's content. For example, import a product catalog to populate a listing page, pull in user research data to build a dashboard, or export a feature comparison table from your prototype.
![The Google Sheets connection modal showing authorization steps](/images/integration-google-sheets-modal.png)
### Google Docs [#google-docs] Connect a Google Docs account to pull in document content as reference or create new documents from your project's content. For example, feed a PRD into the chat so the AI builds to spec, import landing page copy from a shared doc, or generate a handoff document describing what was built.
![The Google Docs connection modal showing authorization steps](/images/integration-google-docs-modal.png)
### Google Slides [#google-slides] Connect a Google Slides account to reference presentation content or create new slides from your project. For example, reference a pitch deck for design direction, or generate a stakeholder update with screenshots and descriptions of what you've built.
![The Google Slides connection modal showing authorization steps](/images/integration-google-slides-modal.png)
### Jira [#jira] Connect a Jira instance to read, reference, and update issues, bugs, and sprints from the chat. For example, pull a ticket's context into a session before making a change, or log follow-up work without leaving Dazl. Learn more at [atlassian.com/software/jira](https://www.atlassian.com/software/jira). The Jira connection requires your **Jira Subdomain** — the part of your Jira URL before `.atlassian.net`. For example, if your URL is `mycompany.atlassian.net`, the subdomain is `mycompany`.
![The Jira connection modal showing authorization steps and the Jira Subdomain field](/images/integration-jira-modal.png)
### Confluence [#confluence] Connect a Confluence workspace to create, search, and manage pages and spaces from the chat. For example, pull a feature spec or research summary into a conversation as context, or generate a handoff page after a session. Learn more at [atlassian.com/software/confluence](https://www.atlassian.com/software/confluence). The Confluence connection requires your **Confluence Subdomain** — the part of your Confluence URL before `.atlassian.net`. For example, if your URL is `mycompany.atlassian.net`, the subdomain is `mycompany`.
![The Confluence connection modal showing authorization steps and the Confluence Subdomain field](/images/integration-confluence-modal.png)
### Linear [#linear] Connect a Linear workspace to create and manage issues and projects from the chat. For example, pull ticket context into a session before making a change, or log follow-up work without leaving Dazl. Learn more at [linear.app](https://linear.app).
![The Linear connection modal showing authorization steps](/images/integration-linear-modal.png)
### Miro [#miro] Connect Miro to work with whiteboards, diagrams, and sticky notes from the chat. For example, reference a flow from a Miro board when iterating on a page, or capture ideas to a shared board during a working session. Learn more at [miro.com](https://miro.com).
![The Miro connection modal showing authorization steps](/images/integration-miro-modal.png)
### Notion [#notion] Connect Notion to read and create pages and databases from the chat. For example, pull a PRD into the conversation as reference, or generate a handoff page after a session that describes what was built. Learn more at [notion.so](https://www.notion.so).
![The Notion connection modal showing authorization steps](/images/integration-notion-modal.png)
## Custom MCP [#custom-mcp] Click **+ Add Custom MCP** at the top-right of the **Integrations panel** to connect your own MCP server or a third-party MCP service.
![The Custom MCP dialog showing name, URL, and authentication type fields](/images/custom-mcp-dialog.png)
Provide: * **Name** — a label for the integration (shown in the Integrations panel) * **URL** — the MCP server endpoint * **Authentication Type** — choose **OAuth / None**, **Bearer**, or **Headers** depending on how the server authenticates Click **Enable** to connect. Once enabled, the AI can use the tools and resources provided by your MCP server when making changes to your project. ### Config file [#config-file] You can also register custom MCP servers in `dazl.config.json` at the project root. Add a top-level `mcpServers` object: ```json { "mcpServers": { "myServer": { "url": "https://example.com/mcp", "headers": { "X-API-Key": "${MCP_MY_SERVER_X_API_KEY}" } } } } ``` Supported fields per server: * `url` (required): absolute HTTP/HTTPS URL of the MCP server * `headers` (optional): request headers as name/value pairs Header values can reference an environment variable using `${VAR_NAME}` syntax, so you don't hardcode secrets in `dazl.config.json`. Store the value in the **Keys panel** (written to your project's `.env` file) and reference it by name. See [Keys](/docs/feature-reference/keys) for managing environment variables. `mcpServers` entries are merged with built-in MCP servers. If a custom server name collides with a built-in one, your custom server takes precedence. ## Toggling Integrations from Chat [#toggling-integrations-from-chat] You can enable or disable integrations without leaving the **Chat panel**. Click the **MCP toggles** button in the prompt box to open a popover listing all connected servers with on/off switches.
![The MCP toggles popover showing Context7 and Google-Docs with on/off switches](/images/mcp-toggles-popover.png)
## Related Articles [#related-articles] * [Starting a Project](/docs/building-with-dazl/ideate-and-plan/starting-a-project) – all the ways to begin a new project * [Add-ons](/docs/feature-reference/addons) – library integrations (different from MCP integrations) * [Pages and Routing](/docs/feature-reference/pages-and-routing) – dynamic pages powered by Supabase data # Keyboard Shortcuts (/docs/feature-reference/keyboard-shortcuts) Most of the editor's frequent actions have a keyboard shortcut. The full list is available anytime via **Shift+?** or **Project menu > Keyboard Shortcuts** (click the project name in the top-left corner). ![The Keyboard Shortcuts dialog showing shortcut tables for Global, Stage, DOM Panel, and File Tree sections](/images/keyboard-shortcuts.png) ## Global [#global] | Action | Mac | Windows/Linux | | ------------------- | --------------- | ---------------- | | Undo | **Cmd+Z** | **Ctrl+Z** | | Redo | **Cmd+Shift+Z** | **Ctrl+Shift+Z** | | Toggle Editing Mode | **Cmd+E** | **Ctrl+E** | | Quick Open File | **Cmd+P** | **Ctrl+P** | | Global Search | **Cmd+Shift+F** | **Ctrl+Shift+F** | | Keyboard Shortcuts | **Shift+?** | **Shift+?** | ## Stage [#stage] These shortcuts apply when working with elements on the preview canvas. | Action | Mac | Windows/Linux | | ------------------- | ------------- | -------------- | | Delete Item | **Backspace** | **Delete** | | Select Parent | **Shift+Up** | **Shift+Up** | | Duplicate | **Cmd+D** | **Ctrl+D** | | Clear Selection | **Escape** | **Escape** | | Add to Chat Context | **Cmd+Click** | **Ctrl+Click** | | Measure Distances | **Alt+Hover** | **Alt+Hover** | ## Elements Panel [#elements-panel] These shortcuts apply when navigating the Elements tree. | Action | Shortcut | | ------------------- | ---------------------------------------------- | | Navigate Up | **Up Arrow** | | Navigate Down | **Down Arrow** | | Expand Node | **Right Arrow** | | Collapse Node | **Left Arrow** | | Clear Selection | **Escape** | | Add to Chat Context | **Cmd+Click** (Mac) / **Ctrl+Click** (Windows) | ## File Tree [#file-tree] These shortcuts apply when navigating the Files panel. | Action | Shortcut | | ------------- | --------------- | | Rename File | **Enter** | | Previous File | **Up Arrow** | | Next File | **Down Arrow** | | Open Folder | **Right Arrow** | | Close Folder | **Left Arrow** | | Select File | **Space** | ## Related Articles [#related-articles] * [The Editor Layout](/docs/feature-reference/the-editor-layout) – overview of the workspace * [Visual Editing](/docs/feature-reference/visual-editing) – editing elements on the canvas * [Elements](/docs/feature-reference/elements) – the Elements tree panel * [Files](/docs/feature-reference/files) – the Files panel # Keys (/docs/feature-reference/keys) The **Keys panel** is where your project's secrets live: API keys, database credentials, tokens. Values stored here are available to server code at runtime without being shown to the AI or written into the codebase. ![The Keys panel showing a saved environment variable with its value masked](/images/keys-panel.png) ## Adding a Key [#adding-a-key] 1. Click **Add New** in the Keys panel ![The Add Environment Variables dialog in its initial state with empty name and value fields](/images/keys-add-dialog.png) 2. In the **Add Environment Variables** dialog, choose **Single Variable** or **Bulk Paste** 3. Enter the variable name (e.g., `GOOGLE_MAPS_API_KEY`) and its value 4. Click **Add Variable** ![The Add Environment Variables dialog with a name and masked value filled in](/images/keys-add-filled.png) The variable is securely stored and accessible in your project's server-side code as an environment variable. Values are masked by default; click the eye icon next to a key to reveal it, or use **Reveal All** in the panel header to show every value at once. Keys are stored in a `.env` file and are not exposed to the AI. This keeps sensitive credentials like API keys and database connection strings separate from your application code. ## When to Use Keys [#when-to-use-keys] * **API keys** for third-party services (e.g., Stripe, OpenAI, Google Maps) * **Database connection strings** for external databases * **Service credentials** that your project's server needs at runtime ## Related Articles [#related-articles] * [Integrations](/docs/feature-reference/integrations) – connecting to external services * [Logs](/docs/feature-reference/logs) – debugging server-side issues related to credentials # Logs (/docs/feature-reference/logs) The **Logs panel** shows runtime output from your project: what the browser console and server processes are emitting in real time. It's the first place to look when something behaves unexpectedly in the preview. ![The Logs panel showing client and server log entries](/images/logs-panel.png) ## Log Streams [#log-streams] The panel is split into two sections: * **Client Logs** – browser-side output (console messages, JavaScript errors) * **Server Logs** – server-side output (API requests, server errors, startup messages) Each section has a **Preserve log** checkbox. When enabled, logs persist across page reloads instead of being cleared. ## AI-Assisted Debugging [#ai-assisted-debugging] Each log entry has an **"Ask AI to explain this"** button. Click it to have the AI analyze the message and explain what's happening. If the message is an error, the AI can suggest a fix or attempt a resolution directly. This is one of Dazl's contextual AI experiences — localized AI help that works within the panel, without needing to switch to the Chat panel or write a prompt. ## Related Articles [#related-articles] * [Chat-Driven Editing](/docs/building-with-dazl/design-and-refine/chat-driven-editing) – using the main chat for debugging * [Keys](/docs/feature-reference/keys) – manage environment variables that may affect server behavior # Media (/docs/feature-reference/media) The **Media panel** opens whenever you select an image element. From it you can swap an image, generate a new one with AI, browse what's already in the project, or paste a URL. None of it requires leaving the live preview. You can also browse media without selecting an element first. The media gallery dialog (accessible from the [Add Panel](/docs/feature-reference/add-panel) in the left sidebar) includes the same search, upload, image generation, and chat-context attachment capabilities as the toolbar Media panel. ![The Media panel showing Project Media and URL tabs, with Upload and Generate buttons and project image thumbnails](/images/toolbar-media.png) ## Project Media [#project-media] The **Project Media** tab scans your project and displays all images currently in use as thumbnails. Click any image to use it for the selected element. Each image also has a delete button to remove it from the project. If the image is referenced elsewhere in the project, Dazl prevents the deletion and shows a notification so you don't end up with broken references. Two action buttons appear at the top of this tab: * **Upload** – add a new image from your computer * **Generate** – create a new image using AI (see below) ### Generate an Image [#generate-an-image] Clicking **Generate** opens a modal with a prompt field where you describe the image you want. Below the prompt you can configure: * **Model** – choose which AI image model to use. Available models include Imagen 4 Fast, Imagen 4, Imagen 4 Ultra, Gemini 3.1 Flash (Nano Banana 2), and Gemini 3 Pro (Nano Banana Pro) * **Style** – select a visual style for the generated image * **Aspect ratio** – set the dimensions (e.g., 1:1, 16:9) * **Remove background** – produce the image with a transparent background, useful for icons, product cutouts, and overlays The modal shows the credit cost per generation and a preview area. Once generated, click **Apply image** to use it for the selected element. Generated images are auto-saved to your project.
![The Generate an image modal with a prompt field, model selector, style, aspect ratio, and remove background options, plus a preview area](/images/media-generate-modal.png)
## URL [#url] The **URL** tab lets you enter a URL to use an externally hosted image. This is useful for pulling in images from a CDN, a design tool, or any public URL. ## SVG Elements [#svg-elements] When you select an **SVG element** (such as an icon) instead of an image, the **Media** control is replaced by an **SVG Element** control in the Action Bar. This panel lets you browse the project's icon library and replace the selected icon with a different one. Dazl auto-detects whether the project uses Lucide or Tabler and shows icons from that library. Double-clicking an SVG element in the preview opens this panel directly. {/* TODO: Add screenshot of the SVG Element panel showing the icon browser */} ## Related Articles [#related-articles] * [Add Panel](/docs/feature-reference/add-panel) – browse all project media from the sidebar and attach images to chat * [The Action Bar](/docs/building-with-dazl/design-and-refine/the-action-bar) – all Action Bar controls including Media * [Visual Editing](/docs/building-with-dazl/design-and-refine/visual-editing) – double-click images to open the Media panel # Pages and Routing (/docs/feature-reference/pages-and-routing) The **Pages dropdown** in the top bar lists every route in your project. It's where you navigate between routes in the preview, and where you create new pages and variants of existing pages. ![The Pages dropdown showing the project's routes — including a dynamic route expanded into a submenu of resolved values, page variants nested under their parent route, and the New page action at the bottom](/images/pages-dropdown-dynamic-submenu.png) ## Page List [#page-list] * Current page shown with a **checkmark** * Dynamic route parameters shown in code style (e.g., `tracking /` `deliveryId`) * **Warning icon** on dynamic routes with unresolved parameters * Page variants appear nested under their parent route with a distinct variant icon * Click any page to navigate the preview to that route ## Creating a New Page [#creating-a-new-page] Click **+ New page** at the bottom of the **Pages dropdown** to open the **New Page** dialog. ![The New Page dialog with a template picker showing categories like General, Presentation, and Common pages, and an optional instructions field](/images/pages-new-page-dialog.png) Pick a **template** for the kind of page you want: Blank page, Landing page, Dynamic page, Presentation page, common pages like About, Contact, Pricing, FAQ, and Terms & Privacy, plus auth and app pages. Add optional **instructions** to steer the AI further (for example, "a hero section with a product grid below"). Click **Create** and the AI generates the route, file, and initial content. Use this when you want a brand-new route in your project, like a marketing page, a settings page, or a new flow. For redesigning an existing page without losing the original, use a [variant](#page-variants) instead. ## Page Variants [#page-variants] A **page variant** is an alternate version of an existing page. You can use variants to explore a different layout, copy direction, or interaction model without overwriting the original. The original and the variant exist side by side, each at its own route. To create a variant, hover an existing page in the **Pages dropdown** and click the **Create variant** icon on the right of the row. ![The Pages dropdown with the Create variant icon visible on the hovered meals row, and the New page action at the bottom](/images/pages-dropdown-hover-create-variant.png) The **New Page Variant** dialog opens. ![The New Page Variant dialog with fields for variant name, customization level, and optional instructions](/images/pages-create-variant-dialog.png) Fill in: * **Variant name** — a short identifier. Dazl previews the resulting route below the field (for example, `/checkout` becomes `/checkout.variant.horizontal-scroll`). * **Customization level** — choose between **Subtle tweaks**, **Moderate redesign**, or **Complete redesign**. The level shapes how aggressively the AI departs from the original. * **Instructions** *(optional)* — extra direction for the AI, such as "do a horizontal scroll redesign" or "use a single-column layout". Click **Create** and the AI generates the variant as a new route. The variant appears nested under its parent in the **Pages dropdown** with a distinct variant icon, so it's clear which page it's a variant of. ![The Pages dropdown showing checkout with three variants — wizard, simplified-checkout, and horizontal-scroll — nested beneath it](/images/pages-dropdown-with-variants.png) Variants are first-class routes. Click one to open it in the preview and edit it like any other page. You can keep multiple variants in a project, share previews of each, and decide later which one to keep. Variants work for nested and dynamic routes too. The variant suffix attaches to the last static segment, so `/products/:productId` becomes `/products.variant.alt/:productId` and continues to receive its dynamic parameters as before. ## Dynamic Pages [#dynamic-pages] Dazl recognizes dynamic routes in your project — pages where the URL contains a variable parameter (e.g., a product ID or user ID). If a dynamic route doesn't have resolved parameter values yet, the Pages dropdown shows a **warning icon** next to it. Click it and Dazl asks for confirmation before the AI analyzes your route configuration and data and creates a **route description** — a file that maps the dynamic parameter to real values from your project. For example, a `/tracking/:deliveryId` route might get a route description that suggests three deliveries from your mock data, each with a descriptive title like "Buddy – In Transit" or "Whiskers – Completed." Once the route description is created, the dynamic route expands into a **submenu** in the Pages dropdown, listing each suggested value. Click any one to navigate the preview to that specific page. The submenu also includes a **Refresh data** option to re-fetch the suggested values. If a resolved route points to a 404 or returns an error, a **Fix with AI** button appears next to it. Click it and the AI updates the route description to use valid values. ![The Pages dropdown showing a dynamic route expanded into a submenu with three suggested delivery pages](/images/pages-dynamic-resolved.png) When connected to a database through Supabase, Dazl can resolve parameter values from live data instead of mock data, letting you preview data-driven pages with real content. ## Dev Routes [#dev-routes] Dev routes are pages that exist only during development — admin panels, CMS interfaces, data management tools. You create them by asking the AI in chat (e.g., "add a dev route for managing localization strings"). They're visible in the editor but **excluded from the published project**. This lets non-technical team members manage application data through a friendly interface. For example, you could ask the AI to build a localization editor or a content management panel that your team uses during development, without it appearing in the final published prototype. Dev routes are a way to build internal tooling alongside your interactive prototype. A PM can create a CMS to manage product data without needing to use developer-oriented tools like a Supabase dashboard directly. ## Related Articles [#related-articles] * [Publishing](/docs/feature-reference/publishing) – dev routes are excluded from published projects * [Integrations](/docs/feature-reference/integrations) – Supabase for database-driven dynamic pages # Plan (/docs/feature-reference/plan) The **Plan** toggle on the **Dashboard** prompt box lets you review and shape a structured project plan before the AI generates any code. ![The Dashboard prompt box with the Plan toggle enabled](/images/dashboard-prompt-box.png) **Plan** is different from the **Canvas panel**. Plan generates a working project from a structured plan you can edit. The [Canvas panel](/docs/feature-reference/canvas) is an open-ended workspace for the research, design variants, and assets that surround a project, not a way to generate one. ## How It Works [#how-it-works] 1. Enable the **Plan** toggle in the Dashboard prompt box 2. Type your prompt and send it 3. Answer a few clarifying questions in the interview 4. Choose **Create a plan** to generate a structured plan, or **Skip to prototype** to generate the project directly 5. If you create a plan, edit it until you're satisfied, then click **Build** ## The Interview [#the-interview] When you send your prompt with **Plan** enabled, the AI starts by asking a few clarifying questions about what you're building. Your answers give it the context to assemble a more accurate plan. Questions appear one at a time in the **Chat panel**. Each one offers a set of choices, or you can select "Or type your own" to answer in your own words.
![The interview asking "Who is the primary audience for this app?" in the Chat panel, with multiple-choice options and Finish Interview, Skip, and Submit controls](/images/plan-interview.png)
For each question: * **Submit** sends your answer and moves to the next question * **Skip** moves past a question without answering it * **Finish Interview** ends the interview early and lets the AI build the plan from what it has so far As you answer, your responses collect in the **Plan** tab in the center area, building the context for the plan. ![The Plan tab listing the answered interview questions with the selected response under each](/images/plan-interview-answers.png) When the AI has enough to work with, it ends the interview and summarizes the requirements it captured. From there, choose how to proceed: * **Create a plan** turns the captured requirements into a structured, editable plan * **Skip to prototype** skips planning and starts generating the project right away ![The full editor after the interview concludes: a requirements summary with the Create a plan and Skip to prototype options in the Chat panel, and every question and answer listed in the Plan tab](/images/plan-interview-complete.png) ## Plan Structure [#plan-structure] ![The Plan tab showing the project title and description, an interview summary, and the Pages section with page cards and their sections](/images/project-plan.png) A plan includes three parts: ### Pages [#pages] Each page has: * **Title** — the page name (e.g., "Home", "About Us") * **Description** — what the page covers and its purpose * **URL** — the route for the page * **Sections** — the building blocks of the page, listed in order You can add, remove, and reorder sections within each page. Click **+ Add** to create additional pages. ### Features [#features] Feature cards describe the key capabilities of the project. Each card has a title and description. You can add, remove, or edit features to match what you're building. ### Theme Guidelines [#theme-guidelines] Design direction for the AI to follow when generating the project — visual tone, color direction, and typography guidance. ### Image Preferences [#image-preferences] Choose the kind of imagery the AI uses across the project: * **Stock photos** — pulls real photos from a stock library * **AI-generated** — generates custom images with an image model (consumes credits) When **AI-generated** is selected, a **Model** picker appears so you can pick the image model. ![The Plan view showing the Images dropdown with Stock photos and AI-generated options, and the Model picker](/images/plan-image-preferences.png) ## Editing the Plan [#editing-the-plan] Every part of the plan is directly editable. Click any title or description to rewrite it. Use the arrow buttons to reorder sections, and the delete button to remove items you don't need. You can also use the **Chat** to ask the AI for changes. The prompt box shows "Ask for plan changes or edit it yourself" while in plan mode. For example, ask the AI to add a new page, restructure sections, or change the design direction. ## Adjusting the Project Mid-Plan [#adjusting-the-project-mid-plan] While Plan mode is open, the **left sidebar** stays accessible so you can adjust the project around the plan. Switch to the **Integrations panel** to enable MCPs, the **Files panel** to upload files, or the **Canvas panel** to gather research and design exploration alongside your plan. Panels that don't apply during plan editing are disabled. ## Validation [#validation] The plan is validated before building. If there are errors — such as missing descriptions or invalid configurations — they are highlighted by section so you can find and fix them. The **Build** button is disabled until all errors are resolved. ## Building [#building] When the plan looks right, click **Build** to generate the project. The AI uses the plan as a specification, creating pages, components, and styling that match what you defined. ## Related Articles [#related-articles] * [Starting a Project](/docs/building-with-dazl/ideate-and-plan/starting-a-project) – all the ways to begin a new project * [Writing Documents](/docs/building-with-dazl/ideate-and-plan/writing-documents) – guide the AI with structured specifications * [Chat](/docs/feature-reference/chat) – the AI conversation panel # Publishing (/docs/feature-reference/publishing) The **Publish** button in the top-right corner of the editor gives your project a permanent, publicly accessible URL on `dazl.live`. Unlike the preview URL (which requires the project's server to be running), a published URL stays available independently of your editing session. ## Publishing a Project [#publishing-a-project] Click **Publish** in the top bar to open the Publish dialog. ![The Publish dialog showing the project is not yet published](/images/publish-dialog-unpublished.png) Click **Publish** in the dialog to start the build. Dazl builds and publishes your project, which takes a few seconds. Once complete, the dialog shows the live URL and a **Live** badge. The published URL follows the pattern `project-name-XXXX.dazl.live`. You can click the URL to open it in a new tab, or use the copy button to share it. ## Updating a Published Project [#updating-a-published-project] After making changes in the editor, open the Publish dialog and click **Update** to push the latest version to your live URL. The same URL stays active — anyone with the link sees the updated version after the build completes. ## Unpublishing [#unpublishing] To unpublish your project, open the Publish dialog, click the **three-dot menu** next to the URL, and select **Unpublish**. The live URL is deactivated and visitors can no longer access the published version. You can publish it again at any time. ![The Publish dialog showing the live URL, Update button, and three-dot menu with the Unpublish option](/images/publish-dialog-published.png) ## Custom Domains [#custom-domains] For a more polished presentation URL, publish your project first, then click **Connect Custom Domain** in the Publish dialog. This opens a guided setup powered by Entri that walks you through configuring your domain's DNS settings, no developer needed. ![The Connect Custom Domain modal showing the Entri domain configuration flow](/images/publish-connect-domain-modal.png) Custom domains are a [Pro feature](/docs/getting-started/upgrading-to-pro). ## What Gets Published [#what-gets-published] Publishing serves the same application you see in the editor — the same code, the same behavior. It is not a simplified or stripped-down version. Dev routes are excluded from the published version. Pages marked as development-only (admin panels, data management interfaces) don't appear in the published project. See [Pages and Routing](/docs/feature-reference/pages-and-routing) for more on dev routes. ## Related Articles [#related-articles] * [Publishing and Sharing](/docs/building-with-dazl/handoff-and-validation/publishing-and-sharing) – sharing previews vs. publishing for stakeholder demos * [Pages and Routing](/docs/feature-reference/pages-and-routing) – dev routes and dynamic pages * [Handing Off to Developers](/docs/building-with-dazl/handoff-and-validation/handing-off-to-developers) – going beyond sharing to production handoff # Search (/docs/feature-reference/search) When you're looking for a specific string across a project, the **Search panel** is faster than browsing the file tree. Type a query and matches appear grouped by file. ![The Search panel showing search results grouped by file](/images/search-panel.png) ## Search Options [#search-options] Three toggle buttons next to the search box control how matching works: * **Match Case** – toggle case-sensitive search * **Match Whole Word** – match complete words only * **Use Regular Expression** – use regex for pattern matching ## Results [#results] A summary line shows the total number of results and files matched (e.g., "6 results in 5 files"). Results are grouped by filename, with each file showing a match count. Expand a file group to see individual matches with line and column numbers and a preview of the matching line. Click any result to open the file in the code editor at that line. ## Related Articles [#related-articles] * [Files](/docs/feature-reference/files) – browse the file tree * [Working with Code](/docs/building-with-dazl/iterate-and-collaborate/working-with-code) – editing code directly # Skills & Rules (/docs/feature-reference/skills-and-rules) The **Skills & Rules panel** is where you control how the AI behaves in your project. It holds two kinds of files: prompts that define general agent behavior, and skills that focus the AI on a specific topic when relevant.
![The Skills & Rules panel showing the collapsed Prompts and Skills sections](/images/skills-rules-panel.png)
## Prompts [#prompts] Prompts live in the project's `Prompts/` folder and ship with every new project. They cover broad agent behavior — coding conventions, design tokens, component structure, routing patterns, content generation, and similar guidance that applies across most tasks. The AI reads these prompts as part of its system context, so changes here affect every subsequent generation in the project. Edit them when you want to adjust how the AI works across the board. Click a prompt in the panel to open it in the editor. The editor is a WYSIWYG markdown editor — the same one used for documents. ## Skills [#skills] Skills give the AI specialized expertise on demand. A skill can hold writing style, accessibility rules, domain terminology, step-by-step workflows, or any reusable instructions you'd otherwise repeat across prompts. Unlike prompts (which apply to all work) or documents (which describe what you're building), a skill focuses the AI on a single topic or task and is loaded only when relevant. See the [Skills Library](/docs/additional-resources/skills-library) for ready-made skills you can download and add to your project. ### Creating a Skill [#creating-a-skill] Click **Add** at the top of the panel and select **Skill**. A new skill opens in the editor with two settings fields and a content area. To bring in a skill written elsewhere, click the **Upload skill files** button in the **Skills** section header and select one or more markdown files. The skill's name and description are read from the file. ### Editing a Skill [#editing-a-skill] Click a skill in the panel to open it as a tab in the **Center area**. The skill editor has three parts: * **Name** — a short identifier for the skill (used as the file name) * **Description** — a one-line summary of what the skill covers. The AI reads this to decide when the skill is relevant. * **Content area** — a WYSIWYG markdown editor where you write the skill's instructions, guidelines, or reference material
![The skill editor showing the Name and Description fields above the WYSIWYG content area](/images/skill-editor.png)
### Managing Skills [#managing-skills] Each skill in the **Skills** section has controls to attach it to chat context, view its source file, or delete it. ## Using Prompts and Skills as Context [#using-prompts-and-skills-as-context] Each file in the panel has an **Attach to Chat Context** button. Click it to attach the file to the current chat conversation, giving the AI direct access to its contents on the next prompt. You can also drag any file from the panel into the chat input. Skills are also loaded automatically when their description matches what you're asking the AI to do. ## Related Articles [#related-articles] * [Skills Library](/docs/additional-resources/skills-library) — ready-made skills to download and add to your project * [Documents](/docs/feature-reference/documents) — markdown documents and templates that describe what you're building * [Chat-Driven Editing](/docs/building-with-dazl/design-and-refine/chat-driven-editing) — how the AI uses context when making changes * [Writing Documents](/docs/building-with-dazl/ideate-and-plan/writing-documents) — guide to writing effective documents # The Editor Layout (/docs/feature-reference/the-editor-layout) The **Editor** is where you actually build, edit, and inspect a Dazl project. It opens whenever you click a project from the Dashboard. Most articles in this section dig into a specific panel or tab; this one is a map of the whole layout. ![The full Editor workspace showing the left sidebar, center area with preview, and top bar](/images/editor-layout.png) ## Three-Column Layout [#three-column-layout] | Area | Description | | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Left sidebar** | Tab icons along the edge, with the active panel's content beside them. 14 tabs, some pinned by default and others available through the **Organize panels** menu. | | **Center area** | A tabbed container holding the Preview, code editor tabs, and document editor tabs. | | **Inspect** (optional) | Opens on the right when you click **Inspect** in the top bar. Shows Style and Props tabs. | ## Top Bar [#top-bar] The top bar spans the full width of the editor: | Element | Location | Description | | ------------------------- | ---------------- | -------------------------------------------------------------------------------------------------------------------- | | **Project menu** | Top-left | App icon + project name + chevron. Opens the application menu. | | **Edit / Preview toggle** | Top-center-left | Segmented control to switch between selecting elements for editing and interacting with the live app. | | **Pages dropdown** | Top-center | Navigate between pages and routes in your project. | | **Components** | Top-center | Opens the [Component page](/docs/feature-reference/component-page) — a live gallery of your project's design system. | | **URL bar** | Top-center | Shows a simplified version of the current URL. Click to focus and see the full URL. | | **Reload** | Top-center-right | Refreshes the preview. | | **Responsive buttons** | Top-center-right | Resize the viewport. | | **Online members** | Top-right | Shows avatars of collaborators currently connected to the project. Click to see the full list. | | **Share** | Top-right | Opens the Share dialog to [invite collaborators](/docs/feature-reference/collaboration) by email. | | **GitHub** | Top-right | Connect your project to a GitHub repo. Push and pull commits without leaving the editor. | | **Comments** | Top-right | Opens the [Comments panel](/docs/feature-reference/comments) for leaving feedback. | | **Inspect** | Top-right | Toggles the Inspect panel on the right side. | | **Publish** | Top-right | Opens the Publish dialog. | ## Left Sidebar Tabs [#left-sidebar-tabs] 14 tabs in total. Pinned tabs appear in the sidebar rail, each showing its icon and title. Click a tab to switch panels.
![The left sidebar expanded to show each tab's title next to its icon, from Chat down to Canvas](/images/sidebar-expanded.png)
Use the collapse button at the bottom of the rail to switch to a compact, icons-only view, and expand it again to bring the titles back. Dazl remembers your choice. **Pinned by default:** Chat, Add, History, Elements, Documents, Skills & Rules, Integrations, Theme, Files, Canvas **Unpinned by default:** AI Buttons, Search, Logs, Keys ### Organizing Panels [#organizing-panels] Click the ellipsis icon at the bottom of the tab rail to open the **Organize panels** menu. From here you can pin or unpin any tab, and drag to reorder them.
![The Organize panels menu showing all 12 tabs with pin and unpin controls](/images/organize-panels-menu.png)
## Center Area Tabs [#center-area-tabs] The center area uses a **dynamic-until-pinned** tabbing system (similar to VS Code): * The **Preview** tab is always available * Opening a file or document creates a new tab * Unpinned tabs (shown in *italic*) are replaced when you open something else * **Double-click** a tab, start typing, or edit its content to pin it (shown in normal text) ### Split-Screen View [#split-screen-view] Open a code or document tab alongside the Preview to work in a split-screen layout. The Preview stays on the left while the code editor appears on the right, so you can see changes reflected in real time as you read or edit the source. ![The Editor in split-screen view with the Preview on the left and the code editor on the right](/images/split-screen-view.png) ## Application Menu [#application-menu] Click the **project name** in the top-left corner to open the application menu: ![The application menu showing Back to Projects, account info, Save as Template, Download Project, Appearance, Settings, Keyboard Shortcuts, and Contact Us](/images/application-menu.png) * **Back to Projects** — return to the Dashboard * **Account section** — plan, email, balance, Upgrade, Manage Billing * **Save as Template** — save the project as a reusable starting point * **Download Project** — download the source code * **Appearance** — Light / Dark / System theme for the editor UI * **Settings** — project settings * **Keyboard Shortcuts** — open the keyboard shortcuts reference (also available via **Shift+?**) * **Contact Us** — support link The Appearance setting controls the Dazl editor's theme. Your project's theme can be configured separately in the **Theme panel**, which can override the editor's appearance setting. ## On Mobile [#on-mobile] The editor's full set of panels is available on mobile, not just on desktop. You can switch panels, chat with the AI, draft a document, or review a project from a phone, which makes it easy to capture a quick idea or pick up where you left off while away from your desk. ## Related Articles [#related-articles] * [Your First Project](/docs/getting-started/your-first-project) – guided tour of the editor * [Chat](/docs/feature-reference/chat) – the AI conversation panel * [AI Buttons](/docs/feature-reference/ai-buttons) – save reusable AI prompts as buttons * [Inspect](/docs/feature-reference/inspect-panel) – the Style and Props inspector # Theme (/docs/feature-reference/theme) The Theme panel manages your project's design system: color tokens, typography scales, shadow tokens, and radius tokens that apply consistently across every component. It has four tabs: **Color**, **Typography**, **Shadow**, and **Radius**. ![The Theme panel showing color groups and the System/Light/Dark toggle](/images/theme-colors.png) ## Color [#color] The Color tab organizes colors into semantic groups. A typical project includes groups like: * **Neutral** – backgrounds, text, borders * **Accent** – brand color, interactive elements, highlights * **Error** – error states, destructive actions * **Success** – confirmation, positive states * **Warm** – warm accent tones * **Warning** – caution states Your project may have fewer groups, more groups, or different names depending on what the AI generates. A search box at the top lets you filter color groups by name. Below it, the **System / Light / Dark** toggle previews your colors in different modes. If your project only supports one color scheme, a callout suggests adding the other — the AI can generate the missing theme for you.
![The Theme panel showing the light and dark mode suggestion callout with Dismiss and Ask AI buttons](/images/theme-light-dark-suggestion.png)
### Color Scales [#color-scales] Click any group to expand it and see 12 graded colors plus a Contrast swatch (a white or black that pairs well with the group's colors). Each step maps to a CSS custom property named after the base color. For example, an accent group based on blue uses `--blue-1` through `--blue-12` plus `--blue-contrast`. Lighter steps (1–4) are typically used for backgrounds, mid steps (5–8) for borders and secondary elements, and darker steps (9–12) for text and primary elements. The Contrast swatch is designed to look good against color 9, the highest chroma color in the palette, useful for text on buttons and other high-contrast surfaces. ### Changing Brand Colors [#changing-brand-colors] Click the controls icon next to a color group name to open a popup with a grid of base colors. Pick one and Dazl regenerates the entire 12-step scale automatically, keeping the relationships between shades consistent. ![The Accent color group expanded with the base color picker popup open, showing a grid of available color families](/images/color-picker.png) ## Typography [#typography] The Typography tab shows six type scales: * **Display** – large, prominent text (hero headlines) * **Heading** – section headings * **Subheading** – secondary headings * **Body** – paragraph text * **Caption** – small labels and metadata * **Code** – monospace text for code snippets Each scale shows a live preview of the font at its configured size and weight. Click any scale to expand it and adjust its properties: **Font Family**, **Font Size**, **Font Weight**, **Line Height**, and **Italicize**. Changes apply everywhere that scale is used across the project. Font family values are design tokens — changing the font family on a scale updates every component that references it. This keeps typography consistent across your project without editing individual elements.
![The Theme panel Typography tab with the Display scale expanded, showing visual controllers for font family, size, weight, line height, and italicize](/images/theme-typography-controls.png)
## Shadow [#shadow] The Shadow tab lists your project's global shadow tokens with their CSS box-shadow values (e.g., `Shadow Sm`, `Shadow Md`, `Shadow Lg`, `Shadow Card`). Tokens are generated to match your project; the AI may add or rename them depending on what your design calls for. Click a token to expand it. The expanded view shows a preview card rendered with the current value and an editable input for changing the shadow. Edits apply everywhere the token is referenced.
![The Theme panel Shadow tab with Shadow Lg expanded between collapsed Shadow Sm and Shadow Md tokens above and a Shadow Card token below, showing a preview card rendered with the shadow and an editable box-shadow value field](/images/theme-shadow-expanded.png)
The `` icon next to a token name jumps to the source code that defines the token, so you can edit it directly or see how it's wired up. ## Radius [#radius] The Radius tab lists your project's global border-radius tokens with their CSS length values (e.g., `Radius Sm`, `Radius Md`, `Radius Lg`, `Radius Full`). Tokens are generated to match your project; the AI may add or rename them depending on what your design calls for. Click a token to expand it. The expanded view shows a preview of a rounded square rendered with the current value and an editable input for changing the radius. Edits apply everywhere the token is referenced.
![The Theme panel Radius tab with Radius Md expanded between a collapsed Radius Sm token above and Radius Lg, Xl, and Full tokens below, showing a preview square rendered with the radius and an editable value field](/images/theme-radius-expanded.png)
The `` icon next to a token name jumps to the source code that defines the token. ## Related Articles [#related-articles] * [Working with the Theme](/docs/building-with-dazl/design-and-refine/working-with-the-theme) – guide to customizing colors and typography * [The Action Bar](/docs/building-with-dazl/design-and-refine/the-action-bar) – using theme tokens in the Action Bar color pickers # Visual Editing (/docs/feature-reference/visual-editing) Visual editing lets you change layout, styling, and content directly on the live preview by pointing, clicking, and dragging. It's free of credit cost and the result lands in the same source code the AI edits. ![Edit mode with an element selected showing blue outline, breadcrumb label, and resize handles](/images/edit-mode-selected.png) ## Edit Mode [#edit-mode] ![The Edit / Preview toggle in the top bar](/images/edit-preview-toggle.png) In Edit mode, clicking selects elements for editing. A selected element shows: * **Blue outline** with drag handles at corners and edges * **Green outline** around the parent component * **Breadcrumb label** showing the component name (e.g., "HomeHero...") * **Arrow** to drill into the component's inner scope Double-click to drill into a component, or hold **Cmd** (Mac) / **Ctrl** (Windows) and click to select any deeply nested element directly. Whatever you select is sent to the AI as context. Hold **Alt** and hover over another element to see pixel distances between the selected element and the hovered one. Distance lines with labels appear as an overlay. ![The distance measurement overlay showing pixel distances between a selected element and a hovered element](/images/distance-measurement.png) **Direct editing:** * **Text** — double-click any text element to edit it inline * **Reference text** — text rendered from variables, props, or other code references (shown as `{title}` and similar tokens) can also be edited inline. The change is sent to the AI as a prompt to rewrite the underlying code. * **Images** — double-click any image to open the Media panel * **Icons** — double-click any SVG icon to browse the project's icon library (Lucide or Tabler) for a replacement * **Drag** — click and drag a selected element to reorder it, move it into sibling containers within the same scope, or reposition it on the page. You can also drag images, icons, and HTML elements from the [Add Panel](/docs/feature-reference/add-panel) onto the preview to place them into components. Every visual change is immediately written to the source code. When you edit in a mobile viewport (using the **Responsive buttons** in the top bar), changes are applied through a CSS media query so they only affect the mobile layout. ### Quick Insert Buttons [#quick-insert-buttons] When you select a component, **quick insert buttons** appear above and below it on the stage. Click one to open the element picker, where you can search or browse categorized HTML elements (headings, images, forms, containers, and more) alongside add-ons. The AI generates the chosen element based on the surrounding context and inserts it at that position. ![The quick insert panel showing an "Add anything" search box and categorized element options](/images/quick-insert-panel.png) ## The Action Bar [#the-action-bar] The Action Bar appears below the top bar when an element is selected and Edit mode is active. Click any control to expand its panel. Changes take effect immediately and are written directly to the source code. ![The Action Bar with a button element selected, showing the full row of controls](/images/action-bar.png) Some controls are disabled when they don't apply to the selected element. For example, **Media** is only active when an image is selected. ### File Breadcrumb and Component Name [#file-breadcrumb-and-component-name] The left side of the toolbar shows the **file breadcrumb** (e.g., `home.tsx`) and the **component name** (e.g., `HomeHeroBlock`). This tells you exactly which file and component the selected element belongs to. ### Element States [#element-states] Toggle pseudo-states to style how an element looks when a user interacts with it: * **Hover** — when the cursor is over the element * **Active** — while the element is being clicked * **Focus** — when the element has keyboard focus * **Focus visible** — keyboard focus with a visible indicator * **Focus within** — when a child element has focus ![The Element states menu showing Hover, Active, Focus, Focus visible, and Focus within checkboxes](/images/toolbar-element-states.png) You can enable multiple states at once to preview combined interactions. ### Size and Position [#size-and-position] Set explicit dimensions and positioning for the selected element. ![The Size and position panel with fields for Width, Height, Min/Max dimensions, Position, Top/Right/Bottom/Left offsets, and Z-Index](/images/toolbar-size-position.png) * **Width / Height** — set exact values or leave as `auto` * **Min / Max Width and Height** — constrain how the element scales * **Position** — set the CSS position (e.g., `relative`, `absolute`, `fixed`) * **Top / Right / Bottom / Left** — offset values when using positioned layout * **Z-Index** — control stacking order ### Layout [#layout] Choose a layout mode for container elements. The **Presets** tab offers common patterns, while the **Custom** tab gives you full control over flexbox and grid properties. ![The Layout panel showing Presets tab with Box, Horizontal Stack, Vertical Stack, 2x2 Grid, 3x3 Grid, and None options](/images/toolbar-layout.png) Available presets: * **Box** — a basic container * **Horizontal Stack** — flex row * **Vertical Stack** — flex column * **2x2 Grid** / **3x3 Grid** — CSS grid layouts * **None** — remove layout ### Margin [#margin] Control the outer spacing around the selected element. The visual editor shows four fields arranged around a cross — top, right, bottom, left — so you can see which side you're adjusting. You can edit each side independently, or use the triggers inside the controller to edit in pairs (top and bottom, right and left) or all four sides at once. ![The Margin panel with four directional input fields arranged around a center cross](/images/toolbar-margin.png) You can also adjust margins directly on the canvas. When you hover over the outer edge of a selected element's selection frame, orange drag handles appear that let you change the margin by dragging. A tooltip displays the original source value (e.g., `2rem` or `--space-5`) as you drag, rather than the computed pixel value. Hold **Alt** while dragging to edit opposite sides together, or **Shift** to edit all four sides at once. A tooltip at the top of the viewport shows the available modifier keys when you start dragging. Vertical margin handles don't appear on inline elements, where top and bottom margins have no effect. ![A selected element showing an orange margin handle on the left edge with a 24px tooltip](/images/margin-padding-handles.png) ### Padding [#padding] Control the inner spacing inside the selected element. Same layout as Margin — four directional fields around a center point, with the same options to edit sides independently, in pairs, or all at once. ![The Padding panel with four directional input fields arranged around a center cross](/images/toolbar-padding.png) Padding can also be adjusted directly on the canvas using green drag handles that appear when hovering over the inner edges of the selection frame. The same modifier keys apply: hold **Alt** for opposite sides, **Shift** for all sides. ### Typography [#typography] A comprehensive set of text controls. The dropdown at the top lets you pick from **font presets** defined in your theme, which keeps typography consistent with your design system. ![The Typography panel showing font family, size, weight, line height, italicize, letter spacing, alignment, decoration, and case controls](/images/toolbar-typography.png) * **Select font** — choose from theme font presets * **Font Family** — the CSS font-family value. The dropdown includes **Google Fonts** (Figtree, Sora, Roboto, Inter, Montserrat, and many more) alongside your theme's generic font stacks, so you can browse and apply web fonts directly. ![The Font Family dropdown showing Google Fonts like Figtree, Sora, and Roboto alongside theme font stacks](/images/toolbar-typography-google-fonts.png) * **Font Size / Font Weight** — size and boldness * **Line Height** — spacing between lines * **Italicize** — toggle italic style * **Letter Spacing** — tracking between characters * **Alignment** — left, center, right, or justify * **Decoration** — underline, strikethrough, or overline * **Case** — uppercase, lowercase, capitalize, or normal ### Text Color [#text-color] Pick a text color using one of three tabs: ![The Text Color picker showing the Theme tab with semantic token colors like Neutral 12 (Slate 12) and Accent colors](/images/toolbar-text-color.png) * **Theme** — your project's semantic design tokens, organized by group (Neutral, Accent, Error, Success, Warm, Warning). Each group shows 12 graded colors plus a 13th Contrast swatch — a white or black that looks good against the group's colors. The current color is indicated with a checkmark. Using token colors keeps your project visually consistent and responsive to theme changes. ![The Palette tab showing a broad grid of color families like Gray, Slate, Red, Blue, Green, each with a 12-step swatch row](/images/toolbar-text-color-palette.png) * **Palette** — a broader color palette with every available color family (Gray, Mauve, Slate, Tomato, Red, Blue, Green, and many more). Each family shows 12 graded colors plus a Contrast swatch as a row, making it easy to explore colors outside your theme tokens. ![The Custom tab with a color picker, hue and opacity sliders, a format dropdown (CSS, HEX, RGB, HSL), and a value input field](/images/toolbar-text-color-custom.png) * **Custom** — a freeform color picker with a saturation/lightness gradient area, hue slider, opacity slider, format dropdown (CSS, HEX, RGB, HSL), and a value input field. An eyedropper tool lets you sample colors from anywhere on screen. ### Background [#background] Set a background color or gradient. The first three tabs work the same as **Text Color**, with an additional **Gradient** tab. ![The Background picker showing the Theme tab with semantic token colors and an additional Gradient tab](/images/toolbar-background.png) Four tabs: * **Theme** — semantic token colors (same as Text Color) * **Palette** — broader color palette (same as Text Color) * **Custom** — freeform color picker (same as Text Color) * **Gradient** — describe a gradient in natural language (e.g., "mint to dark blue", "warm sunrise", "vibrant pattern") and the AI generates it. This uses credits. ![The Gradient tab with a prompt field for describing the gradient and a Generate button](/images/toolbar-background-gradient.png) ### Border [#border] Choose a border style for the selected element. Options include no border, solid, dashed, and dotted lines. When a border style is selected, additional controls appear for width and color. ![The Border panel showing style options: None, solid, dashed, and dotted](/images/toolbar-border.png) ### Corners [#corners] Set the border-radius using your theme's radius scale. This keeps corner rounding consistent across your project. ![The Corners menu showing radius presets from None through Radius 1 (2px) to Radius Round](/images/toolbar-corners.png) The scale ranges from **Radius 1** (2px) for subtle rounding to **Radius Round** for fully circular corners (like avatar images or pill-shaped buttons). ### Shadow [#shadow] Add depth with box shadows. Choose from preset shadow levels or inner shadows. ![The Shadow menu showing Shadow 1–4 presets and Inner Shadow 0–4 presets](/images/toolbar-shadow.png) * **Shadow 1–4** — increasingly prominent outer shadows * **Inner Shadow 0–4** — inset shadows for recessed effects ### Link [#link] Configure where an element links to. The panel has four tabs for different link types: ![The Link panel showing Page, URL, Email, and Phone tabs with a page selector](/images/toolbar-link.png) * **Page** — link to another page in your project * **URL** — link to an external URL * **Email** — create a `mailto:` link * **Phone** — create a `tel:` link ### Media [#media] The **Media** control activates when you select an image element. It opens the Media panel where you can browse, replace, upload, and generate images. ![The Media panel showing Project Media and URL tabs, with Upload and Generate buttons and project image thumbnails](/images/toolbar-media.png) The panel has two tabs: * **Project Media** — shows all images currently in your project. Click any thumbnail to use it. You can also **Upload** a new image from your computer or **Generate** a new one with AI (see below). * **URL** — enter a URL to use an externally hosted image (from a CDN, design tool, or any public URL) Clicking **Generate** opens a modal where you describe the image you want. You can choose the AI model, style, and aspect ratio. Generated images are auto-saved to your project. ![The Generate an image modal with a prompt field, model selector, style, aspect ratio, and remove background options, plus a preview area](/images/media-generate-modal.png) Double-clicking an image in the preview also opens the Media panel directly. See [Media](/docs/feature-reference/media) for the full feature reference. ### SVG Element [#svg-element] The **SVG Element** control appears when you select an SVG element (such as an icon). It replaces the Media control in the toolbar. Double-clicking an SVG element in the preview also opens this panel directly. The panel lets you browse the project's icon library and replace the selected icon with a different one. Dazl auto-detects whether the project uses Lucide or Tabler and shows icons from that library. ![The SVG Element panel showing an icon library with a grid of icons and a filter search field](/images/toolbar-svg-element.png) ### Properties [#properties] The **Properties** panel shows the React component props for the selected element. This is available when you've drilled into a component's inner scope and selected an element that has configurable props. ![The Properties panel showing component props like id with an Advanced Properties link](/images/toolbar-properties.png) The **Advanced Properties** link opens a more detailed view for complex prop configurations. ## Related Articles [#related-articles] * [Visual Editing](/docs/building-with-dazl/design-and-refine/visual-editing) – guide to visual editing workflows * [Styling Element States](/docs/building-with-dazl/design-and-refine/styling-element-states) – editing hover, focus, and active states * [Working with the Theme](/docs/building-with-dazl/design-and-refine/working-with-the-theme) – customize colors and typography at the project level * [Media](/docs/feature-reference/media) – full reference for the Media panel # Creating Your Account (/docs/getting-started/creating-your-account) A Dazl account unlocks the **Dashboard**, where you create projects and pick up your past work. The Free plan is enough to try the platform end-to-end without committing to a paid subscription. ![The sign-up dialog with Google and email options](/images/sign-up-dialog.png) ## Signing Up [#signing-up] 1. Go to [dazl.dev](https://dazl.dev) ![The Dazl landing page showing the hero headline, prompt box, and Sign up button in the top-right corner](/images/landing-page.png) 2. Click **Sign up** in the top-right corner 3. Choose **Continue with Google** or enter an email address and password, then click **Create account** 4. If you signed up with email, check your inbox for a confirmation code and enter it on the verification screen ![The email verification dialog asking for a confirmation code](/images/email-confirmation-dialog.png) Once you're signed in, you'll land on the **Dashboard**, your home base for creating and managing projects. ## Logging In [#logging-in] If you already have an account, click **Log in** on [dazl.dev](https://dazl.dev) and choose **Continue with Google** or **Log in with your email**. ![The log-in dialog showing Continue with Google and Log in with email options](/images/log-in-dialog.png) ## The Free Plan [#the-free-plan] Every new account starts on the **Free** plan with 5 credits per day (up to 150/month). Your current balance is visible in the user menu on the Dashboard and in the **Project menu** inside the editor. Credits are consumed when the AI generates or modifies code in your projects. Visual editing, inspecting, and browsing your projects don't use credits. Lighter AI models like Claude 4.5 Haiku and Gemini 3 Flash use fewer credits per interaction. You can switch models anytime using the **Model selector** in the Chat panel. ## Managing Your Account [#managing-your-account] Click your **avatar** in the top-right corner of the Dashboard to access: * Your current plan and email * **Balance** — your remaining credits * **Upgrade** — move to a Pro plan for more credits and features * **Manage Billing** — update payment methods and view invoices * **Sign Out** — log out of your account ## Related Articles [#related-articles] * [The Dashboard](/docs/getting-started/the-dashboard) – tour the main screen and your projects * [Upgrading to Pro](/docs/getting-started/upgrading-to-pro) – learn about Pro plan benefits * [Your First Project](/docs/getting-started/your-first-project) – create your first interactive prototype # The Dashboard (/docs/getting-started/the-dashboard) The **Dashboard** is your home base in Dazl. Every session starts here — it's where you launch new projects from a prompt and pick up the ones already in progress. ![The Dashboard prompt box with attachment, enhance prompt, model selector, plan toggle, and voice input controls](/images/dashboard-prompt-box.png) ## Creating a New Project [#creating-a-new-project] At the top of the Dashboard, you'll find the prompt box. Type a description of what you want to build and press Enter or click **Send**. Dazl generates a working project based on your description. You can also attach files or images using the **attachment button** (paperclip icon) as design inspiration or as assets to be used in the project itself. The **enhance prompt** button (sparkle icon) lets the AI expand a short prompt into a more detailed specification before generating. Use the **Model selector** to choose which AI model generates the project. Only top-tier models are available on the Dashboard — Claude 4.6 Sonnet (default), Claude 4.8 Opus, and Gemini 3.1 Pro. The full model list is available later in the [Chat panel](/docs/feature-reference/chat). Enable the **Plan** toggle to review and edit a structured project plan before the AI generates code. See [Starting a Project](/docs/building-with-dazl/ideate-and-plan/starting-a-project) for details. For a full reference of every Dashboard control, see [Dashboard](/docs/feature-reference/dashboard). For other ways to start a project, like from a screenshot or written specs, see [Starting a Project](/docs/building-with-dazl/ideate-and-plan/starting-a-project). ## Templates [#templates] Once you've saved a project as a template (via **Project menu > Save as Template** inside the editor), a **Templates** section appears on the Dashboard between the prompt box and your projects. Click any template to create a new project from it. ![The Dashboard showing the prompt box and the Templates section](/images/dashboard-templates.png) The Templates section only appears after you've created your first template. ## My Projects [#my-projects] The **My Projects** section displays all your existing projects as a grid of cards. ![The My Projects grid showing project cards with Published badges and Running indicators](/images/dashboard-my-projects.png) Each project card shows: * **Preview thumbnail** — a screenshot of the project's home page * **Project name** — click the card to open it in the editor * **Timestamp** — when you last opened the project (e.g., "Opened last week") * **Published badge** — a green "Published" label if the project has been published * **Running status** — a green "Running" indicator if the project's server is active * **Team member avatars** — profile pictures of collaborators on the project * **Options menu** — the three-dot button on each card for additional actions ### Searching and Sorting [#searching-and-sorting] Use the **Search projects** text field above the grid to filter projects by name. The **Sort by Recent** dropdown lets you change how projects are ordered. ## Concurrent Projects [#concurrent-projects] You can run up to 3 projects at the same time. If you try to open a 4th, Dazl prompts you to choose which running project to close before continuing. ![The Maximum Opened Projects Reached dialog listing currently running projects with Close buttons and a Close All option](/images/max-open-projects-dialog.png) ## User Menu [#user-menu] Click your **avatar** in the top-right corner to open the user menu, which shows: * Your current plan (e.g., "Free Product") and email * **Balance** — remaining credits * **Upgrade** — link to the pricing page * **Manage Billing** — payment and invoice management * **Contact Us** — reach the Dazl team * **Sign Out** — log out ## Related Articles [#related-articles] * [Your First Project](/docs/getting-started/your-first-project) – walk through creating and editing your first project * [Starting a Project](/docs/building-with-dazl/ideate-and-plan/starting-a-project) – all the ways to begin a new project # Upgrading to Pro (/docs/getting-started/upgrading-to-pro) The Free plan is enough to try Dazl on a small project, but credit caps, limited concurrent projects, and no team features make it limiting for ongoing team work. Pro raises those limits and adds collaboration, custom domains, and more. ![The Pricing page showing Dazl Free, Dazl Pro, and Teams plans](/images/pricing-page.png) ## Plans [#plans] Credits are consumed when the AI generates or modifies code. Visual editing, inspecting, and browsing your projects don't use credits. ### Free [#free] * 5 daily credits (up to 150/month) * Unlimited visual edits * Dedicated virtual server * Community support ### Pro ($25/month) [#pro-25month] * 1,000 monthly credits (additional tiers available) * 5 daily additional free credits * All credits roll over for up to 6 months * Unlimited projects and publishing * Dedicated server per project * Connect your custom domain * Premium support ### Teams [#teams] For organizations that need collaboration tools, group access controls, and onboarding assistance. Contact the Dazl team to request a custom plan. You can check your current balance in the user menu on the Dashboard and in the **Project menu** inside the editor. ## How to Upgrade [#how-to-upgrade] 1. Click your **avatar** in the top-right corner to open the user menu 2. Click **Upgrade** — this takes you to the Pricing page 3. Choose your plan and complete the payment process You can also navigate directly to the Pricing page using the **Pricing** link in the Dashboard's top bar. ![The user menu showing the account section with Balance and Upgrade button](/images/user-menu.png) ## Managing Your Billing [#managing-your-billing] To update payment methods, view invoices, or manage your subscription: 1. Click your **avatar** in the top-right corner 2. Click **Manage Billing** This opens the billing management portal where you can update your payment details and review your history. ## Cancelling Pro [#cancelling-pro] 1. Go to the **Pricing** page 2. Switch back to the **Free** plan You won't be billed again, and Pro features remain available until the end of your current billing period. ## Stretching Your Credits [#stretching-your-credits] A few ways to get more out of your credits: * **Use lighter models for routine tasks.** Claude 4.5 Haiku and Gemini 3 Flash are fast and cost fewer credits. Save more capable models like Claude 4.8 Opus for complex changes. * **Use visual editing when you can.** Direct edits — changing colors, dragging elements, editing text — don't consume credits at all. * **Be specific in your prompts.** Clear, focused prompts tend to get the right result in fewer iterations than vague ones. * **Write documents.** Well-defined documents in the **Documents panel** help the AI understand your intent upfront, reducing back-and-forth. ## Related Articles [#related-articles] * [Creating Your Account](/docs/getting-started/creating-your-account) – getting started with Dazl * [Chat](/docs/feature-reference/chat) – model selector, credits, and cost trade-offs between models * [The Dashboard](/docs/getting-started/the-dashboard) – navigating the main screen # What is Dazl? (/docs/getting-started/what-is-dazl) Dazl is an AI-powered platform built for product teams. It covers the full arc of a web product, from initial idea to a polished prototype ready for handoff, with all the work happening in a single workspace. ## Where You Work [#where-you-work] Open Dazl and you land on the **Dashboard** — your home base for new and existing projects. ![The Dazl Dashboard showing the prompt box, templates, and My Projects grid](/images/dashboard-overview.png) Click any project to open the **Editor** — your workspace for building, refining, and inspecting the project. The AI sits alongside a live preview, with panels for chat, code, documents, comments, and more. ![The full Editor workspace showing the left sidebar with Chat, center area with preview, and Inspect panel on the right](/images/editor-layout.png) Dazl also works on mobile. The editor's full set of panels is available on a phone, so you can start a quick idea, draft a document, or review a project on the go. See [The Editor Layout](/docs/feature-reference/the-editor-layout#on-mobile) for how it works on smaller screens. ## Built for Product Teams [#built-for-product-teams] Unlike general-purpose AI tools that try to be everything for everyone, Dazl is designed for how professional product teams actually work: collaboratively, iteratively, and with care for the process behind great products. Whether you're a product manager validating a feature idea, a designer exploring interactions in the browser, or working together to align your team around a shared vision, Dazl gives you the environment to do that work with AI integrated into every step. ## The Product Journey [#the-product-journey] Dazl supports your team across four stages of the product workflow: ### Ideate and Plan [#ideate-and-plan] Start from a prompt, a screenshot, or written specs. Create detailed project specifications directly within Dazl using the built-in **Documents panel**, a markdown editor where you define what you're building and how the AI should approach it. For more open-ended work like competitive research, design exploration, or asset libraries, use the **Canvas panel** to lay out and connect typed nodes the AI agent can populate. Save projects as reusable **templates** to create repeatable starting points for experimentation. ### Design and Refine [#design-and-refine] Shape the experience with hands-on **visual editing**: drag elements, change colors, edit text, and tweak hover states without touching the chat or spending credits. Every visual change immediately updates the underlying code, and every code change updates the visual preview. Build to your brand and design systems. Every project includes semantic **design tokens** for colors, typography, and spacing. Define your standards once and they apply across every component. ### Iterate and Collaborate [#iterate-and-collaborate] **Invite your team** to work on the same project in real time. Collaborators can edit, prompt the AI, and inspect changes together — no more passing screenshots or files back and forth. **Inspect** what the AI creates — see the element tree, applied styles, and component properties with full visibility. Everything is displayed in readable source names, not garbled hashes. Review a transparent **diff of every change**, whether made by the AI, visual editing, or drag-and-drop. Use the **History panel** to jump back to any previous revision. ### Handoff and Validation [#handoff-and-validation] **Publish** interactive prototypes to share with stakeholders for demos and validation. Connect to **GitHub** for a production-ready handoff to development teams: real code, not throwaway wireframes. Or export a spec that a developer can implement using their AI agent of choice. ## What Makes Dazl Different [#what-makes-dazl-different] **Real code and real servers.** Every project runs on a real virtual server, not a client-side mock. This enables backend functionality like authentication, database queries, and API integrations. **Two-way editing.** Visual changes update the code. Code changes update the visual preview. They're always in sync. **Transparent AI.** Every change the AI makes is visible — review diffs, browse modified files, and inspect elements just like you would in browser DevTools. The AI isn't a black box; it's a collaborator you can verify. **Context-aware AI.** Select an element on the preview and it's automatically passed as context to the AI. The code analysis engine ensures the AI understands your project's structure, naming conventions, and design system. Dazl respects the multi-step process of product building. AI supports different stages of your workflow, not a shortcut to skip them. ## Who is Dazl For? [#who-is-dazl-for] * **Product managers** validating feature ideas with interactive prototypes instead of static mockups * **Product designers** exploring what the web can actually do — CSS transitions, responsive behaviors, animations — beyond what static design tools allow * **Teams** who want a single source of truth where product decisions, design, and code come together ## Related Articles [#related-articles] * [Creating Your Account](/docs/getting-started/creating-your-account) – sign up and get started * [Your First Project](/docs/getting-started/your-first-project) – create your first interactive prototype * [The Dashboard](/docs/getting-started/the-dashboard) – find your way around the main screen # Your First Project (/docs/getting-started/your-first-project) Following these steps gives you a working interactive prototype and a feel for how Dazl's main parts work together: the **Chat panel**, the live preview, **Edit mode**, and the **Inspect panel**. ## Create a Project [#create-a-project] From the **Dashboard**, type a description of what you want to build in the prompt box. Be as specific or general as you like — you can always refine later. For example: > "Build me an application that's a clone of Uber but uses drones instead of cars and is for pets instead of people" ![The Dashboard prompt box with the attachment and enhance prompt buttons](/images/dashboard-prompt-box.png) Click the **Send** button. Dazl generates a complete project and opens it in the **Editor**. The agent can crawl websites and search the web during generation, so including references or mentioning existing products in your prompt helps it produce better results. If you'd like to review and shape the project structure before generation, enable the **Plan** toggle in the prompt box before sending. Dazl creates an editable plan with pages, features, and theme guidelines that you can refine before clicking **Build**. See [Starting a Project](/docs/building-with-dazl/ideate-and-plan/starting-a-project) for details. ## Explore the Editor [#explore-the-editor] The Editor has three main areas: * **Left sidebar** — tabbed panels for Chat, History, Elements, Documents, and more * **Center area** — your live preview, plus tabs for code and document files * **Top bar** — project menu, **Edit / Preview** toggle, page navigation, and action buttons The **Chat panel** is open by default, showing the conversation that generated your project. The center area shows a live, interactive preview of what was built. ![The Editor showing a freshly generated project with the Chat panel, live preview, and Inspect panel](/images/editor-layout-inspect.png) Try clicking links and interacting with the preview — it's a real running application, not a static mockup. The preview runs on a real virtual server. If your project includes forms, authentication, or API calls, they work as expected. ## Start Editing [#start-editing] At the top of the center area, the **Edit / Preview** toggle controls how you interact with the preview. **Preview** mode is fully interactive — click links, fill out forms, and navigate between pages as a real user would. **Edit** mode lets you select and manipulate elements visually. The editor opens in **Preview mode** by default. Switch to **Edit** using the toggle in the top bar, then click any element in the preview to select it: * A **blue outline** marks the selected element; a **green outline** marks its parent component * The element's name appears as a breadcrumb in the **Action Bar** * **Double-click** a component to drill into its inner elements * Hold **Cmd** (Mac) or **Ctrl** (Windows) and click to select any deeply nested element directly * Your selection is automatically sent to the AI as context in the **Chat panel** ![Edit mode with an element selected, showing the blue outline and breadcrumb label](/images/edit-mode-selected.png) Try these visual editing actions: * **Click** any element to select it * **Double-click** text to edit it directly * **Drag** elements to reposition them * Use the **Action Bar** that appears below the top bar to change colors, typography, spacing, and more Every visual change you make is immediately reflected in the source code — no AI call needed, no credits consumed. ## Ask the AI to Make Changes [#ask-the-ai-to-make-changes] Switch back to the **Chat panel** in the left sidebar. With an element selected on the preview, you'll see it appear as a chip above the prompt box (e.g., `HomeHeroBlock.homeheroblock`), giving the AI context about what you're working on. Type a request in the prompt box: > "Change the hero headline to 'Fresh Meals, Delivered by Drone' and make the call-to-action button use the accent color" The AI makes the changes and shows you exactly what files were modified. You can expand the file cards in the chat to see diffs of every change. ![The Chat panel showing an AI response with file edit cards and a files changed summary](/images/chat-file-edit-cards.png) ## Inspect What Was Built [#inspect-what-was-built] Click the **Inspect** button in the top-right corner of the top bar to open the Inspect panel on the right side. With an element selected, the **Style tab** shows every CSS rule affecting it — grouped by source file, editable inline. The **Props tab** shows the React component's properties. This works like browser DevTools, but with readable source names and edits that persist in your project's source code. ![The Inspect panel showing the Style tab with CSS rules for a selected element](/images/inspect-panel-style.png) ## Review History [#review-history] Click the **History** tab in the left sidebar to see a timeline of every change made to your project — AI-generated, visual edits, and manual code changes. Each revision has a **View changes** button to see the diff and a **Restore** button to roll back to that point. You always know exactly what changed and when. ![The History panel showing a timeline of revisions grouped by date](/images/history-panel.png) ## What's Next [#whats-next] You've covered the core loop: prompt, preview, edit, chat, inspect, review. From here, you can: * **Invite your team** — click Share in the top bar to collaborate on the project in real time * **Refine your design** — use the Theme panel to adjust colors and typography across the entire project * **Write documents** — define your requirements in the Documents panel to guide the AI more precisely * **Add integrations** — connect Supabase for a database or Figma for design imports * **Share your work** — publish your interactive prototype or connect to GitHub for handoff ## Related Articles [#related-articles] * [Visual Editing](/docs/building-with-dazl/design-and-refine/visual-editing) – deeper dive into Edit mode and visual manipulation * [Chat-Driven Editing](/docs/building-with-dazl/design-and-refine/chat-driven-editing) – how to get the best results from the AI * [The Editor Layout](/docs/feature-reference/the-editor-layout) – full reference for every part of the editor workspace # Dazl Documentation (/docs) Welcome to the Dazl documentation. Here you'll find everything you need to get started, build with confidence, and make the most of every feature. Learn what Dazl is, create your account, and build your first project. Follow the product journey from ideation through design, iteration, and handoff. Detailed guides for every panel, tool, and capability in the editor. Release notes, libraries, and other reference material.