The squirrels.yml file is the main manifest configuration file for a Squirrels project. It defines your project’s metadata, database connections, datasets, and other settings. The file supports Jinja templating, allowing you to use environment variables and dynamic values.
The major version number of the project. Used in API versioning (e.g., /analytics/my-project/v1).Increment this when there are breaking changes in the Squirrels datasets (e.g., removing/renaming columns). See below for more information.
The authentication enforcement for the project. One of:
optional: Authentication is optional (default). Datasets and dashboards default to public scope.
required: Authentication is required. Datasets and dashboards default to protected scope, and public scope is explicitly forbidden.
Defaults:
If auth_strategy is managed, the default is optional.
If auth_strategy is external, the default is required.
Notes:
auth_strategy: external does not allow auth_type: optional.
The project_variables section allows additional custom fields beyond the ones listed above. These extra fields can be accessed in your Python configurations and Jinja templates.
When to increment the major version?For an API client that relies on your Squirrels API server, it may expect specific parameter names, parameter options to accept a range of values, or datasets to contain specific column names. If you were to remove a column from a dataset on your existing service for instance, this may break the API client.To account for this, it is recommended to avoid removing or renaming columns or parameters, and document it as deprecated in its description instead. Once you are ready to remove the deprecated feature, increment the major version, and deploy a new service without removing the old version. Since the major version is included in the API path, deploying both versions on the same domain is possible. The old version can be removed after all clients have migrated to the new version.See mounting Squirrels to an existing FastAPI server for guidance on hosting multiple Squirrels apps in one API server.
The connection URI. Format varies by database and connection type. The special placeholder {project_path} is replaced with the absolute path to your project directory.For details on URI formats for each connection type, see URI formats.
Defining parameters here in yaml is not recommended. Defining parameters with Python in pyconfigs/parameters.py is preferred, especially when using an IDE that provides linting and autocomplete for Python.
Defines parameter widgets for your datasets with YAML.
parameters: - type: SingleSelectParameter factory: CreateWithOptions arguments: name: region label: Region all_options: - id: na label: North America is_default: true - id: eu label: Europe
Each parameter is defined as a list item with the following properties:
Arguments passed to the factory method. The available arguments depend on the type and factory combination. Common arguments include name, label, description, and type-specific options.
Defines project-level configurables that can be set at runtime via HTTP headers. Unlike parameters, these do not get exposed as arguments for MCP tools (i.e., AI agents cannot control them). The default values can also be overridden at the dataset level.
configurables: - name: schema_name label: Database Schema description: The schema to query from default: public
Each configurable is defined as a list item with the following properties:
Dataset-level overrides for project configurables. Each item specifies a name (which must be a valid name from the configurables section) and default (for a different default value for this dataset).See the configurables section above for more information on project configurables.
Configurable name-value pairs to use for the test set.
A test set named default is automatically used when no test set is specified during compilation. You can override the default behavior by defining a test set with this name.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Squirrels Docs","colors":{"primary":"#B85707","light":"#EF9750","dark":"#9B4907"},"logo":{"light":"https://mintcdn.com/squirrels/kzLxoqeVmuUz8Q-T/images/logo/light.svg?fit=max\u0026auto=format\u0026n=kzLxoqeVmuUz8Q-T\u0026q=85\u0026s=d41cdc5597d9b7eebba9bb463f096f13","dark":"https://mintcdn.com/squirrels/kzLxoqeVmuUz8Q-T/images/logo/dark.svg?fit=max\u0026auto=format\u0026n=kzLxoqeVmuUz8Q-T\u0026q=85\u0026s=3d943a615801d6adedb350645121d13c"},"favicon":"/images/logo/main.svg","navbar":{"links":[{"label":"Support","href":"mailto:support@pysquirrels.com"}],"primary":{"type":"button","label":"GitHub","href":"https://github.com/squirrels-analytics/squirrels"}},"footer":{"socials":{"github":"https://github.com/squirrels-analytics/squirrels"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"]},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"squirrels","hasAudioNarration":false,"actualSubdomain":"squirrels","customDomains":["docs.pysquirrels.com"],"gitSource":{"type":"github","owner":"squirrels-analytics","repo":"squirrels-docs","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a21e8e6bd0a90f91cb49fad","collectionId":"66b2804e-2ab5-4098-a17d-9ed84140e44f","schemaVersion":"v2"},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6a21e8e6bd0a90f91cb49fad:success","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"References","count":54},{"language":"default","tag":"Python reference","count":45},{"language":"default","tag":"Documentation","count":24},{"language":"default","tag":"Project files","count":14},{"language":"default","tag":"CLI reference","count":9},{"language":"default","tag":"CLI commands","count":8},{"language":"default","tag":"types","count":8},{"language":"default","tag":"Concepts","count":7},{"language":"default","tag":"arguments","count":7},{"language":"default","tag":"data_sources","count":7}]},"assistantConfig":{"enableAskAiButton":true,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":".home-page{max-width:1000px;margin:0 auto;padding:0 24px 80px}.home-section-title,.home-title{text-align:left;margin-bottom:24px}.home-title{margin-top:24px;font-size:3rem;color:#555}.dark .home-title{color:#fff}.home-section-title{margin-top:48px;font-size:2rem}.dark .home-section-title{color:#eee}.home-description{text-align:left;font-size:1.25rem;max-width:700px;margin-left:auto;margin-right:auto}.dark .home-description{color:#ddd}.card:not(:hover){border-color:#bbb}.home-hero{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-top:24px;align-items:start}.home-hero-right pre{margin:0}.home-terminal{border:1px solid #e5e7eb;border-radius:10px;overflow:hidden;background:#f8fafc}.dark .home-terminal{border-color:#374151;background:#0b1222}.home-terminal-header{display:flex;align-items:center;gap:8px;height:34px;padding:0 10px;background:#eef2f7;border-bottom:1px solid #e5e7eb}.dark .home-terminal-header{background:#555;border-bottom-color:#424242}.home-terminal-dot{width:10px;height:10px;border-radius:50%;display:inline-block}.home-terminal-dot--red{background:#ff5f56}.home-terminal-dot--yellow{background:#ffbd2e}.home-terminal-dot--green{background:#27c93f}.home-terminal-title{margin-left:auto;font-size:.85rem;color:#6b7280}.dark .home-terminal-title{color:#c7c7c7}.home-code{overflow:auto;padding:16px 20px;background:#f5f7fa;border:1px solid #e5e7eb;font-size:.95rem;line-height:1.6}.dark .home-code{background:#444;border-color:#424242}.home-hero-left .home-description{margin-left:0;margin-right:0}.home-code .comment{color:#6a9955}.home-code .command{color:#569cd6;font-weight:700}.home-code .command::before{content:\"$ \";color:#888;font-weight:400}.home-get-started-btn{display:inline-block;margin-top:24px;padding:12px 32px;background-color:#9b4907;color:#fff;text-decoration:none;border-radius:8px;font-weight:600;font-size:16px;transition:background-color .2s}@media (max-width:650px){.home-hero{grid-template-columns:1fr}}"}],"page":{"pagePath":"project/squirrels-yml","slug":"/project/squirrels-yml","pageMetadata":{"title":"Project configs (squirrels.yml)","description":"Reference for the squirrels.yml manifest file","href":"/project/squirrels-yml","hidden":false},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Reference for the squirrels.yml manifest file\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Expandable,Heading,Info,Note,ResponseField,Table,Tip,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Expandable)_missingMdxReference(`Expandable`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!ResponseField)_missingMdxReference(`ResponseField`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`squirrels.yml`}),` file is the main manifest configuration file for a Squirrels project. It defines your project’s metadata, database connections, datasets, and other settings. The file supports Jinja templating, allowing you to use environment variables and dynamic values.`]}),`\n`,_jsx(Heading,{level:`2`,id:`file-structure-overview`,children:`File structure overview`}),`\n`,_jsx(_components.p,{children:`The manifest file contains the following top-level sections:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Section`}),_jsx(_components.th,{children:`Required`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`project_variables`})}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Core project metadata like name and version`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`packages`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`External Squirrels packages to import`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`connections`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Database connection definitions`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`parameters`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Parameter widget definitions`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`configurables`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Project-level configurable placeholders`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`datasets`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Dataset endpoint configurations`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`selection_test_sets`})}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Test sets for parameter selections`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`project_variables`,children:`project_variables`}),`\n`,_jsxs(_components.p,{children:[`Defines the core metadata for your Squirrels project. This section is `,_jsx(_components.strong,{children:`required`}),`.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`project_variables`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`my_project`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` label`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"My Analytics Project\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` description`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`This is a sample Squirrels project`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` major_version`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`})]}),`\n`]})})}),`\n`,_jsxs(Expandable,{title:`properties`,defaultOpen:true,children:[_jsx(ResponseField,{name:`name`,type:`string`,required:true,id:`param-name`,children:_jsx(_components.p,{children:`The unique identifier for your project. Must only contain alphanumeric characters, underscores, and dashes. This is used in API routes.`})}),_jsx(ResponseField,{name:`label`,type:`string`,default:`(derived from name)`,id:`param-label`,children:_jsx(_components.p,{children:`A human-readable label for the project displayed in the UI. If not specified, it is derived from the name using title case.`})}),_jsx(ResponseField,{name:`description`,type:`string`,default:``,id:`param-description`,children:_jsx(_components.p,{children:`A description of the project.`})}),_jsxs(ResponseField,{name:`major_version`,type:`integer`,required:true,id:`param-major-version`,children:[_jsxs(_components.p,{children:[`The major version number of the project. Used in API versioning (e.g., `,_jsx(_components.code,{children:`/analytics/my-project/v1`}),`).`]}),_jsx(_components.p,{children:`Increment this when there are breaking changes in the Squirrels datasets (e.g., removing/renaming columns). See below for more information.`})]}),_jsxs(ResponseField,{name:`auth_strategy`,type:`string`,default:`managed`,id:`param-auth-strategy`,children:[_jsx(_components.p,{children:`The authentication strategy for the project. One of:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`managed`}),`: Squirrels manages users, passwords, and API keys (default)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`external`}),`: Squirrels trusts an external OAuth authorization server (exactly one provider must be configured in `,_jsx(_components.code,{children:`pyconfigs/user.py`}),`)`]}),`\n`]})]}),_jsxs(ResponseField,{name:`auth_type`,type:`string`,default:`optional`,id:`param-auth-type`,children:[_jsx(_components.p,{children:`The authentication enforcement for the project. One of:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`optional`}),`: Authentication is optional (default). Datasets and dashboards default to `,_jsx(_components.code,{children:`public`}),` scope.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`required`}),`: Authentication is required. Datasets and dashboards default to `,_jsx(_components.code,{children:`protected`}),` scope, and `,_jsx(_components.code,{children:`public`}),` scope is explicitly forbidden.`]}),`\n`]}),_jsx(_components.p,{children:`Defaults:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`If `,_jsx(_components.code,{children:`auth_strategy`}),` is `,_jsx(_components.code,{children:`managed`}),`, the default is `,_jsx(_components.code,{children:`optional`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`If `,_jsx(_components.code,{children:`auth_strategy`}),` is `,_jsx(_components.code,{children:`external`}),`, the default is `,_jsx(_components.code,{children:`required`}),`.`]}),`\n`]}),_jsx(_components.p,{children:`Notes:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`auth_strategy: external`}),` does not allow `,_jsx(_components.code,{children:`auth_type: optional`}),`.`]}),`\n`]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`project_variables`}),` section allows additional custom fields beyond the ones listed above. These extra fields can be accessed in your Python configurations and Jinja templates.`]})}),`\n`,_jsxs(Info,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`When to increment the major version?`})}),_jsx(_components.p,{children:`For an API client that relies on your Squirrels API server, it may expect specific parameter names, parameter options to accept a range of values, or datasets to contain specific column names. If you were to remove a column from a dataset on your existing service for instance, this may break the API client.`}),_jsx(_components.p,{children:`To account for this, it is recommended to avoid removing or renaming columns or parameters, and document it as deprecated in its description instead. Once you are ready to remove the deprecated feature, increment the major version, and deploy a new service without removing the old version. Since the major version is included in the API path, deploying both versions on the same domain is possible. The old version can be removed after all clients have migrated to the new version.`}),_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/guides/mount-to-fastapi`,children:`mounting Squirrels to an existing FastAPI server`}),` for guidance on hosting multiple Squirrels apps in one API server.`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`packages`,children:`packages`}),`\n`,_jsx(_components.p,{children:`Defines external Squirrels packages to import. Packages allow you to reuse macros and other resources across projects.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`packages`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`git`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`https://github.com/org/shared-analytics.git`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` revision`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`v1.0.0`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` directory`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`shared_analytics`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Each package is defined as a list item with the following properties:`}),`\n`,_jsxs(Expandable,{title:`properties`,defaultOpen:true,children:[_jsx(ResponseField,{name:`git`,type:`string`,required:true,id:`param-git`,children:_jsx(_components.p,{children:`The Git repository URL for the package.`})}),_jsx(ResponseField,{name:`revision`,type:`string`,required:true,id:`param-revision`,children:_jsx(_components.p,{children:`The Git revision (tag, branch, or commit) to use.`})}),_jsx(ResponseField,{name:`directory`,type:`string`,default:`(derived from git URL)`,id:`param-directory`,children:_jsx(_components.p,{children:`The local directory name to clone the package into. Defaults to the repository name from the Git URL.`})})]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Run `,_jsx(_components.code,{children:`sqrl deps`}),` to download and install all packages defined in this section.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`connections`,children:`connections`}),`\n`,_jsxs(_components.p,{children:[`Defines database connections used by your models. Alternatively, connections can be defined with Python in `,_jsx(_components.code,{children:`pyconfigs/connections.py`}),`.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`connections`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`default`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` label`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Main Database`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` type`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`sqlalchemy`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` uri`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`sqlite:////absolute/path/to/database.db`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Each connection is defined as a list item with the following properties:`}),`\n`,_jsxs(Expandable,{title:`properties`,defaultOpen:true,children:[_jsx(ResponseField,{name:`name`,type:`string`,required:true,id:`param-name-1`,children:_jsx(_components.p,{children:`A unique identifier for the connection. Use this name to reference the connection in your models.`})}),_jsx(ResponseField,{name:`label`,type:`string`,default:`null`,id:`param-label-1`,children:_jsx(_components.p,{children:`A human-readable label for the connection.`})}),_jsxs(ResponseField,{name:`type`,type:`string`,default:`sqlalchemy`,id:`param-type`,children:[_jsx(_components.p,{children:`The connection type. One of:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`sqlalchemy`}),`: Uses SQLAlchemy for database connections (most compatible).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`connectorx`}),`: Uses ConnectorX for high-performance data loading.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`adbc`}),`: Uses Arrow Database Connectivity.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`duckdb`}),`: Native DuckDB connection/attachment.`]}),`\n`]})]}),_jsxs(ResponseField,{name:`uri`,type:`string`,required:true,id:`param-uri`,children:[_jsxs(_components.p,{children:[`The connection URI. Format varies by database and connection type. The special placeholder `,_jsx(_components.code,{children:`{project_path}`}),` is replaced with the absolute path to your project directory.`]}),_jsxs(_components.p,{children:[`For details on URI formats for each connection type, see `,_jsx(_components.a,{href:`/concepts/connections#uri-formats`,children:`URI formats`}),`.`]})]}),_jsx(ResponseField,{name:`sa_create_engine_args`,type:`object`,default:`{}`,id:`param-sa-create-engine-args`,children:_jsxs(_components.p,{children:[`Additional arguments passed to SQLAlchemy’s `,_jsx(_components.code,{children:`create_engine()`}),` function used by Squirrels. Only applicable when `,_jsx(_components.code,{children:`type`}),` is `,_jsx(_components.code,{children:`sqlalchemy`}),`.`]})})]}),`\n`,_jsxs(Tip,{children:[_jsx(_components.p,{children:`Use Jinja templating to substitute environment variables in your connection URIs:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`connections`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`production_db`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` uri`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {{ `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`env_vars.DATABASE_URL`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }}`})]}),`\n`]})})})]}),`\n`,_jsx(Heading,{level:`3`,id:`parameters`,children:`parameters`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Defining parameters here in yaml is not recommended. Defining parameters with Python in `,_jsx(_components.code,{children:`pyconfigs/parameters.py`}),` is preferred, especially when using an IDE that provides linting and autocomplete for Python.`]})}),`\n`,_jsx(_components.p,{children:`Defines parameter widgets for your datasets with YAML.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`12`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`12`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`parameters`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`type`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`SingleSelectParameter`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` factory`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`CreateWithOptions`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` arguments`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`region`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` label`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Region`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` all_options`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`na`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` label`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`North America`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` is_default`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`eu`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` label`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Europe`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Each parameter is defined as a list item with the following properties:`}),`\n`,_jsxs(Expandable,{title:`properties`,defaultOpen:true,children:[_jsxs(ResponseField,{name:`type`,type:`string`,required:true,id:`param-type-1`,children:[_jsx(_components.p,{children:`The parameter type. One of:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`SingleSelectParameter`}),`: Dropdown selection of one option.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`MultiSelectParameter`}),`: Selection of multiple options.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`DateParameter`}),`: Single date picker.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`DateRangeParameter`}),`: Date range picker.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`NumberParameter`}),`: Single number input.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`NumberRangeParameter`}),`: Number range input (min/max).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`TextParameter`}),`: Free text input.`]}),`\n`]})]}),_jsxs(ResponseField,{name:`factory`,type:`string`,required:true,id:`param-factory`,children:[_jsx(_components.p,{children:`The factory method to create the parameter. One of:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`CreateSimple`}),`: Create with minimal configuration.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`CreateWithOptions`}),`: Create with explicit options defined inline.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`CreateFromSource`}),`: Create with options loaded from a data source.`]}),`\n`]})]}),_jsx(ResponseField,{name:`arguments`,type:`object`,required:true,id:`param-arguments`,children:_jsxs(_components.p,{children:[`Arguments passed to the factory method. The available arguments depend on the `,_jsx(_components.code,{children:`type`}),` and `,_jsx(_components.code,{children:`factory`}),` combination. Common arguments include `,_jsx(_components.code,{children:`name`}),`, `,_jsx(_components.code,{children:`label`}),`, `,_jsx(_components.code,{children:`description`}),`, and type-specific options.`]})})]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`For detailed information on parameter types and their options, see the `,_jsx(_components.a,{href:`/references/python/types/parameter`,children:`Python reference for parameters`}),`.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`configurables`,children:`configurables`}),`\n`,_jsx(_components.p,{children:`Defines project-level configurables that can be set at runtime via HTTP headers. Unlike parameters, these do not get exposed as arguments for MCP tools (i.e., AI agents cannot control them). The default values can also be overridden at the dataset level.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`configurables`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`schema_name`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` label`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Database Schema`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` description`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`The schema to query from`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` default`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`public`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Each configurable is defined as a list item with the following properties:`}),`\n`,_jsxs(Expandable,{title:`properties`,defaultOpen:true,children:[_jsx(ResponseField,{name:`name`,type:`string`,required:true,id:`param-name-2`,children:_jsx(_components.p,{children:`A unique identifier for the configurable.`})}),_jsx(ResponseField,{name:`label`,type:`string`,default:``,id:`param-label-2`,children:_jsx(_components.p,{children:`A human-readable label for the configurable.`})}),_jsx(ResponseField,{name:`description`,type:`string`,default:``,id:`param-description-1`,children:_jsx(_components.p,{children:`A description of what this configurable controls.`})}),_jsx(ResponseField,{name:`default`,type:`string`,required:true,id:`param-default`,children:_jsx(_components.p,{children:`The default value for the configurable.`})})]}),`\n`,_jsx(Heading,{level:`3`,id:`datasets`,children:`datasets`}),`\n`,_jsx(_components.p,{children:`Defines the dataset endpoints exposed by your Squirrels API. Each dataset maps to a data model, and can specify parameters and access scopes.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`12`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`12`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`datasets`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`sales_report`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` label`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Sales Report`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` description`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Daily sales transactions`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` model`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`sales_model`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` scope`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`protected`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` parameters`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`date_range`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`region`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` configurables`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`schema_name`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` default`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`sales`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Each dataset is defined as a list item with the following properties:`}),`\n`,_jsxs(Expandable,{title:`properties`,defaultOpen:true,children:[_jsx(ResponseField,{name:`name`,type:`string`,required:true,id:`param-name-3`,children:_jsx(_components.p,{children:`A unique identifier for the dataset. Used in API routes.`})}),_jsx(ResponseField,{name:`label`,type:`string`,default:`(same as name)`,id:`param-label-3`,children:_jsx(_components.p,{children:`A human-readable label for the dataset displayed in the UI.`})}),_jsx(ResponseField,{name:`description`,type:`string`,default:``,id:`param-description-2`,children:_jsx(_components.p,{children:`A description of the dataset.`})}),_jsx(ResponseField,{name:`model`,type:`string`,default:`(same as name)`,id:`param-model`,children:_jsx(_components.p,{children:`The name of the data model that produces this dataset. If not specified, defaults to the dataset name.`})}),_jsxs(ResponseField,{name:`scope`,type:`string`,default:`(dynamic based on auth_type)`,id:`param-scope`,children:[_jsx(_components.p,{children:`The access scope for the dataset. One of:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`public`}),`: Accessible without authentication.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`protected`}),`: Requires authentication to access.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`private`}),`: Only accessible by users with the `,_jsx(_components.code,{children:`admin`}),` access level.`]}),`\n`]}),_jsxs(_components.p,{children:[`The default value is `,_jsx(_components.code,{children:`public`}),` if `,_jsx(_components.code,{children:`auth_type`}),` is `,_jsx(_components.code,{children:`optional`}),`, and `,_jsx(_components.code,{children:`protected`}),` if `,_jsx(_components.code,{children:`auth_type`}),` is `,_jsx(_components.code,{children:`required`}),`.`]})]}),_jsx(ResponseField,{name:`parameters`,type:`list[string]`,default:`null`,id:`param-parameters`,children:_jsx(_components.p,{children:`List of parameter names used by this dataset. If not specified, all parameters are available to the dataset.`})}),_jsxs(ResponseField,{name:`configurables`,type:`list[object]`,default:`[]`,id:`param-configurables`,children:[_jsxs(_components.p,{children:[`Dataset-level overrides for project configurables. Each item specifies a `,_jsx(_components.code,{children:`name`}),` (which must be a valid name from the `,_jsx(_components.code,{children:`configurables`}),` section) and `,_jsx(_components.code,{children:`default`}),` (for a different default value for this dataset).`]}),_jsxs(_components.p,{children:[`See the `,_jsx(_components.a,{href:`#configurables`,children:`configurables`}),` section above for more information on project configurables.`]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`selection_test_sets`,children:`selection_test_sets`}),`\n`,_jsx(_components.p,{children:`Defines test sets for parameter selections. Test sets are useful for testing and compiling models with specific parameter values.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`selection_test_sets`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`q1_report`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` user`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` access_level`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`admin`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` custom_fields`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` department`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`sales`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` parameters`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` date_range`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2024-01-01\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2024-03-31\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` region`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`na`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` configurables`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` schema_name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`test`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Each test set is defined as a list item with the following properties:`}),`\n`,_jsxs(Expandable,{title:`properties`,defaultOpen:true,children:[_jsx(ResponseField,{name:`name`,type:`string`,required:true,id:`param-name-4`,children:_jsxs(_components.p,{children:[`A unique identifier for the test set. Use this name with `,_jsx(_components.code,{children:`sqrl compile --test-set`}),`.`]})}),_jsxs(ResponseField,{name:`user`,type:`object`,default:`{}`,id:`param-user`,children:[_jsx(_components.p,{children:`User context for the test set.`}),_jsxs(Expandable,{title:`user properties`,defaultOpen:true,children:[_jsx(ResponseField,{name:`access_level`,type:`string`,default:`guest`,id:`param-access-level`,children:_jsxs(_components.p,{children:[`The user’s access level. One of `,_jsx(_components.code,{children:`admin`}),`, `,_jsx(_components.code,{children:`member`}),`, or `,_jsx(_components.code,{children:`guest`}),`.`]})}),_jsx(ResponseField,{name:`custom_fields`,type:`object`,default:`{}`,id:`param-custom-fields`,children:_jsxs(_components.p,{children:[`Custom user fields defined in your `,_jsx(_components.code,{children:`user.py`}),` configuration.`]})})]})]}),_jsx(ResponseField,{name:`parameters`,type:`object`,default:`{}`,id:`param-parameters-1`,children:_jsx(_components.p,{children:`Parameter name-value pairs to use for the test set. Values should match the expected format for each parameter type.`})}),_jsx(ResponseField,{name:`configurables`,type:`object`,default:`{}`,id:`param-configurables-1`,children:_jsx(_components.p,{children:`Configurable name-value pairs to use for the test set.`})})]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`A test set named `,_jsx(_components.code,{children:`default`}),` is automatically used when no test set is specified during compilation. You can override the default behavior by defining a test set with this name.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`using-jinja-templating`,children:`Using Jinja templating`}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`squirrels.yml`}),` file supports Jinja templating, allowing you to:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Reference environment variables`}),`\n`,_jsx(_components.li,{children:`Use conditional logic`}),`\n`,_jsx(_components.li,{children:`Include dynamic content`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`environment-variables`,children:`Environment variables`}),`\n`,_jsxs(_components.p,{children:[`Access environment variables using the `,_jsx(_components.code,{children:`env_vars`}),` dictionary:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`connections`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`main_db`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` uri`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {{ `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`env_vars.DATABASE_URL`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }}`})]}),`\n`]})})}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Environment variables are loaded from `,_jsx(_components.code,{children:`.env`}),` and `,_jsx(_components.code,{children:`.env.local`}),` files in your project directory, as well as from system environment variables.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`complete-example`,children:`Complete example`}),`\n`,_jsxs(_components.p,{children:[`Here’s a complete example of a `,_jsx(_components.code,{children:`squirrels.yml`}),` file:`]}),`\n`,_jsx(CodeBlock,{filename:`squirrels.yml`,numberOfLines:`42`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`42`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`project_variables`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`expense_analytics`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` label`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Expense Analytics\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` description`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Analytics project for expense tracking`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` major_version`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`packages`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`git`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`https://github.com/org/shared-macros.git`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` revision`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`v1.0.0`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`connections`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`default`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` label`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Expenses Database`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` type`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`sqlalchemy`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` uri`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {{ `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`env_vars.SQLITE_URI`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }}`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`datasets`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`expense_transactions`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` label`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Expense Transactions`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` description`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`All expense transactions`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` model`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`expense_model`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` scope`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`protected`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` parameters`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`date_range`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`category`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`expense_summary`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` label`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Expense Summary`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` description`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Aggregated expense data`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` scope`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`public`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`selection_test_sets`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`default`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` parameters`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` date_range`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`2024-01-01`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`2024-12-31`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`admin_view`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` user`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` access_level`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`admin`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` parameters`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` date_range`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`2024-01-01`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`2024-12-31`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` category`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`all`})]}),`\n`]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Project configs (squirrels.yml)","description":"Reference for the squirrels.yml manifest file","href":"/project/squirrels-yml","hidden":false}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"File structure overview","slug":"file-structure-overview","depth":2,"children":[{"title":"project_variables","slug":"project_variables","depth":3,"children":[]},{"title":"packages","slug":"packages","depth":3,"children":[]},{"title":"connections","slug":"connections","depth":3,"children":[]},{"title":"parameters","slug":"parameters","depth":3,"children":[]},{"title":"configurables","slug":"configurables","depth":3,"children":[]},{"title":"datasets","slug":"datasets","depth":3,"children":[]},{"title":"selection_test_sets","slug":"selection_test_sets","depth":3,"children":[]}]},{"title":"Using Jinja templating","slug":"using-jinja-templating","depth":2,"children":[{"title":"Environment variables","slug":"environment-variables","depth":3,"children":[]}]},{"title":"Complete example","slug":"complete-example","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"squirrels","siteName":"Squirrels Docs","title":"Project configs (squirrels.yml) - Squirrels Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-01-22T03:43:22.569Z","originalFileLocation":"project/squirrels-yml.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Reference for the squirrels.yml manifest file\">\u003cmeta data-mint-head name=\"application-name\" content=\"Squirrels Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/squirrels/bgo-igKLFZgRQQUf/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/squirrels/bgo-igKLFZgRQQUf/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/squirrels/bgo-igKLFZgRQQUf/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/squirrels/bgo-igKLFZgRQQUf/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/squirrels/bgo-igKLFZgRQQUf/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/squirrels/bgo-igKLFZgRQQUf/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/squirrels/bgo-igKLFZgRQQUf/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/squirrels/bgo-igKLFZgRQQUf/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/squirrels/bgo-igKLFZgRQQUf/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Project configs (squirrels.yml) - Squirrels Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Reference for the squirrels.yml manifest file\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Squirrels Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.pysquirrels.com/project/squirrels-yml\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://squirrels.mintlify.app/_mintlify/api/og/v2?division=Project+files\u0026amp;title=Project+configs+%28squirrels.yml%29\u0026amp;description=Reference+for+the+squirrels.yml+manifest+file\u0026amp;theme=253625986c7ee4cbda5aacec\u0026amp;signature=0e9c38377690b1a44b293602c570adb8b5869cc0f82d6add4b3f969bb1ec842b\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Project configs (squirrels.yml) - Squirrels Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Reference for the squirrels.yml manifest file\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://squirrels.mintlify.app/_mintlify/api/og/v2?division=Project+files\u0026amp;title=Project+configs+%28squirrels.yml%29\u0026amp;description=Reference+for+the+squirrels.yml+manifest+file\u0026amp;theme=253625986c7ee4cbda5aacec\u0026amp;signature=0e9c38377690b1a44b293602c570adb8b5869cc0f82d6add4b3f969bb1ec842b\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/squirrels/bgo-igKLFZgRQQUf/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Squirrels Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#B85707\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.pysquirrels.com/project/squirrels-yml\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/project/squirrels-yml.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.pysquirrels.com/#organization\",\"name\":\"Squirrels Docs\",\"url\":\"https://docs.pysquirrels.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/squirrels/kzLxoqeVmuUz8Q-T/images/logo/light.svg?fit=max\u0026auto=format\u0026n=kzLxoqeVmuUz8Q-T\u0026q=85\u0026s=d41cdc5597d9b7eebba9bb463f096f13\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.pysquirrels.com#website\",\"name\":\"Squirrels Docs\",\"url\":\"https://docs.pysquirrels.com\",\"publisher\":{\"@id\":\"https://docs.pysquirrels.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.pysquirrels.com/project/squirrels-yml#webpage\",\"url\":\"https://docs.pysquirrels.com/project/squirrels-yml\",\"name\":\"Project configs (squirrels.yml)\",\"description\":\"Reference for the squirrels.yml manifest file\",\"dateModified\":\"2026-01-22T03:43:22.569Z\",\"isPartOf\":{\"@id\":\"https://docs.pysquirrels.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.pysquirrels.com/project/squirrels-yml#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.pysquirrels.com/project/squirrels-yml#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Project files\",\"item\":\"https://docs.pysquirrels.com/project/structure\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Project configs (squirrels.yml)\",\"item\":\"https://docs.pysquirrels.com/project/squirrels-yml\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.pysquirrels.com/project/squirrels-yml#article\",\"headline\":\"Project configs (squirrels.yml)\",\"name\":\"Project configs (squirrels.yml)\",\"description\":\"Reference for the squirrels.yml manifest file\",\"url\":\"https://docs.pysquirrels.com/project/squirrels-yml\",\"mainEntityOfPage\":{\"@id\":\"https://docs.pysquirrels.com/project/squirrels-yml#webpage\"},\"dateModified\":\"2026-01-22T03:43:22.569Z\",\"publisher\":{\"@id\":\"https://docs.pysquirrels.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.pysquirrels.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Squirrels Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Squirrels Docs","nav":{"global":null,"tabs":[{"tab":"Home","pages":[{"title":"Home","href":""}]},{"tab":"Documentation","groups":[{"group":"Get started","icon":"rocket","pages":[{"title":"Introduction","href":"/intro"},{"title":"Quickstart","href":"/quickstart"},{"title":"Tutorial","href":"/tutorial"}]},{"group":"Concepts","icon":"book","pages":[{"title":"Architecture","href":"/concepts/architecture"},{"title":"Virtual Data Lake (VDL)","href":"/concepts/vdl"},{"title":"Database connections","href":"/concepts/connections"},{"title":"Data models","href":"/concepts/models"},{"title":"Datasets","href":"/concepts/datasets"},{"title":"Cascading parameter options","href":"/concepts/parameters"},{"title":"MCP server","href":"/concepts/mcp-server"}]},{"group":"Project files","icon":"folder-tree","pages":[{"title":"Project structure","description":"Overview of the file structure in a Squirrels project","href":"/project/structure"},{"title":"Project configs (squirrels.yml)","href":"/project/squirrels-yml"},{"title":"Environment vars (.env files)","description":"Configure your Squirrels project with environment variables","href":"/project/env-vars"},{"group":"Python configs (pyconfigs/)","expanded":true,"pages":[{"title":"Database connections (connections.py)","href":"/project/pyconfigs/connections"},{"title":"Widget parameters (parameters.py)","href":"/project/pyconfigs/parameters"},{"title":"Context variables at runtime (context.py)","href":"/project/pyconfigs/context"},{"title":"User fields \u0026 auth providers (user.py)","href":"/project/pyconfigs/user"}]},{"title":"Seeds (seeds/)","href":"/project/seeds"},{"title":"Macros (macros/)","href":"/project/macros"},{"group":"Data models (models/)","expanded":true,"pages":[{"title":"Sources (sources.yml)","href":"/project/models/sources"},{"title":"Build models (builds/)","href":"/project/models/builds"},{"title":"Dbview models (dbviews/)","href":"/project/models/dbviews"},{"title":"Federate models (federates/)","href":"/project/models/federates"}]},{"title":"Dashboards (dashboards/)","href":"/project/dashboards"}]}]},{"tab":"References","pages":[{"title":"References","href":"/references/python"}]},{"tab":"How-to Guides","pages":[{"title":"How-to Guides","href":"/guides/mcp-clients"}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/releases/v0-6-0"}]}]},"basePath":"","title":"Project configs (squirrels.yml) - Squirrels Docs","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":[],"chunks":[]}