There’s one client, and a few ways to reach it. @flynetdev/core is the foundation; everything else is built on it or points back to it. Build on the layer that matches your stack — they compose, they don’t compete.
@flynetdev/core is the supported way to call Flynet — a typed TypeScript client with both auth schemes built in (X-API-Key Discovery, OAuth member context), the OAuth flow, typed errors, and money and pagination helpers. Use it directly from any backend or non-React app. Don’t hand-roll HTTP against the API; the client is the contract.
@flynetdev/react is @flynetdev/core plus a data and UI layer — a provider that manages caching, hooks, and drop-in components. It’s the fast path to rendering discovery and member context, and it exposes the underlying core client when you need to drop down a level.
@flynetdev/core is generated from Flynet’s API contract and hand-finished, so its types match the live API and stay in sync as it evolves. Building on the client — rather than raw HTTP — is how your integration inherits that.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Flynet Docs","colors":{"primary":"#0E0E0E","light":"#FFFFFF","dark":"#0E0E0E"},"logo":{"light":"https://mintcdn.com/flynet-dev-portal/uuxy48R676LWKKZD/logo/light.svg?fit=max\u0026auto=format\u0026n=uuxy48R676LWKKZD\u0026q=85\u0026s=738e188897c678733a8ab596e302149a","dark":"https://mintcdn.com/flynet-dev-portal/uuxy48R676LWKKZD/logo/dark.svg?fit=max\u0026auto=format\u0026n=uuxy48R676LWKKZD\u0026q=85\u0026s=219771c4a811c814269511fdc59e0634"},"favicon":"https://mintcdn.com/flynet-dev-portal/uuxy48R676LWKKZD/favicon.svg?fit=max\u0026auto=format\u0026n=uuxy48R676LWKKZD\u0026q=85\u0026s=98693d2c8a56a762e339c3811acb84e7","api":{"playground":{"display":"interactive"},"examples":{"defaults":"required","languages":["curl","javascript","typescript"]},"mdx":{"server":"https://api.staging.blackbird.xyz/flynet/v1"}},"navbar":{"links":[{"href":"mailto:support@blackbird.xyz","label":"Support"}],"primary":{"type":"button","label":"Blackbird","href":"https://www.blackbird.xyz/"}},"footer":{"socials":{"x":"https://x.com/blackbird_xyz","instagram":"https://www.instagram.com/blackbird_xyz","linkedin":"https://www.linkedin.com/company/blackbirdlabsinc"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Build","icon":"hammer","href":"https://flynet.org/build"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"flynet-dev-portal","hasAudioNarration":false,"actualSubdomain":"flynet-dev-portal","customDomains":["docs.flynet.org"],"gitSource":{"type":"github","owner":"blackbird-labs-inc","repo":"flynet","deployBranch":"main","contentDirectory":"apps/docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad8efaa67c9fc8d68603646","collectionId":"1ca46f76-0be1-40f9-bacc-1c99638b1f4a","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad8efaa67c9fc8d68603646"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ad8efaa67c9fc8d68603646","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"default","tag":"API Reference","count":26},{"language":"default","tag":"Cookbook","count":16},{"language":"default","tag":"Concepts","count":9},{"language":"default","tag":"Quickstart","count":7},{"language":"default","tag":"Payments","count":6},{"language":"default","tag":"Mains","count":6},{"language":"default","tag":"Resources","count":6},{"language":"default","tag":"Specials","count":5},{"language":"default","tag":"Users","count":5},{"language":"default","tag":"Build with AI","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"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":"editor-v7-file-tree","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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"editor-agent-model-picker","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":"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}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"build-with-ai/architecture","slug":"/build-with-ai/architecture","pageMetadata":{"title":"Architecture","description":"How the Flynet SDK and agent tooling are layered — and which layer to build on.","icon":"diagram-project","keywords":["sdk","architecture","@flynetdev/core","@flynetdev/react","mcp"],"href":"/build-with-ai/architecture"},"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: \"How the Flynet SDK and agent tooling are layered — and which layer to build on.\"\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`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,Heading,Mermaid,Note,Table}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`1`,id:`architecture`,children:`Architecture`}),`\n`,_jsxs(_components.p,{children:[`There’s one client, and a few ways to reach it. `,_jsx(_components.code,{children:`@flynetdev/core`}),` is the foundation; everything else is built on it or points back to it. Build on the layer that matches your stack — they compose, they don’t compete.`]}),`\n`,_jsx(Mermaid,{chart:`graph TD\n core[\"@flynetdev/core\"] --> react[\"@flynetdev/react\"]\n core --> apimcp[\"API MCP\"]\n core --> backend[\"Your backend\"]\n react --> app[\"Your React app\"]`}),`\n`,_jsx(Heading,{level:`2`,id:`build-on-the-core-client`,children:`Build on the core client`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`@flynetdev/core`}),` is the supported way to call Flynet — a typed TypeScript client with both auth schemes built in (`,_jsx(_components.code,{children:`X-API-Key`}),` Discovery, OAuth member context), the OAuth flow, typed errors, and money and pagination helpers. Use it directly from any backend or non-React app. Don’t hand-roll HTTP against the API; the client is the contract.`]}),`\n`,_jsx(Heading,{level:`2`,id:`add-the-react-layer-for-ui`,children:`Add the React layer for UI`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`@flynetdev/react`}),` is `,_jsx(_components.code,{children:`@flynetdev/core`}),` plus a data and UI layer — a provider that manages caching, hooks, and drop-in components. It’s the fast path to rendering discovery and member context, and it exposes the underlying core client when you need to drop down a level.`]}),`\n`,_jsx(Heading,{level:`2`,id:`reach-the-same-core-from-an-agent`,children:`Reach the same core from an agent`}),`\n`,_jsx(_components.p,{children:`The agent tooling doesn’t add an API — it puts the same client in front of an AI coding agent:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`API MCP`}),` is `,_jsx(_components.code,{children:`@flynetdev/core`}),` wrapped as agent tools.`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`agent skill`}),` and `,_jsx(_components.strong,{children:`Cursor rules`}),` teach the agent that same auth model and point it at `,_jsx(_components.code,{children:`@flynetdev/core`}),` and `,_jsx(_components.code,{children:`@flynetdev/react`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`Docs MCP`}),` keeps the agent’s knowledge of all of it current.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`An agent writing Flynet code and a developer writing it are building against the same client, the same way.`}),`\n`,_jsx(Heading,{level:`2`,id:`which-layer-to-build-on`,children:`Which layer to build on`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`You’re building`}),_jsx(_components.th,{children:`Build on`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A React app`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`@flynetdev/react`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A backend or non-React client`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`@flynetdev/core`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Anything, with an AI agent`}),_jsxs(_components.td,{children:[`the `,_jsx(_components.a,{href:`/build-with-ai/overview`,children:`Build with AI`}),` surfaces`]})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`@flynetdev/core`}),` is generated from Flynet’s API contract and hand-finished, so its types match the live API and stay in sync as it evolves. Building on the client — rather than raw HTTP — is how your integration inherits that.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`next`,children:`Next`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Set up the MCP servers →`,icon:`server`,href:`/build-with-ai/mcp-servers`}),_jsx(Card,{title:`TypeScript client →`,icon:`code`,href:`/concepts/typescript-client`})]})]})}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":"Architecture","description":"How the Flynet SDK and agent tooling are layered — and which layer to build on.","icon":"diagram-project","keywords":["sdk","architecture","@flynetdev/core","@flynetdev/react","mcp"],"href":"/build-with-ai/architecture"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Architecture","slug":"architecture","depth":1,"children":[]},{"title":"Build on the core client","slug":"build-on-the-core-client","depth":2,"children":[]},{"title":"Add the React layer for UI","slug":"add-the-react-layer-for-ui","depth":2,"children":[]},{"title":"Reach the same core from an agent","slug":"reach-the-same-core-from-an-agent","depth":2,"children":[]},{"title":"Which layer to build on","slug":"which-layer-to-build-on","depth":2,"children":[]},{"title":"Next","slug":"next","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"flynet-dev-portal","siteName":"Flynet Docs","title":"Architecture - Flynet Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-10T14:26:34.334Z","originalFileLocation":"build-with-ai/architecture.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=\"How the Flynet SDK and agent tooling are layered — and which layer to build on.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Flynet 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/flynet-dev-portal/p_8xChx1YBwh7DFC/_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/flynet-dev-portal/p_8xChx1YBwh7DFC/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/flynet-dev-portal/p_8xChx1YBwh7DFC/_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/flynet-dev-portal/p_8xChx1YBwh7DFC/_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/flynet-dev-portal/p_8xChx1YBwh7DFC/_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/flynet-dev-portal/p_8xChx1YBwh7DFC/_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/flynet-dev-portal/p_8xChx1YBwh7DFC/_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/flynet-dev-portal/p_8xChx1YBwh7DFC/_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/flynet-dev-portal/p_8xChx1YBwh7DFC/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Architecture - Flynet Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"How the Flynet SDK and agent tooling are layered — and which layer to build on.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Flynet Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.flynet.org/build-with-ai/architecture\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://flynet-dev-portal.mintlify.app/_mintlify/api/og/v2?division=Build+with+AI\u0026amp;title=Architecture\u0026amp;description=How+the+Flynet+SDK+and+agent+tooling+are+layered+%E2%80%94+and+which+layer+to+build+on.\u0026amp;theme=240223a0989a7b68c7879940\u0026amp;signature=20d6bb872e6864a68a1de639e722bc74abcbee31a22f7ea4f4329f8132390782\">\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=\"Architecture - Flynet Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"How the Flynet SDK and agent tooling are layered — and which layer to build on.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://flynet-dev-portal.mintlify.app/_mintlify/api/og/v2?division=Build+with+AI\u0026amp;title=Architecture\u0026amp;description=How+the+Flynet+SDK+and+agent+tooling+are+layered+%E2%80%94+and+which+layer+to+build+on.\u0026amp;theme=240223a0989a7b68c7879940\u0026amp;signature=20d6bb872e6864a68a1de639e722bc74abcbee31a22f7ea4f4329f8132390782\">\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/flynet-dev-portal/p_8xChx1YBwh7DFC/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Flynet Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0E0E0E\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.flynet.org/build-with-ai/architecture\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/build-with-ai/architecture.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.flynet.org/#organization\",\"name\":\"Flynet Docs\",\"url\":\"https://docs.flynet.org\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/flynet-dev-portal/uuxy48R676LWKKZD/logo/light.svg?fit=max\u0026auto=format\u0026n=uuxy48R676LWKKZD\u0026q=85\u0026s=738e188897c678733a8ab596e302149a\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.flynet.org#website\",\"name\":\"Flynet Docs\",\"url\":\"https://docs.flynet.org\",\"publisher\":{\"@id\":\"https://docs.flynet.org/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.flynet.org/build-with-ai/architecture#webpage\",\"url\":\"https://docs.flynet.org/build-with-ai/architecture\",\"name\":\"Architecture\",\"description\":\"How the Flynet SDK and agent tooling are layered — and which layer to build on.\",\"dateModified\":\"2026-06-10T14:26:34.334Z\",\"isPartOf\":{\"@id\":\"https://docs.flynet.org#website\"},\"breadcrumb\":{\"@id\":\"https://docs.flynet.org/build-with-ai/architecture#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.flynet.org/build-with-ai/architecture#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Build with AI\",\"item\":\"https://docs.flynet.org/build-with-ai/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Architecture\",\"item\":\"https://docs.flynet.org/build-with-ai/architecture\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.flynet.org/build-with-ai/architecture#article\",\"headline\":\"Architecture\",\"name\":\"Architecture\",\"description\":\"How the Flynet SDK and agent tooling are layered — and which layer to build on.\",\"url\":\"https://docs.flynet.org/build-with-ai/architecture\",\"mainEntityOfPage\":{\"@id\":\"https://docs.flynet.org/build-with-ai/architecture#webpage\"},\"dateModified\":\"2026-06-10T14:26:34.334Z\",\"keywords\":\"sdk, architecture, @flynetdev/core, @flynetdev/react, mcp\",\"publisher\":{\"@id\":\"https://docs.flynet.org/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.flynet.org#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Flynet Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Flynet Docs","nav":{"global":{"anchors":[{"anchor":"Build","icon":"hammer","href":"https://flynet.org/build"}]},"tabs":[{"tab":"Home","pages":[{"title":"Home","href":""}]},{"tab":"Quickstart","groups":[{"group":" ","pages":[{"title":"Getting started","icon":"rocket","href":"/getting-started"},{"title":"Quickstart","href":"/quickstart"}]},{"group":"Build with AI","pages":[{"title":"Build with AI","icon":"sparkles","href":"/build-with-ai/overview"},{"title":"Walkthrough: ship with Claude","icon":"rocket","href":"/build-with-ai/walkthrough"},{"title":"MCP servers","icon":"server","href":"/build-with-ai/mcp-servers"},{"title":"Agent skills \u0026 rules","description":"Install the Flynet agent skill for Claude Code and the Flynet rules for Cursor.","icon":"wand-magic-sparkles","href":"/build-with-ai/agent-skills"},{"title":"Architecture","icon":"diagram-project","href":"/build-with-ai/architecture"}]}]},{"tab":"Concepts","pages":[{"title":"Concepts","href":"/concepts/authentication"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"tab":"Cookbook","pages":[{"title":"Cookbook","href":"/recipes"}]},{"tab":"Resources","pages":[{"title":"Resources","href":"/resources/changelog"}]}]},"title":"Architecture - Flynet Docs","buildId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","deploymentId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","dynamics":[],"chunks":[]}