# variables URL: /api/compiler/statements/variables/ Section: statements -------------------------------------------------------------------------------- variables - Kida window.BENGAL_THEME_DEFAULTS = { appearance: 'light', palette: 'brown-bengal' }; window.Bengal = window.Bengal || {}; window.Bengal.enhanceBaseUrl = '/kida/assets/js/enhancements'; window.Bengal.watchDom = true; window.Bengal.debug = false; window.Bengal.enhanceUrls = { 'toc': '/kida/assets/js/enhancements/toc.632a9783.js', 'docs-nav': '/kida/assets/js/enhancements/docs-nav.57e4b129.js', 'tabs': '/kida/assets/js/enhancements/tabs.aac9e817.js', 'lightbox': '/kida/assets/js/enhancements/lightbox.1ca22aa1.js', 'interactive': '/kida/assets/js/enhancements/interactive.fc077855.js', 'mobile-nav': '/kida/assets/js/enhancements/mobile-nav.d991657f.js', 'action-bar': '/kida/assets/js/enhancements/action-bar.d62417f4.js', 'copy-link': '/kida/assets/js/enhancements/copy-link.7d9a5c29.js', 'data-table': '/kida/assets/js/enhancements/data-table.1f5bc1eb.js', 'lazy-loaders': '/kida/assets/js/enhancements/lazy-loaders.a5c38245.js', 'holo': '/kida/assets/js/enhancements/holo.ee13c841.js', 'link-previews': '/kida/assets/js/enhancements/link-previews.8d906535.js' }; (function () { try { var defaults = window.BENGAL_THEME_DEFAULTS || { appearance: 'system', palette: '' }; var defaultAppearance = defaults.appearance; if (defaultAppearance === 'system') { defaultAppearance = (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) ? 'dark' : 'light'; } var storedTheme = localStorage.getItem('bengal-theme'); var storedPalette = localStorage.getItem('bengal-palette'); var theme = storedTheme ? (storedTheme === 'system' ? defaultAppearance : storedTheme) : defaultAppearance; var palette = storedPalette ?? defaults.palette; document.documentElement.setAttribute('data-theme', theme); if (palette) { document.documentElement.setAttribute('data-palette', palette); } } catch (e) { document.documentElement.setAttribute('data-theme', 'light'); } })(); { "prerender": [ { "where": { "and": [ { "href_matches": "/docs/*" }, { "not": { "selector_matches": "[data-external], [target=_blank], .external" } } ] }, "eagerness": "conservative" } ], "prefetch": [ { "where": { "and": [ { "href_matches": "/*" }, { "not": { "selector_matches": "[data-external], [target=_blank], .external" } } ] }, "eagerness": "conservative" } ] } Skip to main content Magnifying Glass ESC Recent Clear Magnifying Glass No results for "" Start typing to search... ↑↓ Navigate ↵ Open ESC Close Powered by Lunr )彡 DocumentationInfoAboutArrow ClockwiseGet StartedCodeSyntaxTerminalUsageNoteTutorialsStarburstExtendingBookmarkReferenceTroubleshootingReleasesDevGitHubKida API Reference Magnifying Glass Search ⌘K Palette Appearance Chevron Down Mode Monitor System Sun Light Moon Dark Palette Snow Lynx Brown Bengal Silver Bengal Charcoal Bengal Blue Bengal List )彡 Magnifying Glass Search X Close Documentation Caret Down Info About Arrow Clockwise Get Started Code Syntax Terminal Usage Note Tutorials Starburst Extending Bookmark Reference Troubleshooting Releases Dev Caret Down GitHub Kida API Reference Palette Appearance Chevron Down Mode Monitor System Sun Light Moon Dark Palette Snow Lynx Brown Bengal Silver Bengal Charcoal Bengal Blue Bengal Kida API Reference Caret Right Analysis analyzer cache config dependencies landmarks metadata purity roles Caret Right Compiler Caret Right Statements basic control_flow functions special_blocks template_structure variables _protocols coalescing core expressions utils Caret Right Environment core exceptions filters loaders protocols registry tests Caret Right Parser Caret Right Blocks control_flow core functions special_blocks template_structure variables _protocols core errors expressions statements tokens Caret Right Utils html lru_cache workers _types bytecode_cache kida lexer nodes template tstring CompilerStatements ᗢ Caret Down Link Copy URL External Open LLM text Copy Copy LLM text Share with AI Ask Claude Ask ChatGPT Ask Gemini Ask Copilot Module compiler.statements.variables Variable assignment statement compilation for Kida compiler. Provides mixin for compiling variable assignment statements (set, let, export). Uses inline TYPE_CHECKING declarations for host attributes. See: plan/rfc-mixin-protocol-typing.md 1Class Classes VariableAssignmentMixin 6 ▼ Mixin for compiling variable assignment statements. Host attributes and cross-mixin dependencies a… Mixin for compiling variable assignment statements. Host attributes and cross-mixin dependencies are declared via inline TYPE_CHECKING blocks. Methods Internal Methods 6 ▼ _compile_set 1 list[ast.stmt] ▼ Compile {% set %} - block-scoped variable assignment. Variables assigned with … def _compile_set(self, node: Any) -> list[ast.stmt] Compile {% set %} - block-scoped variable assignment. Variables assigned with {% set %} are scoped to the current block (if/for/while/etc.) and are not accessible outside the block. Handles both single names and structural unpacking: {% set x = value %} {% set a, b = 1, 2 %} {% set (a, b), c = ([1, 2], 3) %} Parameters Name Type Description node — Returns list[ast.stmt] _compile_let 1 list[ast.stmt] ▼ Compile {% let %} - template-scoped variable assignment. Variables assigned wi… def _compile_let(self, node: Any) -> list[ast.stmt] Compile {% let %} - template-scoped variable assignment. Variables assigned with {% let %} are available throughout the template. Supports structural unpacking: {% let a, b = 1, 2 %} Parameters Name Type Description node — Returns list[ast.stmt] _compile_export 1 list[ast.stmt] ▼ Compile {% export %} - export variable to outer scope. Variables assigned with… def _compile_export(self, node: Any) -> list[ast.stmt] Compile {% export %} - export variable to outer scope. Variables assigned with {% export %} are promoted from inner scope (e.g., inside a loop) to the outer scope (e.g., outside the loop). Supports structural unpacking: {% export a, b = 1, 2 %} Parameters Name Type Description node — Returns list[ast.stmt] _compile_block_scoped_assignment 2 list[ast.stmt] ▼ Compile block-scoped assignment ({% set %}). Assigns to current scope: _scope_… def _compile_block_scoped_assignment(self, target: Any, value: Any) -> list[ast.stmt] Compile block-scoped assignment ({% set %}). Assigns to current scope: _scope_stack[-1][name] = value If no scope exists (top level), falls back to ctx (template-scoped). Parameters Name Type Description target — value — Returns list[ast.stmt] _compile_export_assignment 2 list[ast.stmt] ▼ Compile export assignment ({% export %}). Export always assigns to ctx (templa… def _compile_export_assignment(self, target: Any, value: Any) -> list[ast.stmt] Compile export assignment ({% export %}). Export always assigns to ctx (template scope) to ensure the variable persists after blocks end. This matches the common use case of promoting values from loops/conditionals to template scope. Parameters Name Type Description target — value — Returns list[ast.stmt] _compile_assignment 2 list[ast.stmt] ▼ Common logic for template-scoped assignments ({% let %}). Handles recursive st… def _compile_assignment(self, target: Any, value: Any) -> list[ast.stmt] Common logic for template-scoped assignments ({% let %}). Handles recursive structural unpacking using ctx dict for all variables. Parameters Name Type Description target — value — Returns list[ast.stmt] ← Previous template_structure List © 2026 Kida built in ᓚᘏᗢ { "linkPreviews": { "enabled": true, "hoverDelay": 200, "hideDelay": 150, "showSection": true, "showReadingTime": true, "showWordCount": true, "showDate": true, "showTags": true, "maxTags": 3, "includeSelectors": [".prose"], "excludeSelectors": ["nav", ".toc", ".breadcrumb", ".pagination", ".card", "[class*='-card']", ".tab-nav", "[class*='-widget']", ".child-items", ".content-tiles"], "allowedHosts": [], "allowedSchemes": ["https"], "hostFailureThreshold": 3 } } window.BENGAL_LAZY_ASSETS = { tabulator: '/kida/assets/js/tabulator.min.js', dataTable: '/kida/assets/js/data-table.js', mermaidToolbar: '/kida/assets/js/mermaid-toolbar.9de5abba.js', mermaidTheme: '/kida/assets/js/mermaid-theme.344822c5.js', graphMinimap: '/kida/assets/js/graph-minimap.ff04e939.js', graphContextual: '/kida/assets/js/graph-contextual.355458ba.js' }; window.BENGAL_ICONS = { close: '/kida/assets/icons/close.911d4fe1.svg', enlarge: '/kida/assets/icons/enlarge.652035e5.svg', copy: '/kida/assets/icons/copy.3d56e945.svg', 'download-svg': '/kida/assets/icons/download.04f07e1b.svg', 'download-png': '/kida/assets/icons/image.c34dfd40.svg', 'zoom-in': '/kida/assets/icons/zoom-in.237b4a83.svg', 'zoom-out': '/kida/assets/icons/zoom-out.38857c77.svg', reset: '/kida/assets/icons/reset.d26dba29.svg' }; Arrow Up -------------------------------------------------------------------------------- Metadata: - Word Count: 959 - Reading Time: 5 minutes