Mark one upload collection as FrogBot’s file store.
FrogBot adds no files collection. Mark one upload collection with file: true to give pieces a place to store files. The collection appears under Collections in the admin panel and defines no custom fields unless you add them. FrogBot supplies upload metadata such as the filename, MIME type, size, and URL.
Give one upload collection the file: true marker to use it as FrogBot’s file store:
import type { CollectionConfig } from 'frogbot'export const Files: CollectionConfig = { slug: 'files', file: true, fields: [],}
That collection gets uploads, folders, soft deletion, admin list defaults, and access that requires an authenticated user. Your own fields, access rules, upload options, and other collection settings take precedence.A larger example can set its own slug, upload options, and fields:
A collection marked file: true must not set upload: false. Mark only one collection as file: true. A collection cannot hold another FrogBot role, such as chat: true, at the same time.
Files sit in folders. FrogBot adds a folders collection, folders, with a name field and folders: true, and gives the collection marked file: true a folder field, _h_folders, which the admin panel shows as a folder picker. Folders nest inside each other.To use your own folders collection, set folders: true on it; FrogBot files into that one instead and doesn’t add folders. Any other collection can file into it too:
import { createFolderField } from 'frogbot'import type { CollectionConfig } from 'frogbot'export const Pages: CollectionConfig = { slug: 'pages', fields: [{ name: 'title', type: 'text' }, createFolderField({ relationTo: 'folders' })],}
FrogBot stores uploads on local disk unless you configure a storage adapter. For production and serverless deployments, add an upload storage adapter to storage. The adapter covers the collection marked file: true, if any, and frogbot-chat-assets when chat is enabled, automatically; you don’t list them in the adapter’s collections.
FrogBot adds no files collection of its own. An app that stores files in files keeps them by declaring that collection with file: true:
import type { CollectionConfig } from 'frogbot'export const Files: CollectionConfig = { slug: 'files', file: true, fields: [],}
Without a marked collection, the next schema change in an existing app drops these tables:
the files table;
folders, when no other collection enables folders;
frogbot_trigger_subscriptions, when no agent has a trigger or channel.
In development mode, schema push warns about the data loss and drops the tables only if you confirm. frogbot migrate:create writes the DROP TABLE statements into the migration for you to review before applying it. Stored files stay on disk or in the storage adapter, but no document references them anymore. On MongoDB the data stays, but FrogBot can’t reach it.
Pieces that create files write to the collection marked file: true. Without one, those actions fail when they run:
[frogbot] QR Code requires a files collection. Add an upload collection with `file: true`.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"FrogBot Docs","colors":{"primary":"#030712","light":"#F9FAFB","dark":"#3acf6a"},"logo":{"light":"https://mintcdn.com/firmware/1jF8tzNdCWHCfika/logo/FrogBotLightGreen.svg?fit=max\u0026auto=format\u0026n=1jF8tzNdCWHCfika\u0026q=85\u0026s=de657b1e4825a6b0d0c7607cc6cd1933","dark":"https://mintcdn.com/firmware/1jF8tzNdCWHCfika/logo/FrogBotLongGreen.svg?fit=max\u0026auto=format\u0026n=1jF8tzNdCWHCfika\u0026q=85\u0026s=eed21f0fb6485cf12699700d0f455341"},"favicon":"https://mintcdn.com/firmware/pvDTxOOi5ftoZro_/favicon.svg?fit=max\u0026auto=format\u0026n=pvDTxOOi5ftoZro_\u0026q=85\u0026s=044d843a7a3071dad0518e3ad6f7d59d","api":{"mdx":{"auth":{"method":"bearer"},"server":"https://app.frogbot.ai/api"}},"background":{"color":{"light":"#F9FAFB","dark":"#0b1120"}},"navbar":{"links":[{"href":"https://github.com/frogbotai/frogbot","type":"github"},{"icon":"discord","href":"https://discord.gg/JBZF7syAnU","label":"Discord"},{"href":"https://x.com/cgilly2fast","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.frogbot.ai"}},"footer":{"socials":{"x":"https://x.com/frogbot_ai","linkedin":"https://www.linkedin.com/company/frogbotai"}},"styling":{"codeblocks":{"theme":"tokyo-night"},"latex":true},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"navigation":{"global":{},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"firmware","hasAudioNarration":false,"actualSubdomain":"firmware","customDomains":["docs.frogbot.ai"],"gitSource":{"type":"github","owner":"frogbotai","repo":"frogbot","deployBranch":"main","contentDirectory":"docs","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae354449757c0f6dff43b35","collectionId":"547721b1-d6ea-4b0a-982d-fd3b3bb600a4","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae354449757c0f6dff43b35"},"entitlements":{},"buildId":"6ae54e87335dd0cca3e42f8f","clientVersion":"0.0.4043","searchFilterCounts":[{"language":"default","tag":"General","count":174},{"language":"default","tag":"Features","count":75},{"language":"default","tag":"Basics","count":54},{"language":"default","tag":"Fields","count":34},{"language":"default","tag":"Ecosystem","count":24},{"language":"default","tag":"Cloud","count":21},{"language":"default","tag":"Plugins","count":16},{"language":"default","tag":"Managing Data","count":14},{"language":"default","tag":"Chat","count":11},{"language":"default","tag":"Pieces","count":11}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".dark #sidebar-content a,.dark #sidebar-content button{color:#d1d5db!important}.dark #sidebar-content a:hover,.dark #sidebar-content button:hover{color:#f9fafb!important}.dark .sidebar-group-header{color:#e5e7eb}.dark #content-area,.dark #content-area [data-as=p],.dark #content-area li,.dark #content-area p,.dark #content-area span:not(:where(pre, code) span),.dark .prose :where(p, li, span):not(:where(code, code *)){color:#cbd5e1!important}.dark .prose{--tw-prose-invert-body:#cbd5e1;--tw-prose-invert-lead:#cbd5e1;--tw-prose-invert-bullets:#64748b;--tw-prose-invert-counters:#94a3b8;--tw-prose-invert-quotes:#e2e8f0;--tw-prose-invert-captions:#94a3b8;--tw-prose-invert-headings:#f8fafc;--tw-prose-invert-bold:#f8fafc}.dark [data-component-part=card-content],.dark [data-component-part=card-content] *{color:#cbd5e1!important}.dark #table-of-contents a{color:#cbd5e1}.dark #table-of-contents a:hover{color:#f1f5f9}.dark #content-area h1,.dark #content-area h1 *,.dark #content-area h2,.dark #content-area h2 *,.dark #content-area h3,.dark #content-area h3 *,.dark #content-area h4,.dark #content-area h4 *,.dark [data-component-part=card-title]{color:#f8fafc!important}.prompt{background-color:#fff!important;border-color:rgb(var(--gray-950)/.1)!important;color:rgb(var(--gray-700))!important}.dark .prompt{background-color:rgb(var(--background-dark))!important;border-color:rgb(255 255 255/.1)!important;color:#cbd5e1!important}.prompt [data-component-part=prompt-action-copy-button]{background-color:rgb(var(--primary-dark))!important;border-color:transparent!important;color:#fff!important}.prompt [data-component-part=prompt-action-copy-button]:hover{background-color:rgb(var(--primary-dark)/.9)!important}.dark #content-area .prompt [data-component-part=prompt-action-copy-button] *,.prompt [data-component-part=prompt-action-copy-button] *{color:#fff!important}"}],"page":{"pagePath":"upload/files","slug":"/upload/files","pageMetadata":{"title":"Files","sidebarTitle":"Files","description":"Mark one upload collection as FrogBot's file store.","keywords":["files","uploads","folders","storage","collections"],"href":"/upload/files"},"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: \"Mark one upload collection as FrogBot’s file store.\"\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`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`FrogBot adds no files collection. Mark one upload collection with `,_jsx(_components.code,{children:`file: true`}),` to give pieces a place to store files. The collection appears under `,_jsx(_components.strong,{children:`Collections`}),` in the admin panel and defines no custom fields unless you add them. FrogBot supplies upload metadata such as the filename, MIME type, size, and URL.`]}),`\n`,_jsx(Heading,{level:`2`,id:`adopt-your-collection`,children:`Adopt your collection`}),`\n`,_jsxs(_components.p,{children:[`Give one upload collection the `,_jsx(_components.code,{children:`file: true`}),` marker to use it as FrogBot’s file store:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes tokyo-night tokyo-night`,style:{backgroundColor:`#1a1b26`,\"--shiki-dark-bg\":`#1a1b26`,color:`#a9b1d6`,\"--shiki-dark\":`#a9b1d6`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7DCFFF`,\"--shiki-dark\":`#7DCFFF`},children:`import`}),_jsx(_components.span,{style:{color:`#BB9AF7`,\"--shiki-dark\":`#BB9AF7`},children:` type`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` { `}),_jsx(_components.span,{style:{color:`#0DB9D7`,\"--shiki-dark\":`#0DB9D7`},children:`CollectionConfig`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` }`}),_jsx(_components.span,{style:{color:`#7DCFFF`,\"--shiki-dark\":`#7DCFFF`},children:` from`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:` '`}),_jsx(_components.span,{style:{color:`#9ECE6A`,\"--shiki-dark\":`#9ECE6A`},children:`frogbot`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`'`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7DCFFF`,\"--shiki-dark\":`#7DCFFF`},children:`export`}),_jsx(_components.span,{style:{color:`#9D7CD8`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#9D7CD8`,\"--shiki-dark-font-style\":`italic`},children:` const`}),_jsx(_components.span,{style:{color:`#BB9AF7`,\"--shiki-dark\":`#BB9AF7`},children:` Files`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#C0CAF5`,\"--shiki-dark\":`#C0CAF5`},children:` CollectionConfig`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:` =`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#73DACA`,\"--shiki-dark\":`#73DACA`},children:` slug`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:` '`}),_jsx(_components.span,{style:{color:`#9ECE6A`,\"--shiki-dark\":`#9ECE6A`},children:`files`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`'`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#73DACA`,\"--shiki-dark\":`#73DACA`},children:` file`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#FF9E64`,\"--shiki-dark\":`#FF9E64`},children:` true`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#73DACA`,\"--shiki-dark\":`#73DACA`},children:` fields`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` []`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`That collection gets uploads, folders, soft deletion, admin list defaults, and access that requires an authenticated user. Your own fields, access rules, upload options, and other collection settings take precedence.`}),`\n`,_jsx(_components.p,{children:`A larger example can set its own slug, upload options, and fields:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`12`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes tokyo-night tokyo-night`,style:{backgroundColor:`#1a1b26`,\"--shiki-dark-bg\":`#1a1b26`,color:`#a9b1d6`,\"--shiki-dark\":`#a9b1d6`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`12`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7DCFFF`,\"--shiki-dark\":`#7DCFFF`},children:`import`}),_jsx(_components.span,{style:{color:`#BB9AF7`,\"--shiki-dark\":`#BB9AF7`},children:` type`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` { `}),_jsx(_components.span,{style:{color:`#0DB9D7`,\"--shiki-dark\":`#0DB9D7`},children:`CollectionConfig`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` }`}),_jsx(_components.span,{style:{color:`#7DCFFF`,\"--shiki-dark\":`#7DCFFF`},children:` from`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:` '`}),_jsx(_components.span,{style:{color:`#9ECE6A`,\"--shiki-dark\":`#9ECE6A`},children:`frogbot`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`'`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7DCFFF`,\"--shiki-dark\":`#7DCFFF`},children:`export`}),_jsx(_components.span,{style:{color:`#9D7CD8`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#9D7CD8`,\"--shiki-dark-font-style\":`italic`},children:` const`}),_jsx(_components.span,{style:{color:`#BB9AF7`,\"--shiki-dark\":`#BB9AF7`},children:` Documents`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#C0CAF5`,\"--shiki-dark\":`#C0CAF5`},children:` CollectionConfig`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:` =`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#73DACA`,\"--shiki-dark\":`#73DACA`},children:` slug`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:` '`}),_jsx(_components.span,{style:{color:`#9ECE6A`,\"--shiki-dark\":`#9ECE6A`},children:`documents`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`'`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#73DACA`,\"--shiki-dark\":`#73DACA`},children:` file`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#FF9E64`,\"--shiki-dark\":`#FF9E64`},children:` true`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#73DACA`,\"--shiki-dark\":`#73DACA`},children:` upload`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#73DACA`,\"--shiki-dark\":`#73DACA`},children:` mimeTypes`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` [`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`'`}),_jsx(_components.span,{style:{color:`#9ECE6A`,\"--shiki-dark\":`#9ECE6A`},children:`application/pdf`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`'`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` }`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#73DACA`,\"--shiki-dark\":`#73DACA`},children:` fields`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` {`}),_jsx(_components.span,{style:{color:`#73DACA`,\"--shiki-dark\":`#73DACA`},children:` name`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:` '`}),_jsx(_components.span,{style:{color:`#9ECE6A`,\"--shiki-dark\":`#9ECE6A`},children:`category`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`'`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`,`}),_jsx(_components.span,{style:{color:`#73DACA`,\"--shiki-dark\":`#73DACA`},children:` type`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:` '`}),_jsx(_components.span,{style:{color:`#9ECE6A`,\"--shiki-dark\":`#9ECE6A`},children:`text`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`'`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`A collection marked `,_jsx(_components.code,{children:`file: true`}),` must not set `,_jsx(_components.code,{children:`upload: false`}),`. Mark only one collection as `,_jsx(_components.code,{children:`file: true`}),`. A collection cannot hold another FrogBot role, such as `,_jsx(_components.code,{children:`chat: true`}),`, at the same time.`]}),`\n`,_jsx(Heading,{level:`2`,id:`folders`,children:`Folders`}),`\n`,_jsxs(_components.p,{children:[`Files sit in folders. FrogBot adds a folders collection, `,_jsx(_components.code,{children:`folders`}),`, with a `,_jsx(_components.code,{children:`name`}),` field and `,_jsx(_components.code,{children:`folders: true`}),`, and gives the collection marked `,_jsx(_components.code,{children:`file: true`}),` a folder field, `,_jsx(_components.code,{children:`_h_folders`}),`, which the admin panel shows as a folder picker. Folders nest inside each other.`]}),`\n`,_jsxs(_components.p,{children:[`To use your own folders collection, set `,_jsx(_components.code,{children:`folders: true`}),` on it; FrogBot files into that one instead and doesn’t add `,_jsx(_components.code,{children:`folders`}),`. Any other collection can file into it too:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes tokyo-night tokyo-night`,style:{backgroundColor:`#1a1b26`,\"--shiki-dark-bg\":`#1a1b26`,color:`#a9b1d6`,\"--shiki-dark\":`#a9b1d6`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7DCFFF`,\"--shiki-dark\":`#7DCFFF`},children:`import`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` { `}),_jsx(_components.span,{style:{color:`#0DB9D7`,\"--shiki-dark\":`#0DB9D7`},children:`createFolderField`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` }`}),_jsx(_components.span,{style:{color:`#7DCFFF`,\"--shiki-dark\":`#7DCFFF`},children:` from`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:` '`}),_jsx(_components.span,{style:{color:`#9ECE6A`,\"--shiki-dark\":`#9ECE6A`},children:`frogbot`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`'`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7DCFFF`,\"--shiki-dark\":`#7DCFFF`},children:`import`}),_jsx(_components.span,{style:{color:`#BB9AF7`,\"--shiki-dark\":`#BB9AF7`},children:` type`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` { `}),_jsx(_components.span,{style:{color:`#0DB9D7`,\"--shiki-dark\":`#0DB9D7`},children:`CollectionConfig`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` }`}),_jsx(_components.span,{style:{color:`#7DCFFF`,\"--shiki-dark\":`#7DCFFF`},children:` from`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:` '`}),_jsx(_components.span,{style:{color:`#9ECE6A`,\"--shiki-dark\":`#9ECE6A`},children:`frogbot`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`'`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7DCFFF`,\"--shiki-dark\":`#7DCFFF`},children:`export`}),_jsx(_components.span,{style:{color:`#9D7CD8`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#9D7CD8`,\"--shiki-dark-font-style\":`italic`},children:` const`}),_jsx(_components.span,{style:{color:`#BB9AF7`,\"--shiki-dark\":`#BB9AF7`},children:` Pages`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#C0CAF5`,\"--shiki-dark\":`#C0CAF5`},children:` CollectionConfig`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:` =`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#73DACA`,\"--shiki-dark\":`#73DACA`},children:` slug`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:` '`}),_jsx(_components.span,{style:{color:`#9ECE6A`,\"--shiki-dark\":`#9ECE6A`},children:`pages`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`'`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#73DACA`,\"--shiki-dark\":`#73DACA`},children:` fields`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` [{`}),_jsx(_components.span,{style:{color:`#73DACA`,\"--shiki-dark\":`#73DACA`},children:` name`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:` '`}),_jsx(_components.span,{style:{color:`#9ECE6A`,\"--shiki-dark\":`#9ECE6A`},children:`title`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`'`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`,`}),_jsx(_components.span,{style:{color:`#73DACA`,\"--shiki-dark\":`#73DACA`},children:` type`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:` '`}),_jsx(_components.span,{style:{color:`#9ECE6A`,\"--shiki-dark\":`#9ECE6A`},children:`text`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`'`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` }`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`,`}),_jsx(_components.span,{style:{color:`#7AA2F7`,\"--shiki-dark\":`#7AA2F7`},children:` createFolderField`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:`({`}),_jsx(_components.span,{style:{color:`#73DACA`,\"--shiki-dark\":`#73DACA`},children:` relationTo`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:` '`}),_jsx(_components.span,{style:{color:`#9ECE6A`,\"--shiki-dark\":`#9ECE6A`},children:`folders`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`'`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` })]`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`storage`,children:`Storage`}),`\n`,_jsxs(_components.p,{children:[`FrogBot stores uploads on local disk unless you configure a storage adapter. For production and serverless deployments, add an `,_jsx(_components.a,{href:`/upload/storage-adapters`,children:`upload storage adapter`}),` to `,_jsx(_components.code,{children:`storage`}),`. The adapter covers the collection marked `,_jsx(_components.code,{children:`file: true`}),`, if any, and `,_jsx(_components.code,{children:`frogbot-chat-assets`}),` when chat is enabled, automatically; you don’t list them in the adapter’s `,_jsx(_components.code,{children:`collections`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`access`,children:`Access`}),`\n`,_jsxs(_components.p,{children:[`A collection marked `,_jsx(_components.code,{children:`file: true`}),` requires an authenticated user to create, read, update, or delete files unless you set your own `,_jsx(_components.code,{children:`access`}),` rules.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Files do not have per-user ownership or sharing rules. Authenticated users can access every file allowed by the collection’s access rules.`})}),`\n`,_jsx(Heading,{level:`2`,id:`keep-existing-files`,children:`Keep existing files`}),`\n`,_jsxs(_components.p,{children:[`FrogBot adds no files collection of its own. An app that stores files in `,_jsx(_components.code,{children:`files`}),` keeps them by declaring that collection with `,_jsx(_components.code,{children:`file: true`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes tokyo-night tokyo-night`,style:{backgroundColor:`#1a1b26`,\"--shiki-dark-bg\":`#1a1b26`,color:`#a9b1d6`,\"--shiki-dark\":`#a9b1d6`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7DCFFF`,\"--shiki-dark\":`#7DCFFF`},children:`import`}),_jsx(_components.span,{style:{color:`#BB9AF7`,\"--shiki-dark\":`#BB9AF7`},children:` type`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` { `}),_jsx(_components.span,{style:{color:`#0DB9D7`,\"--shiki-dark\":`#0DB9D7`},children:`CollectionConfig`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` }`}),_jsx(_components.span,{style:{color:`#7DCFFF`,\"--shiki-dark\":`#7DCFFF`},children:` from`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:` '`}),_jsx(_components.span,{style:{color:`#9ECE6A`,\"--shiki-dark\":`#9ECE6A`},children:`frogbot`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`'`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7DCFFF`,\"--shiki-dark\":`#7DCFFF`},children:`export`}),_jsx(_components.span,{style:{color:`#9D7CD8`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#9D7CD8`,\"--shiki-dark-font-style\":`italic`},children:` const`}),_jsx(_components.span,{style:{color:`#BB9AF7`,\"--shiki-dark\":`#BB9AF7`},children:` Files`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#C0CAF5`,\"--shiki-dark\":`#C0CAF5`},children:` CollectionConfig`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:` =`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#73DACA`,\"--shiki-dark\":`#73DACA`},children:` slug`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:` '`}),_jsx(_components.span,{style:{color:`#9ECE6A`,\"--shiki-dark\":`#9ECE6A`},children:`files`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`'`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#73DACA`,\"--shiki-dark\":`#73DACA`},children:` file`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#FF9E64`,\"--shiki-dark\":`#FF9E64`},children:` true`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#73DACA`,\"--shiki-dark\":`#73DACA`},children:` fields`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`:`}),_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:` []`}),_jsx(_components.span,{style:{color:`#89DDFF`,\"--shiki-dark\":`#89DDFF`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#9ABDF5`,\"--shiki-dark\":`#9ABDF5`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Without a marked collection, the next schema change in an existing app drops these tables:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`the `,_jsx(_components.code,{children:`files`}),` table;`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`folders`}),`, when no other collection enables folders;`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`frogbot_trigger_subscriptions`}),`, when no agent has a trigger or channel.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`In development mode, schema push warns about the data loss and drops the tables only if you confirm. `,_jsx(_components.code,{children:`frogbot migrate:create`}),` writes the `,_jsx(_components.code,{children:`DROP TABLE`}),` statements into the migration for you to review before applying it. Stored files stay on disk or in the storage adapter, but no document references them anymore. On MongoDB the data stays, but FrogBot can’t reach it.`]}),`\n`,_jsx(Heading,{level:`2`,id:`piece-output`,children:`Piece output`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/pieces/overview#file-output`,children:`Pieces`}),` that create files write to the collection marked `,_jsx(_components.code,{children:`file: true`}),`. Without one, those actions fail when they run:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes tokyo-night tokyo-night`,style:{backgroundColor:`#1a1b26`,\"--shiki-dark-bg\":`#1a1b26`,color:`#a9b1d6`,\"--shiki-dark\":`#a9b1d6`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:\"[frogbot] QR Code requires a files collection. Add an upload collection with `file: true`.\"})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})]})}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":{"codeStyling":{"theme":"tokyo-night"},"config":{},"pageMetadata":{"title":"Files","sidebarTitle":"Files","description":"Mark one upload collection as FrogBot's file store.","keywords":["files","uploads","folders","storage","collections"],"href":"/upload/files"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Adopt your collection","slug":"adopt-your-collection","depth":2,"children":[]},{"title":"Folders","slug":"folders","depth":2,"children":[]},{"title":"Storage","slug":"storage","depth":2,"children":[]},{"title":"Access","slug":"access","depth":2,"children":[]},{"title":"Keep existing files","slug":"keep-existing-files","depth":2,"children":[]},{"title":"Piece output","slug":"piece-output","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"firmware","siteName":"FrogBot Docs","title":"Files - FrogBot Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-18T16:17:05.148Z","originalFileLocation":"upload/files.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=\"Mark one upload collection as FrogBot\u0026#x27;s file store.\">\u003cmeta data-mint-head name=\"application-name\" content=\"FrogBot 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/firmware/-rhCEx-k_rFkB_Pu/_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/firmware/-rhCEx-k_rFkB_Pu/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/firmware/-rhCEx-k_rFkB_Pu/_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/firmware/-rhCEx-k_rFkB_Pu/_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/firmware/-rhCEx-k_rFkB_Pu/_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/firmware/-rhCEx-k_rFkB_Pu/_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/firmware/-rhCEx-k_rFkB_Pu/_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/firmware/-rhCEx-k_rFkB_Pu/_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/firmware/-rhCEx-k_rFkB_Pu/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Files - FrogBot Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Mark one upload collection as FrogBot\u0026#x27;s file store.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"FrogBot Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.frogbot.ai/upload/files\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://firmware.mintlify.app/_mintlify/api/og/v2?division=Upload\u0026amp;title=Files\u0026amp;description=Mark+one+upload+collection+as+FrogBot%27s+file+store.\u0026amp;theme=f4bccae87e3aea4ea0fb024f\u0026amp;signature=cf8957e7a0c36a80b721ed8e031a3726b0d1a210ae561424d4d536d24ad9a042\">\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=\"Files - FrogBot Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Mark one upload collection as FrogBot\u0026#x27;s file store.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://firmware.mintlify.app/_mintlify/api/og/v2?division=Upload\u0026amp;title=Files\u0026amp;description=Mark+one+upload+collection+as+FrogBot%27s+file+store.\u0026amp;theme=f4bccae87e3aea4ea0fb024f\u0026amp;signature=cf8957e7a0c36a80b721ed8e031a3726b0d1a210ae561424d4d536d24ad9a042\">\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/firmware/-rhCEx-k_rFkB_Pu/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"FrogBot Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#030712\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.frogbot.ai/upload/files\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/upload/files.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.frogbot.ai/#organization\",\"name\":\"FrogBot Docs\",\"url\":\"https://docs.frogbot.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/firmware/1jF8tzNdCWHCfika/logo/FrogBotLightGreen.svg?fit=max\u0026auto=format\u0026n=1jF8tzNdCWHCfika\u0026q=85\u0026s=de657b1e4825a6b0d0c7607cc6cd1933\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.frogbot.ai#website\",\"name\":\"FrogBot Docs\",\"url\":\"https://docs.frogbot.ai\",\"publisher\":{\"@id\":\"https://docs.frogbot.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.frogbot.ai/upload/files#webpage\",\"url\":\"https://docs.frogbot.ai/upload/files\",\"name\":\"Files\",\"description\":\"Mark one upload collection as FrogBot's file store.\",\"dateModified\":\"2026-10-18T16:17:05.148Z\",\"isPartOf\":{\"@id\":\"https://docs.frogbot.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.frogbot.ai/upload/files#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.frogbot.ai/upload/files#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Features\",\"item\":\"https://docs.frogbot.ai/admin/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Upload\",\"item\":\"https://docs.frogbot.ai/upload/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Files\",\"item\":\"https://docs.frogbot.ai/upload/files\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.frogbot.ai/upload/files#article\",\"headline\":\"Files\",\"name\":\"Files\",\"description\":\"Mark one upload collection as FrogBot's file store.\",\"url\":\"https://docs.frogbot.ai/upload/files\",\"mainEntityOfPage\":{\"@id\":\"https://docs.frogbot.ai/upload/files#webpage\"},\"dateModified\":\"2026-10-18T16:17:05.148Z\",\"keywords\":\"files, uploads, folders, storage, collections\",\"publisher\":{\"@id\":\"https://docs.frogbot.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.frogbot.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"FrogBot Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"FrogBot Docs","nav":{"global":{},"tabs":[{"tab":"General","groups":[{"group":"Start here","pages":[{"title":"What is FrogBot?","sidebarTitle":"What is FrogBot?","href":""},{"title":"Set up FrogBot step by step","sidebarTitle":"Step-by-step setup","href":"/getting-started/setup"},{"title":"Start with a coding agent","sidebarTitle":"Start with a coding agent","href":"/getting-started/coding-agent"},{"title":"Installation","sidebarTitle":"Installation","href":"/getting-started/installation"},{"title":"CLI","sidebarTitle":"CLI","href":"/getting-started/cli"},{"title":"FrogBot concepts","sidebarTitle":"Concepts","href":"/getting-started/concepts"}]},{"group":"Basics","pages":[{"group":"Configuration","expanded":false,"pages":[{"title":"Configuration","sidebarTitle":"Overview","href":"/configuration/overview"},{"title":"Collection Configs","sidebarTitle":"Collections","href":"/configuration/collections"},{"title":"Environment Variables","sidebarTitle":"Environment Variables","href":"/configuration/environment-vars"},{"title":"I18n","sidebarTitle":"I18n","href":"/configuration/i18n"},{"title":"Localization","sidebarTitle":"Localization","href":"/configuration/localization"}]},{"group":"Database","expanded":false,"pages":[{"title":"Database","sidebarTitle":"Overview","href":"/database/overview"},{"title":"MongoDB","sidebarTitle":"MongoDB","href":"/database/mongodb"},{"title":"Postgres","sidebarTitle":"Postgres","href":"/database/postgres"},{"title":"SQLite","sidebarTitle":"SQLite","href":"/database/sqlite"},{"title":"Migrations","sidebarTitle":"Migrations","href":"/database/migrations"},{"title":"Transactions","href":"/database/transactions"},{"title":"Indexes","sidebarTitle":"Indexes","href":"/database/indexes"}]},{"group":"Search","expanded":false,"pages":[{"title":"Collection search","sidebarTitle":"Overview","href":"/search/overview"}]},{"group":"Access Control","expanded":false,"pages":[{"title":"Access Control","sidebarTitle":"Overview","href":"/access-control/overview"},{"title":"Collection Access Control","sidebarTitle":"Collections","href":"/access-control/collections"},{"title":"Field-level Access Control","sidebarTitle":"Fields","href":"/access-control/fields"}]},{"group":"Hooks","expanded":false,"pages":[{"title":"Hooks Overview","sidebarTitle":"Overview","href":"/hooks/overview"},{"title":"Collection Hooks","sidebarTitle":"Collections","href":"/hooks/collections"},{"title":"Field Hooks","sidebarTitle":"Fields","href":"/hooks/fields"},{"title":"Context","sidebarTitle":"Context","href":"/hooks/context"}]},{"group":"Fields","expanded":false,"pages":[{"title":"Fields Overview","sidebarTitle":"Overview","href":"/fields/overview"},{"title":"Text Field","sidebarTitle":"Text","href":"/fields/text"},{"title":"Textarea Field","sidebarTitle":"Textarea","href":"/fields/textarea"},{"title":"Number Field","sidebarTitle":"Number","href":"/fields/number"},{"title":"Email Field","sidebarTitle":"Email","href":"/fields/email"},{"title":"Checkbox Field","sidebarTitle":"Checkbox","href":"/fields/checkbox"},{"title":"Date Field","sidebarTitle":"Date","href":"/fields/date"},{"title":"Select Field","sidebarTitle":"Select","href":"/fields/select"},{"title":"Radio Group Field","sidebarTitle":"Radio Group","href":"/fields/radio"},{"title":"Relationship Field","sidebarTitle":"Relationship","href":"/fields/relationship"},{"title":"Upload Field","sidebarTitle":"Upload","href":"/fields/upload"},{"title":"Rich Text Field","sidebarTitle":"Rich Text","href":"/fields/rich-text"},{"title":"Array Field","sidebarTitle":"Array","href":"/fields/array"},{"title":"Blocks Field","sidebarTitle":"Blocks","href":"/fields/blocks"},{"title":"Group Field","sidebarTitle":"Group","href":"/fields/group"},{"title":"Tabs Field","sidebarTitle":"Tabs","href":"/fields/tabs"},{"title":"Row Field","sidebarTitle":"Row","href":"/fields/row"},{"title":"Collapsible Field","sidebarTitle":"Collapsible","href":"/fields/collapsible"},{"title":"Join Field","sidebarTitle":"Join","href":"/fields/join"},{"title":"JSON Field","sidebarTitle":"JSON","href":"/fields/json"},{"title":"Vector field","sidebarTitle":"Vector","href":"/fields/vector"},{"title":"Code Field","sidebarTitle":"Code","href":"/fields/code"},{"title":"Point Field","sidebarTitle":"Point","href":"/fields/point"},{"title":"UI Field","sidebarTitle":"UI","href":"/fields/ui"},{"group":"Field kinds","pages":[{"title":"Money Field","sidebarTitle":"Money","href":"/fields/money"},{"title":"Percent Field","sidebarTitle":"Percent","href":"/fields/percent"},{"title":"Rating Field","sidebarTitle":"Rating","href":"/fields/rating"},{"title":"Duration Field","sidebarTitle":"Duration","href":"/fields/duration"},{"title":"URL Field","sidebarTitle":"URL","href":"/fields/url"},{"title":"Phone Field","sidebarTitle":"Phone","href":"/fields/phone"},{"title":"Barcode Field","sidebarTitle":"Barcode","href":"/fields/barcode"},{"title":"Autonumber Field","sidebarTitle":"Autonumber","href":"/fields/autonumber"},{"title":"AI Field","sidebarTitle":"AI","href":"/fields/ai"}]},{"title":"Fields Generated by FrogBot","sidebarTitle":"Generated Fields","href":"/fields/default-fields"}]}]},{"group":"Managing Data","pages":[{"group":"Local API","expanded":false,"pages":[{"title":"Local API","sidebarTitle":"Overview","href":"/local-api/overview"},{"title":"Respecting Access Control with Local API Operations","sidebarTitle":"Access Control","href":"/local-api/access-control"},{"title":"Using Local API Operations with Server Functions","sidebarTitle":"Server Functions","href":"/local-api/server-functions"},{"title":"Using FrogBot outside Next.js","sidebarTitle":"Outside Next.js","href":"/local-api/outside-nextjs"}]},{"group":"REST API","expanded":false,"pages":[{"title":"REST API","sidebarTitle":"Overview","href":"/rest-api/overview"}]},{"group":"GraphQL","expanded":false,"pages":[{"title":"Enable GraphQL","sidebarTitle":"Enable GraphQL","href":"/graphql/enable"},{"title":"GraphQL Overview","sidebarTitle":"Overview","href":"/graphql/overview"},{"title":"GraphQL Schema","sidebarTitle":"GraphQL Schema","href":"/graphql/graphql-schema"},{"title":"Adding your own Queries and Mutations","sidebarTitle":"Custom Queries and Mutations","href":"/graphql/extending"}]},{"group":"Queries","expanded":false,"pages":[{"title":"Querying your Documents","sidebarTitle":"Overview","href":"/queries/overview"},{"title":"Depth","sidebarTitle":"Depth","href":"/queries/depth"},{"title":"Pagination","sidebarTitle":"Pagination","href":"/queries/pagination"},{"title":"Select","sidebarTitle":"Select","href":"/queries/select"},{"title":"Sort","sidebarTitle":"Sort","href":"/queries/sort"}]}]},{"group":"Features","pages":[{"group":"Admin","expanded":false,"pages":[{"title":"Admin panel","sidebarTitle":"Overview","href":"/admin/overview"},{"title":"Admin navigation","sidebarTitle":"Admin navigation","href":"/admin/admin-navigation"},{"title":"Collection board","href":"/admin/collection-board"},{"title":"Collection calendar","href":"/admin/collection-calendar"}]},{"group":"Authentication","expanded":false,"pages":[{"title":"Authentication Overview","sidebarTitle":"Overview","href":"/authentication/overview"},{"title":"OAuth sign-in","sidebarTitle":"Sign-in","href":"/authentication/sign-in"},{"title":"Authentication Operations","sidebarTitle":"Operations","href":"/authentication/operations"},{"title":"JWT Strategy","sidebarTitle":"JWT Strategy","href":"/authentication/jwt"},{"title":"Cookie Strategy","sidebarTitle":"Cookie Strategy","href":"/authentication/cookies"},{"title":"Authentication Emails","sidebarTitle":"Email Verification","href":"/authentication/email"},{"title":"API Key Strategy","sidebarTitle":"API Key Strategy","href":"/authentication/api-keys"},{"title":"Token Data","sidebarTitle":"Token Data","href":"/authentication/token-data"},{"title":"Custom Strategies","sidebarTitle":"Custom Strategies","href":"/authentication/custom-strategies"}]},{"group":"Upload","expanded":false,"pages":[{"title":"Uploads","sidebarTitle":"Overview","href":"/upload/overview"},{"title":"Storage Adapters","sidebarTitle":"Storage Adapters","description":"FrogBot provides additional storage adapters to handle file uploads. These adapters allow you to store files in different locations, such as Amazon S3, Vercel Blob Storage, Google Cloud Storage, and more.","href":"/upload/storage-adapters"},{"title":"Files","sidebarTitle":"Files","href":"/upload/files"}]},{"group":"Jobs Queue","expanded":false,"pages":[{"title":"Jobs","description":"Queue tasks and workflows, wait for approvals or deadlines, and recover interrupted jobs.","href":"/jobs-queue/overview"},{"title":"Job workers","href":"/jobs-queue/workers"}]},{"group":"Versions","expanded":false,"pages":[{"title":"Versions","sidebarTitle":"Overview","href":"/versions/overview"},{"title":"Drafts","sidebarTitle":"Drafts","href":"/versions/drafts"},{"title":"Autosave","sidebarTitle":"Autosave","href":"/versions/autosave"}]},{"group":"Email","expanded":false,"pages":[{"title":"Email","sidebarTitle":"Overview","href":"/email/overview"}]},{"group":"Trash","expanded":false,"pages":[{"title":"Trash","sidebarTitle":"Overview","href":"/trash/overview"}]},{"group":"TypeScript","expanded":false,"pages":[{"title":"TypeScript - Overview","sidebarTitle":"Overview","href":"/typescript/overview"},{"title":"Generating TypeScript Interfaces","sidebarTitle":"Generating Types","href":"/typescript/generating-types"}]},{"group":"Troubleshooting","expanded":false,"pages":[{"title":"Troubleshooting","sidebarTitle":"Troubleshooting","href":"/troubleshooting/troubleshooting"}]},{"group":"Custom Components","expanded":false,"pages":[{"title":"Swap in your own React components","href":"/custom-components/overview"},{"title":"Root Components","href":"/custom-components/root-components"},{"title":"Swap in your own React Context providers","href":"/custom-components/custom-providers"},{"title":"Customizing Views","href":"/custom-components/custom-views"},{"title":"Dashboard Widgets","href":"/custom-components/dashboard"},{"title":"Document Views","href":"/custom-components/document-views"},{"title":"Edit View","href":"/custom-components/edit-view"},{"title":"List View","href":"/custom-components/list-view"}]},{"group":"Rich Text","expanded":false,"pages":[{"title":"Rich Text Editor","sidebarTitle":"Overview","href":"/rich-text/overview"},{"title":"Official Features","sidebarTitle":"Official Features","href":"/rich-text/official-features"},{"title":"Lexical Converters","sidebarTitle":"Converters","href":"/rich-text/converters"},{"title":"Converting JSX","sidebarTitle":"Converting JSX","href":"/rich-text/converting-jsx"},{"title":"Converting HTML","sidebarTitle":"Converting HTML","href":"/rich-text/converting-html"},{"title":"Converting Markdown","sidebarTitle":"Converting Markdown","href":"/rich-text/converting-markdown"},{"title":"Converting Plain Text","sidebarTitle":"Converting Plain Text","href":"/rich-text/converting-plaintext"},{"title":"Blocks","sidebarTitle":"Blocks","href":"/rich-text/blocks"},{"title":"Custom Features","sidebarTitle":"Custom Features","href":"/rich-text/custom-features"},{"title":"Rendering on demand (Experimental)","sidebarTitle":"Rendering on demand","href":"/rich-text/rendering-on-demand"},{"title":"Views (Experimental)","sidebarTitle":"Views","href":"/rich-text/views"}]},{"group":"Live Preview","expanded":false,"pages":[{"title":"Live Preview","sidebarTitle":"Overview","href":"/live-preview/overview"},{"title":"Implementing Live Preview in your frontend","sidebarTitle":"Frontend","href":"/live-preview/frontend"},{"title":"Server-side Live Preview","sidebarTitle":"Server-side","href":"/live-preview/server"},{"title":"Client-side Live Preview","sidebarTitle":"Client-side","href":"/live-preview/client"}]},{"group":"AI","expanded":false,"pages":[{"title":"AI","sidebarTitle":"AI","href":"/ai/overview"}]},{"group":"Agents","expanded":false,"pages":[{"title":"Agents","sidebarTitle":"Agents","href":"/agents/overview"}]},{"group":"Chat","expanded":false,"pages":[{"title":"Chat persistence","sidebarTitle":"Overview","href":"/chat/overview"},{"title":"Ask the user questions","sidebarTitle":"Questions","href":"/chat/questions"},{"title":"Turns and queued messages","sidebarTitle":"Turns and queues","href":"/chat/turns"},{"title":"Chat manifest","sidebarTitle":"Manifest","api":"GET https://app.frogbot.ai/api/frogbot","href":"/chat/manifest"},{"title":"Training data export","sidebarTitle":"Training data","href":"/chat/training-data"},{"title":"Install the chat UI","sidebarTitle":"UI installation","href":"/chat/ui-installation"},{"title":"Set up the chat provider","sidebarTitle":"Provider setup","href":"/chat/ui-provider"},{"title":"Render Chat","sidebarTitle":"Chat component","href":"/chat/ui-chat"},{"title":"Theme and white-label the chat UI","sidebarTitle":"Theming","href":"/chat/ui-theming"},{"title":"Register tools and artifacts","sidebarTitle":"Tools and artifacts","href":"/chat/ui-registries"},{"title":"Build your own chat shell","sidebarTitle":"Build your own shell","href":"/chat/ui-custom-shell"}]},{"group":"MCP","expanded":false,"pages":[{"title":"MCP servers","sidebarTitle":"MCP servers","href":"/mcp/overview"}]},{"group":"Connections","expanded":false,"pages":[{"title":"Connections","sidebarTitle":"Connections","href":"/connections/overview"}]},{"group":"Pieces","expanded":false,"pages":[{"title":"Pieces","sidebarTitle":"Pieces","href":"/pieces/overview"},{"title":"Available pieces","sidebarTitle":"Available pieces","href":"/pieces/index"},{"title":"Triggers","href":"/pieces/triggers"},{"title":"Web search via pieces","sidebarTitle":"Web search","href":"/pieces/web-search"},{"title":"Slack","href":"/pieces/slack"},{"title":"Discord","href":"/pieces/discord"},{"title":"Microsoft Teams","href":"/pieces/teams"},{"title":"Telegram","href":"/pieces/telegram"},{"title":"GitHub","href":"/pieces/github"},{"title":"Linear","href":"/pieces/linear"},{"title":"Channel questions","href":"/pieces/channel-questions"}]}]},{"group":"Ecosystem","pages":[{"group":"Plugins","expanded":false,"pages":[{"title":"Plugins","sidebarTitle":"Overview","href":"/plugins/overview"},{"title":"AI policy","href":"/plugins/ai-policy"},{"title":"API keys","sidebarTitle":"API keys","href":"/plugins/api-keys"},{"title":"Audit log","href":"/plugins/audit-log"},{"title":"AI request capture","href":"/plugins/capture"},{"title":"Dojo","href":"/plugins/dojo"},{"title":"Roles","sidebarTitle":"Roles","href":"/plugins/roles"},{"title":"Usage reports","href":"/plugins/usage-reports"},{"title":"MCP server","sidebarTitle":"MCP server","href":"/plugins/mcp"},{"title":"Import and export","href":"/plugins/import-export"},{"title":"Nested documents","href":"/plugins/nested-docs"},{"title":"Redirects","href":"/plugins/redirects"},{"title":"Sentry","href":"/plugins/sentry"},{"title":"SEO","href":"/plugins/seo"},{"title":"Stripe","href":"/plugins/stripe"},{"title":"Building Your Own Plugin","sidebarTitle":"Build Your Own","href":"/plugins/build-your-own"}]},{"group":"Gateway","expanded":false,"pages":[{"title":"Gateway","sidebarTitle":"Overview","href":"/gateway/overview"},{"title":"Providers","sidebarTitle":"Providers","href":"/gateway/providers"},{"title":"Configuration","sidebarTitle":"Configuration","href":"/gateway/configuration"},{"title":"Embedding","sidebarTitle":"Embedding","href":"/gateway/embedding"},{"title":"Hooks","sidebarTitle":"Hooks","href":"/gateway/hooks"},{"title":"Observability","sidebarTitle":"Observability","href":"/gateway/observability"},{"title":"Errors","sidebarTitle":"Errors","href":"/gateway/errors"}]},{"group":"Agent Skills","expanded":false,"pages":[{"title":"Coding agents","href":"/skills/coding-agents"}]}]},{"group":"Deployment","pages":[{"group":"Deployment","expanded":false,"pages":[{"title":"Deployment","sidebarTitle":"Deployment","href":"/deployment/overview"}]}]}]},{"tab":"Cloud","pages":[{"title":"Cloud","href":"/subscription-intro"}]}]},"basePath":"","title":"Files - FrogBot Docs","buildId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","deploymentId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","dynamics":[],"chunks":[]}