# fragment_target_registry URL: /api/templating/fragment_target_registry/ Section: templating -------------------------------------------------------------------------------- fragment_target_registry - Chirp window.BENGAL_THEME_DEFAULTS = { appearance: 'light', palette: 'charcoal-bengal' }; window.Bengal = window.Bengal || {}; window.Bengal.enhanceBaseUrl = '/chirp/assets/js/enhancements'; window.Bengal.watchDom = true; window.Bengal.debug = false; window.Bengal.enhanceUrls = { 'toc': '/chirp/assets/js/enhancements/toc.736b857e.js', 'docs-nav': '/chirp/assets/js/enhancements/docs-nav.57e4b129.js', 'tabs': '/chirp/assets/js/enhancements/tabs.aac9e817.js', 'lightbox': '/chirp/assets/js/enhancements/lightbox.1ca22aa1.js', 'interactive': '/chirp/assets/js/enhancements/interactive.96c8880c.js', 'mobile-nav': '/chirp/assets/js/enhancements/mobile-nav.d991657f.js', 'action-bar': '/chirp/assets/js/enhancements/action-bar.d62417f4.js', 'copy-link': '/chirp/assets/js/enhancements/copy-link.7d9a5c29.js', 'data-table': '/chirp/assets/js/enhancements/data-table.1f5bc1eb.js', 'lazy-loaders': '/chirp/assets/js/enhancements/lazy-loaders.a5c38245.js', 'holo': '/chirp/assets/js/enhancements/holo.ee13c841.js', 'link-previews': '/chirp/assets/js/enhancements/link-previews.96620bcf.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 ⌁⌁ DocumentationGet StartedCore ConceptsTemplatesGit BranchRoutingMiddlewareStreamingDatabaseDataTestingFile TextReferenceServerDeploymentInfoAboutExamplesGuidesTutorialsReleasesDevGitHubChirp API ReferenceForum 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 Get Started Core Concepts Templates Git Branch Routing Middleware Streaming Database Data Testing File Text Reference Server Deployment Info About Examples Guides Tutorials Releases Dev Caret Down GitHub Chirp API Reference Forum Palette Appearance Chevron Down Mode Monitor System Sun Light Moon Dark Palette Snow Lynx Brown Bengal Silver Bengal Charcoal Bengal Blue Bengal Chirp API Reference Caret Right Internal asgi invoke invoke_plan kwargs_resolve multimap types Caret Right Ai _providers _structured errors llm streaming Caret Right App compiler diagnostics lifecycle registry runtime server state Caret Right Cache Caret Right Backends memory null redis key middleware protocol Caret Right Cli Caret Right Templates full minimal scaffold shell sse v2 _check _makemigrations _new _resolve _routes _run _security_check _templates Caret Right Contracts checker declarations routes rules_accessibility rules_commands rules_forms rules_htmx rules_inline rules_islands rules_layout rules_page_shell rules_route_contract rules_sse rules_swap rules_vary template_scan types utils Caret Right Data Caret Right Drivers postgres sqlite Caret Right Schema diff generate introspect operations parse types _mapping _sqlite database errors migrate query types Caret Right Ext chirp_ui Caret Right Http cookies forms headers query request response sync_request Caret Right I18N catalog detection formatting middleware Caret Right Markdown errors filters renderer Caret Right Middleware _redis_rate_limit allowed_hosts auth auth_rate_limit builtin csp_nonce csrf inject layout_debug protocol security_headers sessions static Caret Right Pages actions context debug discovery Caret Right index bus events stream renderer resolve sections shell_actions shell_context types Caret Right Realtime events sse Caret Right Routing params route router Caret Right Security audit decorators lockout passwords urls Caret Right Server Caret Right Debug editor frames render_plan_snapshot renderers request_context styles template_context alpine debug_page delegation dev dev_browser_reload devtools errors handler handler_kwargs htmx_debug htmx_safe_target islands negotiation negotiation_oob production route_explorer sender speculation_rules sse_lifecycle sync_handler terminal_checks terminal_errors view_transitions Caret Right Templating adapter composition filters fragment_target_registry integration kida_adapter macros oob_registry render_plan returns streaming suspense Caret Right Testing assertions client sse Caret Right Tools events handler registry schema Caret Right Validation result rules chirp config context domains errors extraction health logging plugin resilience shell_actions shell_regions sources Chirp API ReferenceTemplating ᗢ 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 templating.fragment_target_registry App-level fragment target registry for HTMX content-region block selection. Maps target IDs (e.g. page-root) to fragment_block config. When HX-Target matches a registered target, Chirp uses the registry's fragment_block instead of composition.page_block. Apps can group related targets into a page shell contract so app-level layout expectations are explicit and contract-checkable. The registry is mutable during setup and frozen at runtime. 4Classes Classes PageShellTarget 5 ▼ A single target participating in a page shell contract. A single target participating in a page shell contract. Attributes Name Type Description target_id str — fragment_block str — triggers_shell_update bool — required bool — description str — PageShellContract 4 ▼ Named group of fragment targets defining an app shell contract. Named group of fragment targets defining an app shell contract. Attributes Name Type Description name str — targets tuple[PageShellTarget, ...] — description str — Methods required_fragment_blocks 0 frozenset[str] ▼ property def required_fragment_blocks(self) -> frozenset[str] Returns frozenset[str] FragmentTargetConfig 5 ▼ Block config for a single fragment target. **Layers (see UI layers guide):** targets that swap **p… Block config for a single fragment target. Layers (see UI layers guide): targets that swap page content inside #page-content may still set triggers_shell_update so shell regions (topbar shell_actions, title, etc.) refresh via OOB after the primary swap. fragment_block: Block to render when HX-Target matches (e.g. page_root_inner). triggers_shell_update: When True, this swap participates in shell negotiation (e.g. shell_actions OOB). Use False for narrow in-page swaps (e.g. #page-content-inner) that must not refresh the app shell. Attributes Name Type Description fragment_block str — triggers_shell_update bool — contract_name str | None — required bool — description str — FragmentTargetRegistry 11 ▼ App-level registry mapping target IDs to fragment block config. Mutable during setup, frozen at ru… App-level registry mapping target IDs to fragment block config. Mutable during setup, frozen at runtime (same lifecycle as routes). Attributes Name Type Description _targets dict[str, FragmentTargetConfig] — _contracts dict[str, PageShellContract] — _frozen bool — Methods registered_targets 0 frozenset[str] ▼ property def registered_targets(self) -> frozenset[str] Returns frozenset[str] registered_contracts 0 tuple[PageShellContract,… ▼ property def registered_contracts(self) -> tuple[PageShellContract, ...] Returns tuple[PageShellContract, ...] required_fragment_blocks 0 frozenset[str] ▼ property def required_fragment_blocks(self) -> frozenset[str] Returns frozenset[str] register 6 ▼ def register(self, target_id: str, *, fragment_block: str, triggers_shell_update: bool = True, contract_name: str | None = None, required: bool = False, description: str = '') -> None Parameters Name Type Description target_id — fragment_block — triggers_shell_update — Default: True contract_name — Default: None required — Default: False description — Default: '' register_contract 1 ▼ Register a named page shell contract and all of its targets. def register_contract(self, contract: PageShellContract) -> None Parameters Name Type Description contract — freeze 0 ▼ def freeze(self) -> None get 1 FragmentTargetConfig | N… ▼ def get(self, target_id: str) -> FragmentTargetConfig | None Parameters Name Type Description target_id — Returns FragmentTargetConfig | None is_content_target 1 bool ▼ Return True when target expects fragment response (not full page_block). def is_content_target(self, target_id: str) -> bool Parameters Name Type Description target_id — Returns bool ← Previous filters Next → integration List © 2026 Chirp 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, "showDeadLinks": true } } window.BENGAL_LAZY_ASSETS = { tabulator: '/chirp/assets/js/tabulator.min.js', dataTable: '/chirp/assets/js/data-table.js', mermaidToolbar: '/chirp/assets/js/mermaid-toolbar.9de5abba.js', mermaidTheme: '/chirp/assets/js/mermaid-theme.344822c5.js', graphMinimap: '/chirp/assets/js/graph-minimap.ff04e939.js', graphContextual: '/chirp/assets/js/graph-contextual.355458ba.js' }; window.BENGAL_ICONS = { close: '/chirp/assets/icons/close.911d4fe1.svg', enlarge: '/chirp/assets/icons/enlarge.652035e5.svg', copy: '/chirp/assets/icons/copy.3d56e945.svg', 'download-svg': '/chirp/assets/icons/download.04f07e1b.svg', 'download-png': '/chirp/assets/icons/image.c34dfd40.svg', 'zoom-in': '/chirp/assets/icons/zoom-in.237b4a83.svg', 'zoom-out': '/chirp/assets/icons/zoom-out.38857c77.svg', reset: '/chirp/assets/icons/reset.d26dba29.svg' }; Arrow Up -------------------------------------------------------------------------------- Metadata: - Word Count: 1198 - Reading Time: 6 minutes