# loaders URL: /api/environment/loaders/ Section: environment -------------------------------------------------------------------------------- loaders - 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 Kida API ReferenceEnvironment ᗢ 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 environment.loaders Template loaders for Kida environment. Loaders provide template source to the Environment. They implement get_source(name) returning (source, filename). Built-in Loaders: FileSystemLoader: Load from filesystem directories DictLoader: Load from in-memory dictionary (testing/embedded) Custom Loaders: Implement the Loader protocol: ```python class DatabaseLoader: def get_source(self, name: str) -> tuple[str, str | None]: row = db.query("SELECT source FROM templates WHERE name = ?", name) if not row: raise TemplateNotFoundError(f"Template '{name}' not found") return row.source, f"db://{name}" def list_templates(self) -> list[str]: return [r.name for r in db.query("SELECT name FROM templates")] ``` Thread-Safety: Loaders should be thread-safe for concurrent get_source() calls. Both built-in loaders are safe (FileSystemLoader reads files atomically, DictLoader uses immutable dict lookup). 2Classes Classes FileSystemLoader 5 ▼ Load templates from filesystem directories. Searches one or more directories for templates by name… Load templates from filesystem directories. Searches one or more directories for templates by name. The first matching file is returned. Supports arbitrary directory structures and file nesting. Methods: get_source(name): Return (source, filename) for template list_templates(): Return sorted list of all template names Search Order: Directories are searched in order. First match wins: python loader = FileSystemLoader(["themes/custom/", "themes/default/"]) # Looks in themes/custom/ first, then themes/default/ Attributes Name Type Description _paths — List of Path objects to search _encoding — File encoding (default: utf-8) Methods get_source 1 tuple[str, str] ▼ Load template source from filesystem. def get_source(self, name: str) -> tuple[str, str] Parameters Name Type Description name — Returns tuple[str, str] list_templates 0 list[str] ▼ List all templates in search paths. def list_templates(self) -> list[str] Returns list[str] Internal Methods 1 ▼ __init__ 2 ▼ def __init__(self, paths: str | Path | list[str | Path], encoding: str = 'utf-8') Parameters Name Type Description paths — encoding — Default: 'utf-8' DictLoader 4 ▼ Load templates from an in-memory dictionary. Maps template names to source strings. Useful for tes… Load templates from an in-memory dictionary. Maps template names to source strings. Useful for testing, embedded templates, or dynamically generated templates. Methods: get_source(name): Return (source, None) for template list_templates(): Return sorted list of template names Testing: >>> loader = DictLoader({"test.html": "{{ x * 2 }}"}) >>> env = Environment(loader=loader) >>> assert env.render("test.html", x=21) == "42" Attributes Name Type Description _mapping — Dict mapping template name → source string Methods get_source 1 tuple[str, None] ▼ def get_source(self, name: str) -> tuple[str, None] Parameters Name Type Description name — Returns tuple[str, None] list_templates 0 list[str] ▼ def list_templates(self) -> list[str] Returns list[str] Internal Methods 1 ▼ __init__ 1 ▼ def __init__(self, mapping: dict[str, str]) Parameters Name Type Description mapping — ← Previous filters Next → protocols 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: 918 - Reading Time: 5 minutes