[{"data":1,"prerenderedAt":901},["ShallowReactive",2],{"docs-navigation":3,"docs-search-sections":92,"docs-page:\u002Fdocs\u002Finstallation\u002Fcloudflare":498,"docs-surround:\u002Fdocs\u002Finstallation\u002Fcloudflare":896},[4],{"title":5,"path":6,"stem":7,"children":8,"page":-1},"Docs","\u002Fdocs","docs",[9,13,24,34,44,59,79],{"title":10,"path":6,"stem":11,"icon":12},"Documentation","docs\u002Findex","i-ph-book-open-text",{"title":14,"path":15,"stem":16,"children":17,"page":23},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[18],{"title":19,"path":20,"stem":21,"icon":22},"Choose a deployment","\u002Fdocs\u002Fgetting-started\u002Fdeployment-options","docs\u002F1.getting-started\u002F1.deployment-options","i-ph-git-branch",false,{"title":25,"path":26,"stem":27,"children":28,"page":23},"Installation","\u002Fdocs\u002Finstallation","docs\u002F2.installation",[29],{"title":30,"path":31,"stem":32,"icon":33},"Deploy to Cloudflare","\u002Fdocs\u002Finstallation\u002Fcloudflare","docs\u002F2.installation\u002F1.cloudflare","i-ph-cloud",{"title":35,"path":36,"stem":37,"children":38,"page":23},"Configuration","\u002Fdocs\u002Fconfiguration","docs\u002F3.configuration",[39],{"title":40,"path":41,"stem":42,"icon":43},"Environment variables","\u002Fdocs\u002Fconfiguration\u002Fenvironment-variables","docs\u002F3.configuration\u002F1.environment-variables","i-ph-sliders-horizontal",{"title":45,"path":46,"stem":47,"children":48,"page":23},"Operations","\u002Fdocs\u002Foperations","docs\u002F4.operations",[49,54],{"title":50,"path":51,"stem":52,"icon":53},"Verify an installation","\u002Fdocs\u002Foperations\u002Fverification","docs\u002F4.operations\u002F1.verification","i-ph-checks",{"title":55,"path":56,"stem":57,"icon":58},"Backups and upgrades","\u002Fdocs\u002Foperations\u002Fbackups-and-upgrades","docs\u002F4.operations\u002F2.backups-and-upgrades","i-ph-arrows-clockwise",{"title":60,"path":61,"stem":62,"children":63,"page":23},"Product Guide","\u002Fdocs\u002Fproduct-guide","docs\u002F5.product-guide",[64,69,74],{"title":65,"path":66,"stem":67,"icon":68},"Apps","\u002Fdocs\u002Fproduct-guide\u002Fapps","docs\u002F5.product-guide\u002F1.apps","i-ph-app-window",{"title":70,"path":71,"stem":72,"icon":73},"Agents","\u002Fdocs\u002Fproduct-guide\u002Fagents","docs\u002F5.product-guide\u002F2.agents","i-ph-robot",{"title":75,"path":76,"stem":77,"icon":78},"Tasks","\u002Fdocs\u002Fproduct-guide\u002Ftasks","docs\u002F5.product-guide\u002F3.tasks","i-ph-kanban",{"title":80,"path":81,"stem":82,"children":83,"page":23},"Roadmap","\u002Fdocs\u002Froadmap","docs\u002F6.roadmap",[84,88],{"title":85,"path":86,"stem":87,"icon":73},"Agents roadmap","\u002Fdocs\u002Froadmap\u002Fagents","docs\u002F6.roadmap\u002F1.agents",{"title":89,"path":90,"stem":91,"icon":68},"Apps roadmap","\u002Fdocs\u002Froadmap\u002Fapps","docs\u002F6.roadmap\u002F2.apps",[93,97,103,108,113,118,121,126,131,136,141,146,151,156,161,166,169,174,179,184,189,194,199,204,209,214,219,222,227,232,237,242,247,252,257,260,265,270,273,278,282,287,292,297,302,307,310,315,320,325,330,335,340,345,348,353,358,363,368,373,377,382,387,392,397,400,405,410,415,420,425,428,432,437,442,447,452,455,460,465,470,475,478,483,488,493],{"id":20,"title":19,"titles":94,"content":95,"level":96},[],"Choose between the guided Cloudflare installer and a manual GitHub deployment. Discoflare has one supported production runtime: Cloudflare Workers with D1, R2, KV, Durable Objects, Workflows, Workers AI, and Containers. Choose how you want to provision that runtime.",1,{"id":98,"title":99,"titles":100,"content":101,"level":102},"\u002Fdocs\u002Fgetting-started\u002Fdeployment-options#guided-installer","Guided installer",[19],"Choose the guided installer at discoflare.com\u002Fdeploy when you want Discoflare to provision the account-specific resources and workspace mail configuration for you. CapabilityRuntimeWeb application and APIWorkersDurable workspace dataD1Attachments and recorded audioR2Live rooms, presence, and coordinationDurable ObjectsShort-lived connection ticketsKVAgent inferenceWorkers AIDurable Agent runsWorkflowsAgent command executionContainers The installer uses temporary Cloudflare OAuth access to provision the bindings, deploy the Worker, attach a custom hostname, configure workspace mail, apply migrations, and return a private owner-setup link. The installed Worker does not retain the Cloudflare access token. Requirements: a Cloudflare account, an active zone in that account, and the Workers Paid plan for Agent Containers.",2,{"id":104,"title":105,"titles":106,"content":107,"level":102},"\u002Fdocs\u002Fgetting-started\u002Fdeployment-options#github-workers-builds","GitHub \u002F Workers Builds",[19],"Choose the repository-based method when you want to own a fork and the Workers Builds configuration. This is a manual deployment method. The GitHub button hands the source repository to Cloudflare; it does not perform the Discoflare installer's account setup. You must create or select the D1, R2, and KV resources, adapt the Wrangler configuration, configure every required binding and secret, set the build and deploy commands, attach the hostname, configure optional email and OAuth services, run migrations, and verify the Worker yourself. The result is the same complete Cloudflare runtime when all of those steps are configured correctly. The difference is who performs and verifies provisioning. Requirements: a Cloudflare Workers Paid account, an accessible GitHub fork or repository, Workers Builds, and comfort managing Cloudflare resources and secrets manually.",{"id":109,"title":110,"titles":111,"content":112,"level":102},"\u002Fdocs\u002Fgetting-started\u002Fdeployment-options#responsibility-comparison","Responsibility comparison",[19],"Guided installerGitHub \u002F Workers BuildsRuntimeCloudflareCloudflareSource repository requiredNoYesResource provisioningInstallerYouBindings and secretsInstaller plus optional settingsYouCustom hostnameInstallerYouWorkspace mail routingInstallerYouMigrations and readiness checksInstaller plus operator verificationYou A successful repository connection or Workers Builds run proves only that source reached Cloudflare. Record the resource IDs, bindings, secrets, migration result, Worker version, hostname, health response, owner setup, and browser checks before calling a manual installation complete.",{"id":114,"title":115,"titles":116,"content":117,"level":102},"\u002Fdocs\u002Fgetting-started\u002Fdeployment-options#repository-visibility","Repository visibility",[19],"The guided Cloudflare installer is served by discoflare.com; it does not require this marketing-site repository to be public. The alternative Cloudflare Deploy Button builds from the public, MIT-licensed Discoflare application repository. Only the repository selected as a build source needs to be accessible to that platform. Publishing rendered documentation does not publish this website's private repository, server code, or environment values.",{"id":31,"title":30,"titles":119,"content":120,"level":96},[],"Install the complete Discoflare runtime and verify every readiness boundary. The guided installer at discoflare.com\u002Fdeploy provisions Discoflare directly into your Cloudflare account. It uses a temporary OAuth session for provisioning; the installed Worker does not retain the Cloudflare access token.",{"id":122,"title":123,"titles":124,"content":125,"level":102},"\u002Fdocs\u002Finstallation\u002Fcloudflare#before-you-begin","Before you begin",[30],"You need: a Cloudflare account with Workers Paid enabled;an active DNS zone in that account;an unused application hostname, such as chat.example.com;an email address for the first workspace owner; andan unused email subdomain if you want workspace mail. The installer stops instead of replacing a hostname attached to another Worker, non-Cloudflare MX records, or another enabled catch-all email route.",{"id":127,"title":128,"titles":129,"content":130,"level":102},"\u002Fdocs\u002Finstallation\u002Fcloudflare#_1-connect-the-account","1. Connect the account",[30],"Open Deploy Discoflare, select Connect Cloudflare, approve the requested permissions, and return to the installer. The OAuth consent includes email-routing and email-sending permissions because the workspace-email choice is made after account discovery. Turning Workspace email off prevents the installer from using those permissions or changing email configuration, but it does not narrow the already-approved OAuth scope. Select the account and active domain that will own the workspace. The installer must list the expected Cloudflare account and active zone. If either is missing, do not continue with a different account; correct the Cloudflare membership or zone status first.",{"id":132,"title":133,"titles":134,"content":135,"level":102},"\u002Fdocs\u002Finstallation\u002Fcloudflare#_2-describe-the-workspace","2. Describe the workspace",[30],"Choose: a Worker name;the public workspace name;the application subdomain;whether to enable workspace email and, if enabled, its subdomain and first mailbox;invite-only or open registration; andthe first owner's email address. These choices become deployment configuration. They are not inferred from the marketing site repository.",{"id":137,"title":138,"titles":139,"content":140,"level":102},"\u002Fdocs\u002Finstallation\u002Fcloudflare#_3-install","3. Install",[30],"Select Install or update. The installer loads a pinned Discoflare release, provisions its bindings, enables the selected email routing, deploys the Worker, attaches the hostname, and returns a private owner-setup link. The page must show Installed Discoflare version or Updated to Discoflare version and provide a workspace link. Treat an OAuth redirect, successful build, or created Worker by itself as partial progress, not completed installation.",{"id":142,"title":143,"titles":144,"content":145,"level":102},"\u002Fdocs\u002Finstallation\u002Fcloudflare#_4-check-platform-readiness","4. Check platform readiness",[30],"Before creating the owner, open the health endpoint on the workspace origin: curl -fsS https:\u002F\u002Fchat.example.com\u002Fapi\u002Fsetup\u002Fhealth For a fresh guided installation, the response should include: {\n  \"ok\": true,\n  \"ready\": false,\n  \"migrated\": true,\n  \"ownerSetup\": true\n} ok: true proves the database binding exists and migrations completed. It does not mean owner setup is finished.",{"id":147,"title":148,"titles":149,"content":150,"level":102},"\u002Fdocs\u002Finstallation\u002Fcloudflare#_5-claim-the-workspace","5. Claim the workspace",[30],"Open the private setup link returned by the installer. The claim is carried in the URL fragment and removed from the address bar before it is submitted. Create the owner name and password. The owner and workspace are created together before the workspace is marked ready. When workspace email is enabled, the first mailbox is provisioned during the same setup. The claim is single-use by state: after setup, another claim attempt is rejected. Reload \u002Fapi\u002Fsetup\u002Fhealth. It should now report ok: true, ready: true, and at least one user. Then sign out and sign back in with the owner credentials; this proves more than an existing browser session.",{"id":152,"title":153,"titles":154,"content":155,"level":102},"\u002Fdocs\u002Finstallation\u002Fcloudflare#_6-run-workspace-checks","6. Run workspace checks",[30],"Perform one observable check for each capability you plan to use: Create a channel and send a message.Reload the page and confirm the message persists.Upload a small attachment and download it again.If using open registration, test it in a private browser window with a second address.If using invite-only registration, confirm an uninvited identity does not become an active member.Create an Agent and a Task only after the Sandbox image has had several minutes to provision. If the first Agent run reports that the Sandbox is unavailable immediately after deployment, wait for provisioning and retry. Chat readiness and Agent Container readiness are separate checks.",{"id":157,"title":158,"titles":159,"content":160,"level":102},"\u002Fdocs\u002Finstallation\u002Fcloudflare#optional-integrations","Optional integrations",[30],"Configure authentication methods in Workspace Settings → Authentication and RealtimeKit in Workspace Settings → Huddles. The Huddles screen includes a read-only connection test. Text chat works without RealtimeKit. Deployment-managed provider credentials override credentials saved in the workspace UI and appear as managed by deployment. See Environment variables.",{"id":162,"title":163,"titles":164,"content":165,"level":102},"\u002Fdocs\u002Finstallation\u002Fcloudflare#manual-github-deployment","Manual GitHub deployment",[30],"The Deploy with GitHub option is for operators who want to own a repository fork and Workers Builds configuration. It is not another guided installer. The button transfers the public source to Cloudflare, but you must manually create or select the storage resources, adapt wrangler.jsonc, configure bindings and secrets, choose the build and deploy commands, attach the hostname, configure optional email routing and providers, apply migrations, create the first-owner setup claim, and run the readiness checks above. Use pnpm run build as the Workers Builds build command and pnpm run deploy:built as the deploy command. Follow the application deployment guide for the current resource checklist. Do not reuse the public sandbox's account-specific resource IDs, names, or hostname in another account. Record the target resource IDs, successful D1 migration, deployed Worker version, hostname, \u002Fapi\u002Fsetup\u002Fhealth response, owner setup, browser realtime, attachment persistence, and Agent Task result separately. html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"id":41,"title":40,"titles":167,"content":168,"level":96},[],"Understand which values configure startup, branding, authentication, notifications, and optional integrations. Environment values are the deployment boundary. Keep secrets in Cloudflare Worker secrets; do not commit them to the application or website repository. Bindings such as D1, R2, KV, Durable Objects, Workflows, Workers AI, Containers, and email delivery are platform resources rather than string values. Environment variables configure how Discoflare uses those bindings; they do not create a missing binding.",{"id":170,"title":171,"titles":172,"content":173,"level":102},"\u002Fdocs\u002Fconfiguration\u002Fenvironment-variables#required-values","Required values",[40],"VariableSetupPurpose and verificationAUTH_SECRETGenerated by the guided installer; required manuallyEncrypts sessions and workspace-managed provider secrets. Use a random value of at least 32 characters and keep it stable. Verify by signing out and back in after setup.PUBLIC_ORIGINUsually derived; optional overrideExact external origin, with scheme and no path, when automatic request-origin detection is not appropriate. Verify that sign-in, API requests, and WebSockets work from that origin.ADMIN_EMAILCollected by the guided installer; required manuallyIntended first owner. Before setup, \u002Fapi\u002Fsetup\u002Fhealth returns a masked owner hint.ADMIN_SETUP_TOKENGenerated by the guided installer; required manuallyPrivate owner claim. Use a random value of at least 32 characters and verify it completes setup once and cannot create another owner afterward. Rotating AUTH_SECRET invalidates sessions and makes provider secrets encrypted in D1 unreadable. Replace those stored provider secrets after an intentional rotation.",{"id":175,"title":176,"titles":177,"content":178,"level":102},"\u002Fdocs\u002Fconfiguration\u002Fenvironment-variables#initial-workspace-and-branding","Initial workspace and branding",[40],"VariableDefaultBehaviorAPP_NAMEDiscoflareName beside the fixed Discoflare mark and in the browser title.APP_TITLEDeployment-specificSign-in headline. Use \\n for a deliberate line break.APP_SUBTITLEDeployment-specificSupporting sign-in copy.ADMIN_WORKSPACEHQFirst workspace name for manual or unattended bootstrap.AUTH_REGISTRATION_MODEinvite_onlyInitial policy. After the authentication settings row exists, the owner controls the policy in the UI. APP_NAME, APP_TITLE, APP_SUBTITLE, and the registration mode are configuration, not secrets.",{"id":180,"title":181,"titles":182,"content":183,"level":102},"\u002Fdocs\u002Fconfiguration\u002Fenvironment-variables#legacy-unattended-bootstrap","Legacy unattended bootstrap",[40],"VariablePurposeADMIN_PASSWORDWith ADMIN_EMAIL, creates the owner automatically when the database is empty. Prefer the setup claim for interactive installations.ADMIN_NAMEDisplay name for unattended bootstrap.ADMIN_HANDLEOptional handle for unattended bootstrap. Both the guided installer and the manual GitHub method should use the private setup claim so the password is chosen on the workspace origin.",{"id":185,"title":186,"titles":187,"content":188,"level":102},"\u002Fdocs\u002Fconfiguration\u002Fenvironment-variables#authentication-providers","Authentication providers",[40],"VariablesProviderGITHUB_CLIENT_ID, GITHUB_CLIENT_SECRETGitHubTWITTER_CLIENT_ID, TWITTER_CLIENT_SECRETXTELEGRAM_CLIENT_ID, TELEGRAM_CLIENT_SECRETTelegramTURNSTILE_SITE_KEY, TURNSTILE_SECRET_KEYCloudflare Turnstile The owner can normally configure these in Workspace Settings → Authentication. Values supplied by the deployment override the corresponding workspace values and cannot be revealed in the UI. Provider callback URLs always use the deployed workspace origin, not discoflare.com: https:\u002F\u002Fchat.example.com\u002Fapi\u002Fauth\u002Fcallback\u002Fgithub\nhttps:\u002F\u002Fchat.example.com\u002Fapi\u002Fauth\u002Fcallback\u002Ftwitter\nhttps:\u002F\u002Fchat.example.com\u002Fapi\u002Fauth\u002Fcallback\u002Ftelegram Use a private browser window, complete the provider redirect, and confirm the resulting membership state. In invite-only mode, an uninvited identity must not become an active member. In open mode, an allowed new identity should become active without an invite.",{"id":190,"title":191,"titles":192,"content":193,"level":102},"\u002Fdocs\u002Fconfiguration\u002Fenvironment-variables#verification-and-password-reset-email","Verification and password-reset email",[40],"VariablePurposeEMAIL_FROMVerified login-email sender.EMAIL_FROM_NAMEHuman-readable sender name. On Cloudflare, delivery additionally requires an onboarded Email Service domain and a restricted Worker send_email binding named EMAIL. The binding is separate from the workspace-mail binding named MAIL_EMAIL. New email signup requires the sender, delivery binding, Turnstile, email login, and either open registration or an Invite. Existing verified users can sign in without sending an email.",{"id":195,"title":196,"titles":197,"content":198,"level":102},"\u002Fdocs\u002Fconfiguration\u002Fenvironment-variables#workspace-mail","Workspace mail",[40],"Variable or bindingPurposeMAIL_DOMAINDomain accepted by the workspace mailboxes, such as chat.example.com.MAIL_ZONE_IDCloudflare zone that owns the mail routing configuration.MAIL_APP_HOSTNAMEPublic Discoflare hostname that receives routed mail.MAIL_DEFAULT_LOCAL_PARTFirst mailbox local part; defaults to inbox.MAIL_EMAILWorker send_email binding used for new outbound mail and replies. The guided installer supplies this group only when Workspace email is enabled. A manual deployment must configure the variables, Email Routing rule, Email Sending domain, and binding together. Omitting the complete group leaves workspace mail disabled without affecting text chat. Send a message from an external address to the configured mailbox, confirm the conversation appears for an authorized member, and send a reply. A healthy Worker or successful owner setup does not prove incoming routing or outbound delivery.",{"id":200,"title":201,"titles":202,"content":203,"level":102},"\u002Fdocs\u002Fconfiguration\u002Fenvironment-variables#web-push","Web Push",[40],"VariablePurposeVAPID_SUBJECTContact URI, normally mailto:admin@example.com.VAPID_PUBLIC_KEYPublic half of one stable VAPID pair.VAPID_PRIVATE_KEYSecret half of the same pair. Generate the pair once with pnpm vapid:generate from the application repository. Rotating either key invalidates existing browser subscriptions.",{"id":205,"title":206,"titles":207,"content":208,"level":102},"\u002Fdocs\u002Fconfiguration\u002Fenvironment-variables#realtimekit-huddles","RealtimeKit huddles",[40],"VariablePurposeREALTIMEKIT_ACCOUNT_IDCloudflare account containing RealtimeKit.REALTIMEKIT_APP_IDRealtimeKit application.REALTIMEKIT_API_KEYCurrent API-token credential.REALTIMEKIT_PRESET_VOICEVoice preset; defaults to voice.REALTIMEKIT_PRESET_AVOptional audio\u002Fvideo preset; defaults to group_call_host.REALTIMEKIT_API_SECRETLegacy Basic Auth path only. The owner can instead configure RealtimeKit in Workspace Settings → Huddles. The saved token is encrypted with AUTH_SECRET. Deployment values override saved settings. Use Test connection in Huddles settings. It performs a read-only request that validates the account, app, token, and configured presets. Text chat remains usable when RealtimeKit is absent.",{"id":210,"title":211,"titles":212,"content":213,"level":102},"\u002Fdocs\u002Fconfiguration\u002Fenvironment-variables#agent-model","Agent model",[40],"AGENT_MODEL is an optional public Worker variable. Agent profiles may override it with another model ID supported by the deployment's Workers AI binding. The default Cloudflare Agent runtime does not require an OpenAI or OpenRouter key.",{"id":215,"title":216,"titles":217,"content":218,"level":102},"\u002Fdocs\u002Fconfiguration\u002Fenvironment-variables#website-installer-environment","Website installer environment",[40],"These server-only values configure the guided installer running at discoflare.com; they are not copied into installed workspaces: VariablePurposeNUXT_CLOUDFLARE_OAUTH_CLIENT_IDPublic identifier for the installer OAuth client.NUXT_CLOUDFLARE_OAUTH_CLIENT_SECRETSecret used by the installer during the OAuth code exchange.NUXT_CLOUDFLARE_OAUTH_SCOPESSpace-separated permissions the installer requests for provisioning. Keep this aligned with the registered Cloudflare OAuth client.NUXT_INSTALLER_SESSION_PASSWORDRandom 32-character-or-longer secret that encrypts temporary installer sessions.NUXT_INSTALLER_ORIGINExact public installer origin, normally https:\u002F\u002Fdiscoflare.com.NUXT_INSTALLER_MANIFEST_URLTrusted release manifest used to pin the application bundle installed into a workspace. The website repository can remain private. Publishing the rendered site and documentation does not expose these runtime values, provided secrets remain in Cloudflare Worker secrets rather than source control or client-side configuration.",{"id":51,"title":50,"titles":220,"content":221,"level":96},[],"Prove platform health, owner setup, persistence, browser behavior, and optional integrations separately. A deployment can build successfully while the workspace is still unusable. Verify Discoflare in layers so a failure points to the boundary that owns it.",{"id":223,"title":224,"titles":225,"content":226,"level":102},"\u002Fdocs\u002Foperations\u002Fverification#_1-platform-health","1. Platform health",[50],"Request the public health endpoint: curl -fsS https:\u002F\u002Fchat.example.com\u002Fapi\u002Fsetup\u002Fhealth Important fields: FieldMeaningokThe database binding exists and its migrations completed.migratedThe current schema is available.readyThe first workspace and owner exist.usersNumber of users currently stored.ownerSetupA valid first-owner setup path is available while the workspace is not ready.bindingsAvailability of storage, live coordination, and Agent bindings.realtimekitEffective Huddles configuration is complete. Inspect the individual bindings fields required by the capability under test. A healthy D1 binding does not prove R2, KV, Durable Objects, Workflows, Workers AI, or Containers are ready.",{"id":228,"title":229,"titles":230,"content":231,"level":102},"\u002Fdocs\u002Foperations\u002Fverification#_2-owner-setup","2. Owner setup",[50],"Before the first owner is created, expect ok: true, ready: false, and ownerSetup: true. Complete the private setup claim, then expect ready: true and users of at least one. After setup, reopen the original claim URL. It must not initialize another workspace owner. Then sign out and sign back in to prove the saved credentials work independently of the setup session.",{"id":233,"title":234,"titles":235,"content":236,"level":102},"\u002Fdocs\u002Foperations\u002Fverification#_3-data-persistence","3. Data persistence",[50],"Create a channel, send a uniquely identifiable message, and upload a small file. Reload the page and retrieve all three. Remember that D1 owns durable facts, R2 owns attachment bytes, Durable Objects coordinate live state, and KV holds short-lived tickets. A test of one binding does not prove the others.",{"id":238,"title":239,"titles":240,"content":241,"level":102},"\u002Fdocs\u002Foperations\u002Fverification#_4-browser-behavior","4. Browser behavior",[50],"In a normal browser session: Sign in as the owner.Send and receive a message without reloading.Open a second browser or private window and verify live delivery and presence.Download the uploaded attachment.Sign out and confirm protected workspace pages are no longer accessible. This distinguishes a reachable health endpoint from a working session, WebSocket, and authorization path.",{"id":243,"title":244,"titles":245,"content":246,"level":102},"\u002Fdocs\u002Foperations\u002Fverification#_5-registration-policy","5. Registration policy",[50],"Test the configured policy using a new identity: Invite only: an uninvited identity must not become an active member.Open signup: a permitted new identity should become active immediately after satisfying the enabled authentication checks. If email verification is enabled, also prove that the verification message arrives and the link can be used once.",{"id":248,"title":249,"titles":250,"content":251,"level":102},"\u002Fdocs\u002Foperations\u002Fverification#_6-optional-capabilities","6. Optional capabilities",[50],"Verify only integrations you enabled: Huddles: run Test connection, then start and end a huddle from two browsers.Push: enable notifications through a direct user action, create a mention from another member, and verify delivery while the target tab is not focused.Cloudflare Agents: run a Task and confirm its durable result. Immediately after deployment, allow time for the Sandbox image to provision.Workspace mail: send to the configured mailbox from an external address and reply from an authorized member.",{"id":253,"title":254,"titles":255,"content":256,"level":102},"\u002Fdocs\u002Foperations\u002Fverification#evidence-to-record","Evidence to record",[50],"For an operational handoff, record these separately: application version and Worker version;health response after migration;owner setup and sign-in result;persistence result after reload or restart;browser realtime result; andeach optional integration result. That evidence makes “deployed” a testable state instead of a build status. html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"id":56,"title":55,"titles":258,"content":259,"level":96},[],"Preserve the correct storage boundary and verify an upgrade after rollout.",{"id":261,"title":262,"titles":263,"content":264,"level":102},"\u002Fdocs\u002Foperations\u002Fbackups-and-upgrades#backups","Backups",[55],"Cloudflare deployments separate storage by responsibility: D1 contains durable workspace facts and message history.R2 contains attachment bytes.Durable Objects contain live coordination state, not the durable history backup.KV contains temporary connection tickets, not message history. A recoverable backup plan needs both D1 and R2. Exporting only the database does not preserve attachments, and copying only R2 does not preserve the records that authorize and describe those objects.",{"id":266,"title":267,"titles":268,"content":269,"level":102},"\u002Fdocs\u002Foperations\u002Fbackups-and-upgrades#upgrades","Upgrades",[55],"The guided installer updates an existing Worker name in place using a pinned release manifest. GitHub\u002FWorkers Builds operators must update their fork and Cloudflare configuration manually. After either update path: Confirm the deployed application and Worker versions match the target release.Request \u002Fapi\u002Fsetup\u002Fhealth and verify ok: true, ready: true, and migrated: true.Sign in through a new browser session.Read an existing message and attachment.Send a new message and upload a new attachment.Run an Agent Task if the release changed the Agent execution plane. Reading existing data proves compatibility with persisted state. Creating new data proves the updated write path. Test both before calling the rollout complete.",{"id":66,"title":65,"titles":271,"content":272,"level":96},[],"Use the released Chat, Tasks, and Mail apps inside one Discoflare workspace. The app switcher in the workspace sidebar opens three released product surfaces: Chat, Tasks, and Mail. They share members, permissions, storage and file infrastructure, and a single deployment. In the current product, “app” means a built-in workspace surface. Discoflare does not yet have an installable app marketplace or a third-party plugin API.",{"id":274,"title":275,"titles":276,"content":277,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Fapps#chat","Chat",[65],"Chat is the default surface for everyday collaboration. It includes: public and private text channels;Direct Messages, replies, and Threads;mentions, reactions, typing, presence, unread state, pins, and files;recorded audio messages; andoptional voice and video Huddles through RealtimeKit. Agents participate in Chat as members. Mention an Agent in a Channel it can access, or start a Direct Message containing the Agent. See Agents.",{"id":279,"title":75,"titles":280,"content":281,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Fapps#tasks",[65],"Tasks is a permission-gated planning and execution surface. A board contains ordered Tasks across Backlog, Ready, Running, Review, Done, and Failed columns. A Task can include a description, priority, due date, labels, dependencies, checklist, attachments, an Agent assignee, and an optional report Channel. Assigning an Agent does not start work by itself; an authorized member explicitly starts the run. Each run is durable and keeps its own snapshot and outcome history. See Tasks for the complete lifecycle.",{"id":283,"title":284,"titles":285,"content":286,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Fapps#mail","Mail",[65],"Mail turns a domain Mailbox into a shared workspace surface: an incoming email becomes a Mail conversation;replies and new outbound messages use the configured Cloudflare email binding;Internal Notes remain inside the workspace; andread, send, and manage grants are assigned per Mailbox to humans or Agents. Mail is optional. It requires the complete Email Routing, Email Sending, hostname, variable, and binding setup described under Workspace mail. Chat and Tasks remain usable when Mail is not configured.",{"id":288,"title":289,"titles":290,"content":291,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Fapps#how-the-apps-connect","How the apps connect",[65],"FromToReleased connectionChatAgentsMentions and Direct Messages start isolated Agent conversation turns.TasksAgentsAn assigned Agent executes a durable Task Run after a human starts it.TasksChatA Task may name a report Channel for its run result.MailChat modelA Mailbox is represented by a private Channel and each email conversation by a Thread.MailAgentsMailbox grants can allow an Agent to work with a Mail conversation while preserving the same access checks.",{"id":293,"title":294,"titles":295,"content":296,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Fapps#access-and-visibility","Access and visibility",[65],"Chat is available to normal members, subject to Channel membership and Role grants. Tasks requires Manage tasks. The Mail surface is visible to members, but it remains empty until the member has access to a configured Mailbox. App visibility is not proof of authorization. The Worker checks permissions, Channel membership, and Mailbox grants again when data is read or changed.",{"id":298,"title":299,"titles":300,"content":301,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Fapps#apps-and-clients","Apps and clients",[65],"The built-in apps above are workspace modes served by one Discoflare installation. Native desktop and mobile clients are separate packages of the Discoflare interface that connect to a chosen workspace; they do not create another server or another set of workspace apps.",{"id":303,"title":304,"titles":305,"content":306,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Fapps#what-comes-next","What comes next",[65],"The Apps roadmap tracks additional built-in surfaces and cross-app work. Items there are not part of a released installation until their status changes to Available.",{"id":71,"title":70,"titles":308,"content":309,"level":96},[],"Create AI members, use them in conversations, and understand their memory, computer, and approval boundaries. An Agent is an AI member of the workspace, not a webhook or a human sign-in identity. It has a display name, avatar, Workers AI model, profile instructions, active or paused status, isolated conversation memory, and one stable Sandbox computer identity.",{"id":311,"title":312,"titles":313,"content":314,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Fagents#requirements","Requirements",[70],"The deployment needs healthy Workers AI, Durable Object, Workflow, R2, and Sandbox bindings. Agent Sandboxes use Cloudflare Containers and therefore require the Workers Paid plan. The Worker may become reachable before the Sandbox image finishes provisioning. After a fresh deploy or upgrade, allow several minutes before treating the first failed Agent run as a persistent problem.",{"id":316,"title":317,"titles":318,"content":319,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Fagents#create-an-agent","Create an Agent",[70],"You need Manage workspace permission. Open the workspace menu and select Workspace Settings.Open Agents and select Add agent.Enter a name, choose a Workers AI model, and write profile instructions.Optionally choose an avatar.Create the Agent. The model picker stores a Workers AI model ID. The default runtime uses the deployment's AI binding and does not require an OpenAI or OpenRouter key. A deployment can set AGENT_MODEL as its default; each Agent profile may select another model supported by that binding. Pause an Agent when it should remain configured but stop accepting new conversations or Tasks.",{"id":321,"title":322,"titles":323,"content":324,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Fagents#use-an-agent-in-chat","Use an Agent in Chat",[70],"There are two common paths: Mention the Agent in a Channel it has joined.Create a Direct Message containing the Agent and send a message. In a one-to-one Direct Message, Discoflare creates or reuses a Thread for the Agent conversation. Replies in that Thread keep addressing the same Agent without another mention. Channel mentions and group Direct Messages stay in their source Channel. The selected model can inspect image attachments only when it supports vision. A text-only model is told that the visual input was unavailable; it should not claim that it saw the image.",{"id":326,"title":327,"titles":328,"content":329,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Fagents#follow-a-turn","Follow a turn",[70],"Agent activity is visible beside the conversation: StateMeaningQueuedThe message was accepted durably and is waiting for execution.ThinkingThe Agent is producing the next response or action.ToolA tool or computer action is in progress.Waiting for approvalA risky command is paused until an authorized member approves or rejects it. The Agent streams one editable response message as work progresses. An authorized member can stop an active turn. Approval is a control boundary for the pending risky command; it is not a general claim that every Agent result has been reviewed.",{"id":331,"title":332,"titles":333,"content":334,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Fagents#memory-and-computer-isolation","Memory and computer isolation",[70],"Conversation memory is separated by Channel or Thread. Each Task Run receives another isolated reasoning context, so concurrent work does not share a transcript accidentally. Each Agent also has one stable Sandbox identity. A Sandbox container can sleep and its local disk can disappear, so Discoflare restores the Agent's latest \u002Fworkspace checkpoint from R2 before use and saves a new checkpoint after mutating tools. This makes the Agent's computer durable across container lifetimes, but it is not a permanent virtual machine.",{"id":336,"title":337,"titles":338,"content":339,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Fagents#access-boundary","Access boundary",[70],"Agents never receive a browser session or a human login. They are subject to workspace and resource authorization: an Agent cannot cross into a private Channel it has not joined;Mail actions require an explicit Mailbox grant;risky conversation commands pause for approval; andcreating, configuring, discovering, and invoking Agents requires workspace-management authority in the current release. An OAuth or social-login connection for a human does not give an Agent repository, shell, credential, or deployment access.",{"id":341,"title":342,"titles":343,"content":344,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Fagents#assign-work-through-tasks","Assign work through Tasks",[70],"Use Tasks when the work needs a durable run, visible progress, cancellation, recovery, and retained outcomes rather than a conversational answer. Continue with Tasks. Future repository connections, richer evidence, and production approval gates are described in the Agents roadmap.",{"id":76,"title":75,"titles":346,"content":347,"level":96},[],"Plan work on boards and run it through an assigned Agent with durable progress and history. Tasks separates the record of work from the Agent execution that may act on it. A Task remains the workspace-visible plan and result; each start creates a distinct Task Run with its own snapshot and lifecycle. You need Manage tasks permission to open the Tasks app or change its data.",{"id":349,"title":350,"titles":351,"content":352,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Ftasks#create-a-board-and-task","Create a board and Task",[75],"Open Tasks in the app switcher.Create or select a board.Add a Task with a title and description.Optionally set priority, due date, labels, dependencies, a checklist, attachments, and a report Channel.Assign an active Agent. Assignment does not start execution. This lets a member prepare, review, and sequence work before consuming Agent resources.",{"id":354,"title":355,"titles":356,"content":357,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Ftasks#statuses","Statuses",[75],"StatusMeaningBacklogRecorded but not ready to start.ReadyPrepared for work.RunningOwned by one active Workflow-backed run.ReviewThe run completed and its result needs human review.DoneThe work has been accepted as complete by the team.FailedThe latest run failed and may need correction or another run. Members can move Tasks between non-running columns. Only the execution lifecycle enters or leaves Running.",{"id":359,"title":360,"titles":361,"content":362,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Ftasks#start-and-follow-a-run","Start and follow a run",[75],"Select Run on a Task that has an active Agent and no incomplete dependency. Discoflare atomically claims the Task, snapshots the Task and Agent configuration, and starts one Cloudflare Workflow. While it runs, the board and Task detail show progress. The run uses an isolated Agent reasoning context and the Agent's checkpointed Sandbox computer. If a report Channel is configured, the Agent can publish the result back into Chat.",{"id":364,"title":365,"titles":366,"content":367,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Ftasks#cancel-or-recover","Cancel or recover",[75],"Cancel terminates the active Workflow and restores the Task status it had before the run.Check run reconciles the Task and run records with the Workflow when a request or client update was interrupted.A failed run keeps its error and history; correcting the Task does not erase the earlier attempt. Only one run can own a Task at a time. Starting twice, starting an archived Task, using a paused Agent, or starting before dependencies are complete is rejected.",{"id":369,"title":370,"titles":371,"content":372,"level":102},"\u002Fdocs\u002Fproduct-guide\u002Ftasks#review-the-result","Review the result",[75],"Open the Task detail to inspect its current summary, details, attachments, checklist, and Run history. The durable Run proves that execution reached an outcome; it does not prove that a human accepted the work, a pull request merged, or a production deployment succeeded. Move the Task to Done only after applying the evidence appropriate to the work. For software work, that may include tests, a diff or pull request, a preview, and a separate production check. The Agents roadmap describes planned work around stronger evidence and GitHub-backed delivery.",{"id":61,"title":374,"titles":375,"content":376,"level":96},"Product guide",[],"Understand the workspace, its apps, and the boundary between people, Agents, and Cloudflare infrastructure. One Discoflare deployment creates one workspace. Members move between built-in apps without changing accounts or copying data into separate services.",{"id":378,"title":379,"titles":380,"content":381,"level":102},"\u002Fdocs\u002Fproduct-guide#the-workspace-model","The workspace model",[374],"PartWhat it representsWorkspaceThe membership, roles, settings, audit history, and shared data owned by one deployment.AppA top-level workspace surface. The released apps are Chat, Tasks, and Mail.Human memberA person with a sign-in identity, membership status, Role, and session.Agent memberA configured AI participant with a model, instructions, permissions, conversation memory, and a computer. It cannot sign in.IntegrationAn optional external capability, such as RealtimeKit for Huddles or an authentication provider. An app is not a separate deployment. Chat messages, Task records, Mail conversations, members, and authorization facts live in the same D1 database; files and raw email live in the same protected R2 boundary.",{"id":383,"title":384,"titles":385,"content":386,"level":102},"\u002Fdocs\u002Fproduct-guide#choose-a-guide","Choose a guide",[374],"Apps explains Chat, Tasks, Mail, and what the app switcher does.Agents explains how to create an Agent, talk to it, and control its access.Tasks explains boards and durable Agent runs.Roadmap shows which additions are released, in development, or exploratory.",{"id":388,"title":389,"titles":390,"content":391,"level":102},"\u002Fdocs\u002Fproduct-guide#shared-authorization","Shared authorization",[374],"The app switcher changes the surface, not the security boundary. Access is enforced by the Worker APIs, Durable Objects, and the member's effective permissions. The default Member Role can chat, attach files, and start Huddles. Administrative surfaces appear only when the member has the corresponding grant. In particular: Manage workspace controls Agent creation and configuration.Manage tasks controls Task boards, Task changes, assignment, and runs.Mailbox grants separately control who may read, send, or manage each Mailbox. Hiding a button is only a convenience. The server repeats the authorization check for every protected operation.",{"id":393,"title":394,"titles":395,"content":396,"level":102},"\u002Fdocs\u002Fproduct-guide#storage-boundary","Storage boundary",[374],"Discoflare does not treat one storage service as the entire application: D1 stores durable workspace facts and history.R2 stores attachments, raw email, avatars, and Agent computer checkpoints.Durable Objects coordinate live conversations, presence, notifications, and Agent execution state.KV stores short-lived connection tickets. See the source architecture guide for request flows and Cloudflare bindings.",{"id":86,"title":85,"titles":398,"content":399,"level":96},[],"Track the path from conversational Agents and durable Tasks toward evidence-backed software delivery. The Agent roadmap keeps Discoflare a workspace and coordination center. It does not turn Discoflare into a replacement for source control, CI, or Cloudflare deployment systems.",{"id":401,"title":402,"titles":403,"content":404,"level":102},"\u002Fdocs\u002Froadmap\u002Fagents#available","Available",[85],"Agent profiles with a name, avatar, Workers AI model, instructions, and active or paused state.Agent participation in authorized Channels, Threads, and Direct Messages.Isolated memory for each conversation and Task Run.Vision input when the selected Workers AI model supports it.Visible queued, thinking, tool, and approval states in Chat.Durable approval or rejection for risky conversational commands.One checkpointed Sandbox computer identity per Agent.Workflow-backed Task Runs with progress, cancellation, reconciliation, and retained history.",{"id":406,"title":407,"titles":408,"content":409,"level":102},"\u002Fdocs\u002Froadmap\u002Fagents#planned-evidence-backed-task-results","Planned: evidence-backed Task results",[85],"Task Runs should produce structured evidence appropriate to the work, while the Task stores the team's acceptance decision. For software work, evidence may include a commit or diff, test results, pull request, preview URL, and deployment verification. This preserves two different facts: the Run says what the Agent executed and observed;the Task says whether the team accepted that result. Conversational command approval will remain separate. Approving one risky command does not accept the whole Task.",{"id":411,"title":412,"titles":413,"content":414,"level":102},"\u002Fdocs\u002Froadmap\u002Fagents#planned-scoped-github-connection","Planned: scoped GitHub connection",[85],"Repository work should use a dedicated GitHub App installation with explicit repository scope. A member's GitHub social login will not be reused as Agent repository authority. The first useful vertical is intentionally narrow: select an allowed repository;let an Agent work in an isolated Task context;publish a branch or pull request with test evidence;attach a preview when the project supports one; andrequire a human decision before production.",{"id":416,"title":417,"titles":418,"content":419,"level":102},"\u002Fdocs\u002Froadmap\u002Fagents#exploring-project-surface","Exploring: Project surface",[85],"A future Project app may organize repository, Task, run, pull request, preview, and deployment evidence in one place. It should remain a thin coordination layer over GitHub and Cloudflare rather than reimplementing either platform.",{"id":421,"title":422,"titles":423,"content":424,"level":102},"\u002Fdocs\u002Froadmap\u002Fagents#safety-boundaries-that-remain","Safety boundaries that remain",[85],"Agents do not inherit credentials from human login providers.Repository access must be separately installed, scoped, auditable, and revocable.A preview is not production proof.Production changes require an explicit human approval boundary.UI state does not replace API, Durable Object, or external-provider authorization. No planned or exploratory item should be treated as released until it is marked Available on this page and appears in a tagged release.",{"id":90,"title":89,"titles":426,"content":427,"level":96},[],"Track built-in workspace surfaces without confusing them with integrations or an app marketplace. Discoflare apps are top-level workspace surfaces that share one membership and authorization model. Integrations connect an external capability. These are different product boundaries.",{"id":429,"title":402,"titles":430,"content":431,"level":102},"\u002Fdocs\u002Froadmap\u002Fapps#available",[89],"AppReleased roleChatChannels, Direct Messages, Threads, files, presence, notifications, and optional Huddles.TasksBoards and durable Agent work with assignment, dependencies, progress, results, and Run history.MailShared domain Mailboxes, external conversations, Internal Notes, and per-Mailbox access.",{"id":433,"title":434,"titles":435,"content":436,"level":102},"\u002Fdocs\u002Froadmap\u002Fapps#in-development-data","In development: Data",[89],"The Data app is being developed as a human-managed structured workspace surface. The current scope is deliberately smaller than a general database platform: workspace Databases;typed custom Fields;inline Record editing;filtering and sorting; andpermission-gated schema and Record changes. Data remains in D1 as workspace state. It does not provision a separate Cloudflare D1 database for every user-created Database, and Tasks or Mail will not be reduced to special cases of this generic record model. Until Data is included in a tagged release, operators should not expect it in a fresh installation or build workflows around its draft schema.",{"id":438,"title":439,"titles":440,"content":441,"level":102},"\u002Fdocs\u002Froadmap\u002Fapps#exploring-project","Exploring: Project",[89],"A Project surface may connect Task execution to an existing GitHub repository, pull requests, checks, previews, and deployment evidence. The design goal is coordination and visibility; GitHub remains the source-control and review system. See the Agents roadmap for the proposed first repository workflow.",{"id":443,"title":444,"titles":445,"content":446,"level":102},"\u002Fdocs\u002Froadmap\u002Fapps#planned-cross-app-work","Planned cross-app work",[89],"clearer links between source conversations, Tasks, Mail conversations, structured Records, and Agent Runs;consistent search and activity signals across app boundaries; andevidence views that distinguish saved workspace state, external-provider state, and deployed runtime state.",{"id":448,"title":449,"titles":450,"content":451,"level":102},"\u002Fdocs\u002Froadmap\u002Fapps#not-available-today","Not available today",[89],"Discoflare does not currently expose an installable app marketplace, arbitrary third-party app runtime, or compatibility promise for draft internal APIs. New extension points need a permission, data, audit, and upgrade model before they can become a public platform surface.",{"id":81,"title":80,"titles":453,"content":454,"level":96},[],"See what Discoflare ships now, what is in development, and which directions are still exploratory. This roadmap communicates product direction. It is not a release calendar, service-level commitment, or promise that every exploratory item will ship.",{"id":456,"title":457,"titles":458,"content":459,"level":102},"\u002Fdocs\u002Froadmap#status-language","Status language",[80],"StatusMeaningAvailableIncluded in a tagged release and documented as behavior operators can verify.In developmentBeing implemented or tested; not yet a released capability.PlannedA defined next problem and boundary, without a committed release date.ExploringA direction under design that may change or be removed.",{"id":461,"title":462,"titles":463,"content":464,"level":102},"\u002Fdocs\u002Froadmap#product-areas","Product areas",[80],"AreaAvailableDirectionWorkspace appsChat, Tasks, and MailA structured Data app is in development; a thin GitHub-backed Project surface is exploratory.AgentsWorkspace-member profiles, Chat turns, vision-capable models, approvals, Sandbox computers, and durable Task RunsStronger Task evidence, scoped repository connections, previews, pull requests, and explicit production approval.OperationsGuided Cloudflare installation, manual GitHub deployment, health checks, backups, and in-place updatesClearer upgrade evidence and safer operator workflows as the app set expands. Read the detailed Apps roadmap and Agents roadmap.",{"id":466,"title":467,"titles":468,"content":469,"level":102},"\u002Fdocs\u002Froadmap#how-an-item-becomes-available","How an item becomes available",[80],"A capability moves to Available only after all of these are true: the implementation and required migration or binding changes are in the application repository;the behavior has an authorization boundary, not only a visible UI;tests and builds pass at the appropriate scope;a tagged release includes the change; andthe documentation explains an observable verification path. A local branch, screenshot, passing build, or deployed Worker is useful evidence, but none alone changes roadmap status.",{"id":471,"title":472,"titles":473,"content":474,"level":102},"\u002Fdocs\u002Froadmap#follow-changes","Follow changes",[80],"Tagged releases and release notes in the Discoflare repository are the source for what has shipped. Issues and discussions may describe work before it meets the Available gate above.",{"id":6,"title":10,"titles":476,"content":477,"level":96},[],"Learn the Discoflare apps and Agents, deploy a workspace, and operate it with observable checks. Discoflare is a self-hosted workspace for people and Agents. Chat, Tasks, and Mail share one workspace, one permission model, and data stored in the workspace owner's Cloudflare account.",{"id":479,"title":480,"titles":481,"content":482,"level":102},"\u002Fdocs#start-here","Start here",[10],"Understand the workspace explains how apps, members, permissions, and shared data fit together.Explore the apps covers the released Chat, Tasks, and Mail surfaces.Create and use Agents covers profiles, conversations, models, Sandboxes, and approval boundaries.Run Agent tasks covers boards, assignment, durable runs, results, and recovery.Choose a deployment compares the guided installer with the manual GitHub\u002FWorkers Builds path.Deploy to Cloudflare covers the complete runtime, including Agents.Environment variables is the configuration reference.Verify an installation separates service health, setup state, persistence, and browser checks.Read the roadmap separates released behavior, active development, and longer-term direction.",{"id":484,"title":485,"titles":486,"content":487,"level":102},"\u002Fdocs#product-guides","Product guides",[10],"The product guides describe behavior visible to workspace members and operators. They start with the app switcher, then follow the two ways an Agent can participate: a conversation in Chat or an assigned run in Tasks. Roadmap pages use explicit status labels. An item marked In development is not part of a released installation until it appears in a tagged release and passes the relevant verification checks.",{"id":489,"title":490,"titles":491,"content":492,"level":102},"\u002Fdocs#configuration-is-explicit","Configuration is explicit",[10],"Discoflare does not depend on configuration hidden in this website. Runtime configuration belongs to the installed workspace: Cloudflare bindings, Worker variables, and secrets describe the deployment.Settings saved by the workspace owner live with the workspace data.Deployment-managed credentials override the matching settings stored through the UI. The marketing site only performs the Cloudflare OAuth installation flow and publishes these docs. Its private environment values configure that installer; they are not copied into a workspace unless the installation flow explicitly provisions a corresponding value. Every installation guide ends with observable checks. A successful build or deploy event is useful evidence, but it is not proof that the database migrated, the owner completed setup, persistent data survives a restart, or the browser can use the workspace.",{"id":494,"title":495,"titles":496,"content":497,"level":102},"\u002Fdocs#source-and-release-boundary","Source and release boundary",[10],"The Discoflare repository owns the application, Cloudflare configuration, migrations, and maintainer documentation. This site documents released behavior for operators and users. When the source documentation and this site disagree, check the version you installed and use the documentation shipped with that release. Roadmap pages describe direction, not behavior that an installed release can be expected to provide.",{"id":499,"title":30,"body":500,"description":890,"extension":891,"meta":892,"navigation":893,"path":31,"seo":894,"stem":32,"__hash__":895},"docs\u002Fdocs\u002F2.installation\u002F1.cloudflare.md",{"type":501,"value":502,"toc":879},"minimark",[503,513,517,520,544,547,550,562,569,572,579,582,585,605,608,611,618,638,641,644,668,671,752,758,761,764,767,784,787,790,811,814,817,828,834,837,848,866,875],[504,505,506,507,512],"p",{},"The guided installer at ",[508,509,511],"a",{"href":510},"\u002Fdeploy","discoflare.com\u002Fdeploy"," provisions Discoflare directly into your Cloudflare account. It uses a temporary OAuth session for provisioning; the installed Worker does not retain the Cloudflare access token.",[514,515,123],"h2",{"id":516},"before-you-begin",[504,518,519],{},"You need:",[521,522,523,527,530,538,541],"ul",{},[524,525,526],"li",{},"a Cloudflare account with Workers Paid enabled;",[524,528,529],{},"an active DNS zone in that account;",[524,531,532,533,537],{},"an unused application hostname, such as ",[534,535,536],"code",{},"chat.example.com",";",[524,539,540],{},"an email address for the first workspace owner; and",[524,542,543],{},"an unused email subdomain if you want workspace mail.",[504,545,546],{},"The installer stops instead of replacing a hostname attached to another Worker, non-Cloudflare MX records, or another enabled catch-all email route.",[514,548,128],{"id":549},"_1-connect-the-account",[504,551,552,553,556,557,561],{},"Open ",[508,554,555],{"href":510},"Deploy Discoflare",", select ",[558,559,560],"strong",{},"Connect Cloudflare",", approve the requested permissions, and return to the installer.",[504,563,564,565,568],{},"The OAuth consent includes email-routing and email-sending permissions because the workspace-email choice is made after account discovery. Turning ",[558,566,567],{},"Workspace email"," off prevents the installer from using those permissions or changing email configuration, but it does not narrow the already-approved OAuth scope.",[504,570,571],{},"Select the account and active domain that will own the workspace.",[573,574,576],"docs-verification",{"title":575},"Verify account discovery",[504,577,578],{},"The installer must list the expected Cloudflare account and active zone. If either is missing, do not continue with a different account; correct the Cloudflare membership or zone status first.",[514,580,133],{"id":581},"_2-describe-the-workspace",[504,583,584],{},"Choose:",[521,586,587,590,593,596,599,602],{},[524,588,589],{},"a Worker name;",[524,591,592],{},"the public workspace name;",[524,594,595],{},"the application subdomain;",[524,597,598],{},"whether to enable workspace email and, if enabled, its subdomain and first mailbox;",[524,600,601],{},"invite-only or open registration; and",[524,603,604],{},"the first owner's email address.",[504,606,607],{},"These choices become deployment configuration. They are not inferred from the marketing site repository.",[514,609,138],{"id":610},"_3-install",[504,612,613,614,617],{},"Select ",[558,615,616],{},"Install or update",". The installer loads a pinned Discoflare release, provisions its bindings, enables the selected email routing, deploys the Worker, attaches the hostname, and returns a private owner-setup link.",[573,619,621],{"title":620},"Verify the installer result",[504,622,623,624,631,632,637],{},"The page must show ",[558,625,626,627],{},"Installed Discoflare ",[628,629,630],"em",{},"version"," or ",[558,633,634,635],{},"Updated to Discoflare ",[628,636,630],{}," and provide a workspace link. Treat an OAuth redirect, successful build, or created Worker by itself as partial progress, not completed installation.",[514,639,143],{"id":640},"_4-check-platform-readiness",[504,642,643],{},"Before creating the owner, open the health endpoint on the workspace origin:",[645,646,651],"pre",{"className":647,"code":648,"language":649,"meta":650,"style":650},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -fsS https:\u002F\u002Fchat.example.com\u002Fapi\u002Fsetup\u002Fhealth\n","bash","",[534,652,653],{"__ignoreMap":650},[654,655,657,661,665],"span",{"class":656,"line":96},"line",[654,658,660],{"class":659},"sBMFI","curl",[654,662,664],{"class":663},"sfazB"," -fsS",[654,666,667],{"class":663}," https:\u002F\u002Fchat.example.com\u002Fapi\u002Fsetup\u002Fhealth\n",[504,669,670],{},"For a fresh guided installation, the response should include:",[645,672,676],{"className":673,"code":674,"language":675,"meta":650,"style":650},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"ok\": true,\n  \"ready\": false,\n  \"migrated\": true,\n  \"ownerSetup\": true\n}\n","json",[534,677,678,684,702,717,731,746],{"__ignoreMap":650},[654,679,680],{"class":656,"line":96},[654,681,683],{"class":682},"sMK4o","{\n",[654,685,686,689,693,696,699],{"class":656,"line":102},[654,687,688],{"class":682},"  \"",[654,690,692],{"class":691},"spNyl","ok",[654,694,695],{"class":682},"\"",[654,697,698],{"class":682},":",[654,700,701],{"class":682}," true,\n",[654,703,705,707,710,712,714],{"class":656,"line":704},3,[654,706,688],{"class":682},[654,708,709],{"class":691},"ready",[654,711,695],{"class":682},[654,713,698],{"class":682},[654,715,716],{"class":682}," false,\n",[654,718,720,722,725,727,729],{"class":656,"line":719},4,[654,721,688],{"class":682},[654,723,724],{"class":691},"migrated",[654,726,695],{"class":682},[654,728,698],{"class":682},[654,730,701],{"class":682},[654,732,734,736,739,741,743],{"class":656,"line":733},5,[654,735,688],{"class":682},[654,737,738],{"class":691},"ownerSetup",[654,740,695],{"class":682},[654,742,698],{"class":682},[654,744,745],{"class":682}," true\n",[654,747,749],{"class":656,"line":748},6,[654,750,751],{"class":682},"}\n",[504,753,754,757],{},[534,755,756],{},"ok: true"," proves the database binding exists and migrations completed. It does not mean owner setup is finished.",[514,759,148],{"id":760},"_5-claim-the-workspace",[504,762,763],{},"Open the private setup link returned by the installer. The claim is carried in the URL fragment and removed from the address bar before it is submitted. Create the owner name and password.",[504,765,766],{},"The owner and workspace are created together before the workspace is marked ready. When workspace email is enabled, the first mailbox is provisioned during the same setup. The claim is single-use by state: after setup, another claim attempt is rejected.",[573,768,770],{"title":769},"Verify owner setup",[504,771,772,773,776,777,779,780,783],{},"Reload ",[534,774,775],{},"\u002Fapi\u002Fsetup\u002Fhealth",". It should now report ",[534,778,756],{},", ",[534,781,782],{},"ready: true",", and at least one user. Then sign out and sign back in with the owner credentials; this proves more than an existing browser session.",[514,785,153],{"id":786},"_6-run-workspace-checks",[504,788,789],{},"Perform one observable check for each capability you plan to use:",[791,792,793,796,799,802,805,808],"ol",{},[524,794,795],{},"Create a channel and send a message.",[524,797,798],{},"Reload the page and confirm the message persists.",[524,800,801],{},"Upload a small attachment and download it again.",[524,803,804],{},"If using open registration, test it in a private browser window with a second address.",[524,806,807],{},"If using invite-only registration, confirm an uninvited identity does not become an active member.",[524,809,810],{},"Create an Agent and a Task only after the Sandbox image has had several minutes to provision.",[504,812,813],{},"If the first Agent run reports that the Sandbox is unavailable immediately after deployment, wait for provisioning and retry. Chat readiness and Agent Container readiness are separate checks.",[514,815,158],{"id":816},"optional-integrations",[504,818,819,820,823,824,827],{},"Configure authentication methods in ",[558,821,822],{},"Workspace Settings → Authentication"," and RealtimeKit in ",[558,825,826],{},"Workspace Settings → Huddles",". The Huddles screen includes a read-only connection test. Text chat works without RealtimeKit.",[504,829,830,831,833],{},"Deployment-managed provider credentials override credentials saved in the workspace UI and appear as managed by deployment. See ",[508,832,40],{"href":41},".",[514,835,163],{"id":836},"manual-github-deployment",[504,838,839,840,843,844,847],{},"The ",[558,841,842],{},"Deploy with GitHub"," option is for operators who want to own a repository fork and Workers Builds configuration. It is not another guided installer. The button transfers the public source to Cloudflare, but you must manually create or select the storage resources, adapt ",[534,845,846],{},"wrangler.jsonc",", configure bindings and secrets, choose the build and deploy commands, attach the hostname, configure optional email routing and providers, apply migrations, create the first-owner setup claim, and run the readiness checks above.",[504,849,850,851,854,855,858,859,865],{},"Use ",[534,852,853],{},"pnpm run build"," as the Workers Builds build command and ",[534,856,857],{},"pnpm run deploy:built"," as the deploy command. Follow the ",[508,860,864],{"href":861,"rel":862},"https:\u002F\u002Fgithub.com\u002Fvnmtvlv\u002Fdiscoflare\u002Fblob\u002Fmain\u002Fdocs\u002Fdeployment.md",[863],"nofollow","application deployment guide"," for the current resource checklist. Do not reuse the public sandbox's account-specific resource IDs, names, or hostname in another account.",[573,867,869],{"title":868},"A GitHub build is only one layer of deployment evidence",[504,870,871,872,874],{},"Record the target resource IDs, successful D1 migration, deployed Worker version, hostname, ",[534,873,775],{}," response, owner setup, browser realtime, attachment persistence, and Agent Task result separately.",[876,877,878],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":650,"searchDepth":102,"depth":102,"links":880},[881,882,883,884,885,886,887,888,889],{"id":516,"depth":102,"text":123},{"id":549,"depth":102,"text":128},{"id":581,"depth":102,"text":133},{"id":610,"depth":102,"text":138},{"id":640,"depth":102,"text":143},{"id":760,"depth":102,"text":148},{"id":786,"depth":102,"text":153},{"id":816,"depth":102,"text":158},{"id":836,"depth":102,"text":163},"Install the complete Discoflare runtime and verify every readiness boundary.","md",{},{"icon":33},{"title":30,"description":890},"N44v0m0ggz4RWP8_ts1NbTxQyh2s1amWDlS20fTTh7k",[897,899],{"title":19,"path":20,"stem":21,"description":898,"icon":22,"children":-1},"Choose between the guided Cloudflare installer and a manual GitHub deployment.",{"title":40,"path":41,"stem":42,"description":900,"icon":43,"children":-1},"Understand which values configure startup, branding, authentication, notifications, and optional integrations.",1788620185609]