[{"data":1,"prerenderedAt":747},["ShallowReactive",2],{"docs:navigation":3,"docs:page:\u002Fdocs\u002Fdeployment\u002Fdata-services":115},[4],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Introduction","\u002Fdocs","docs\u002F1.index",[9,11,16,21,38,95,110],{"title":5,"path":6,"stem":7,"icon":10},"i-lucide-house",{"title":12,"path":13,"stem":14,"icon":15},"Quickstart","\u002Fdocs\u002Fquickstart","docs\u002F2.quickstart","i-lucide-rocket",{"title":17,"path":18,"stem":19,"icon":20},"Essentials","\u002Fdocs\u002Fconfiguration","docs\u002F3.configuration","i-lucide-book-open",{"title":22,"path":23,"stem":24,"children":25,"icon":27},"Authentication","\u002Fdocs\u002Fauthentication","docs\u002F4.authentication\u002Findex",[26,28,33],{"title":22,"path":23,"stem":24,"icon":27},"i-lucide-shield-check",{"title":29,"path":30,"stem":31,"icon":32},"Protect User Data","\u002Fdocs\u002Fauthentication\u002Fuser-data","docs\u002F4.authentication\u002F1.user-data","i-lucide-user-lock",{"title":34,"path":35,"stem":36,"icon":37},"Two-Factor Verification","\u002Fdocs\u002Fauthentication\u002Ftwo-factor","docs\u002F4.authentication\u002F2.two-factor","i-lucide-key-round",{"title":39,"path":40,"stem":41,"children":42,"icon":44},"Deployment","\u002Fdocs\u002Fdeployment","docs\u002F5.deployment\u002Findex",[43,45,50,55,60,65,70,75,80,85,90],{"title":39,"path":40,"stem":41,"icon":44},"i-lucide-cloud-upload",{"title":46,"path":47,"stem":48,"icon":49},"Deploy to Cloudflare","\u002Fdocs\u002Fdeployment\u002Fcloudflare","docs\u002F5.deployment\u002F1.cloudflare","i-simple-icons-cloudflare",{"title":51,"path":52,"stem":53,"icon":54},"Platform Support","\u002Fdocs\u002Fdeployment\u002Fsupport","docs\u002F5.deployment\u002F10.support","i-lucide-list-checks",{"title":56,"path":57,"stem":58,"icon":59},"Deploy to Vercel","\u002Fdocs\u002Fdeployment\u002Fvercel","docs\u002F5.deployment\u002F2.vercel","i-simple-icons-vercel",{"title":61,"path":62,"stem":63,"icon":64},"Deploy to Azure","\u002Fdocs\u002Fdeployment\u002Fazure","docs\u002F5.deployment\u002F3.azure","i-simple-icons-microsoftazure",{"title":66,"path":67,"stem":68,"icon":69},"Switch Hosts","\u002Fdocs\u002Fdeployment\u002Fswitch-hosts","docs\u002F5.deployment\u002F4.switch-hosts","i-lucide-arrow-right-left",{"title":71,"path":72,"stem":73,"icon":74},"Database and File Storage","\u002Fdocs\u002Fdeployment\u002Fdata-services","docs\u002F5.deployment\u002F5.data-services","i-lucide-database",{"title":76,"path":77,"stem":78,"icon":79},"Domains and Secrets","\u002Fdocs\u002Fdeployment\u002Fsettings","docs\u002F5.deployment\u002F6.settings","i-lucide-settings",{"title":81,"path":82,"stem":83,"icon":84},"Troubleshoot Deployment","\u002Fdocs\u002Fdeployment\u002Ftroubleshooting","docs\u002F5.deployment\u002F7.troubleshooting","i-lucide-wrench",{"title":86,"path":87,"stem":88,"icon":89},"Deploy Agents","\u002Fdocs\u002Fdeployment\u002Fagents","docs\u002F5.deployment\u002F8.agents","i-lucide-bot",{"title":91,"path":92,"stem":93,"icon":94},"Deploy Automations","\u002Fdocs\u002Fdeployment\u002Fautomations","docs\u002F5.deployment\u002F9.automations","i-lucide-workflow",{"title":96,"path":97,"stem":98,"children":99,"icon":101},"Connect Accounts","\u002Fdocs\u002Fconnect","docs\u002F6.connect\u002Findex",[100,102,106],{"title":96,"path":97,"stem":98,"icon":101},"i-lucide-plug",{"title":103,"path":104,"stem":105,"icon":37},"Connection Credentials","\u002Fdocs\u002Fconnect\u002Fcredentials","docs\u002F6.connect\u002F1.credentials",{"title":107,"path":108,"stem":109,"icon":84},"Connect MCP Servers","\u002Fdocs\u002Fconnect\u002Fmcp","docs\u002F6.connect\u002F2.mcp",{"title":111,"path":112,"stem":113,"icon":114},"Project Reference","\u002Fdocs\u002Freference","docs\u002F7.reference","i-lucide-terminal",{"page":116,"surround":742},{"id":117,"title":71,"body":118,"description":735,"extension":736,"links":737,"meta":738,"navigation":739,"path":72,"seo":740,"stem":73,"__hash__":741},"docs\u002Fdocs\u002F5.deployment\u002F5.data-services.md",{"type":119,"value":120,"toc":726},"minimark",[121,138,141,146,161,184,195,239,242,260,264,267,270,300,303,306,328,333,348,356,373,380,383,386,390,393,408,415,419,422,452,455,470,485,488,527,530,534,537,540,544,547,589,592,617,620,624,631,645,659,708,722],[122,123,124,125,129,130,133,134,137],"p",{},"Choose the production database in ",[126,127,128],"code",{},"cloud.config.ts",". Without ",[126,131,132],{},"db.remote",", Vercel\nuses Turso, while Cloudflare and Azure use D1. An explicit ",[126,135,136],{},"db.remote.provider","\noverrides the host default, so you can keep the same database when moving hosts.",[122,139,140],{},"Local development continues to use SQLite and local files. Production requires\nthe configured remote services; it never falls back to temporary local storage.",[142,143,145],"h2",{"id":144},"use-turso-on-vercel","Use Turso on Vercel",[122,147,148,149,156,157,160],{},"Create a ",[150,151,155],"a",{"href":152,"rel":153},"https:\u002F\u002Fdocs.turso.tech\u002Fquickstart",[154],"nofollow","Turso database"," and obtain its URL\nand auth token. Add them to the ignored ",[126,158,159],{},".env"," file or process environment:",[162,163,168],"pre",{"className":164,"code":165,"language":166,"meta":167,"style":167},"language-dotenv shiki shiki-themes github-light github-light github-dark","TURSO_DATABASE_URL=libsql:\u002F\u002Fyour-database.turso.io\nTURSO_AUTH_TOKEN=your-database-token\n","dotenv","",[126,169,170,178],{"__ignoreMap":167},[171,172,175],"span",{"class":173,"line":174},"line",1,[171,176,177],{},"TURSO_DATABASE_URL=libsql:\u002F\u002Fyour-database.turso.io\n",[171,179,181],{"class":173,"line":180},2,[171,182,183],{},"TURSO_AUTH_TOKEN=your-database-token\n",[122,185,186,187,190,191,194],{},"Turso is the default when ",[126,188,189],{},"deploy.target"," is ",[126,192,193],{},"vercel",". To select it explicitly\non any supported app host:",[162,196,200],{"className":197,"code":198,"filename":128,"language":199,"meta":167,"style":167},"language-ts shiki shiki-themes github-light github-light github-dark","db: {\n  remote: { provider: 'turso' },\n},\n","ts",[126,201,202,212,233],{"__ignoreMap":167},[171,203,204,208],{"class":173,"line":174},[171,205,207],{"class":206},"snPdu","db",[171,209,211],{"class":210},"sxrX7",": {\n",[171,213,214,217,220,223,226,230],{"class":173,"line":180},[171,215,216],{"class":206},"  remote",[171,218,219],{"class":210},": { ",[171,221,222],{"class":206},"provider",[171,224,225],{"class":210},": ",[171,227,229],{"class":228},"sIIMD","'turso'",[171,231,232],{"class":210}," },\n",[171,234,236],{"class":173,"line":235},3,[171,237,238],{"class":210},"},\n",[122,240,241],{},"CloudConfig uses its libSQL adapter for Turso, applies SQL migrations, and\nuploads the credentials as server settings. It does not provision the Turso\nservice or copy local development data. No Cloudflare account or Wrangler\ninstallation is needed for a project using Turso without Cloudflare services.",[122,243,244,245,248,249,252,253,248,256,259],{},"Both ",[126,246,247],{},"cloudconfig db status --remote"," and ",[126,250,251],{},"cloudconfig db migrate --remote","\nfollow the selected database. Override the credential names with\n",[126,254,255],{},"db.remote.urlEnv",[126,257,258],{},"db.remote.tokenEnv"," when needed.",[142,261,263],{"id":262},"use-d1-from-vercel-or-azure","Use D1 from Vercel or Azure",[122,265,266],{},"On Cloudflare, the database driver uses the native D1 binding. On Vercel and\nAzure, it accesses the same database over HTTPS.",[122,268,269],{},"Select D1 explicitly before moving a Cloudflare app to Vercel, or when upgrading\nan existing Vercel app that used the previous D1 default:",[162,271,273],{"className":197,"code":272,"filename":128,"language":199,"meta":167,"style":167},"db: {\n  remote: { provider: 'd1' },\n},\n",[126,274,275,281,296],{"__ignoreMap":167},[171,276,277,279],{"class":173,"line":174},[171,278,207],{"class":206},[171,280,211],{"class":210},[171,282,283,285,287,289,291,294],{"class":173,"line":180},[171,284,216],{"class":206},[171,286,219],{"class":210},[171,288,222],{"class":206},[171,290,225],{"class":210},[171,292,293],{"class":228},"'d1'",[171,295,232],{"class":210},[171,297,298],{"class":173,"line":235},[171,299,238],{"class":210},[122,301,302],{},"Keep the existing Wrangler database ID and migrations. This retains the current\ndatabase rather than selecting Vercel's new Turso default. An omitted provider\ncontinues to select D1 on Cloudflare and Azure.",[122,304,305],{},"Keep Wrangler installed for provisioning and migrations:",[162,307,311],{"className":308,"code":309,"language":310,"meta":167,"style":167},"language-bash shiki shiki-themes github-light github-light github-dark","pnpm add -D wrangler\n","bash",[126,312,313],{"__ignoreMap":167},[171,314,315,318,321,325],{"class":173,"line":174},[171,316,317],{"class":206},"pnpm",[171,319,320],{"class":228}," add",[171,322,324],{"class":323},"sBjJW"," -D",[171,326,327],{"class":228}," wrangler\n",[122,329,330,331,160],{},"Add these server-only settings to the ignored ",[126,332,159],{},[162,334,336],{"className":164,"code":335,"language":166,"meta":167,"style":167},"CLOUDFLARE_ACCOUNT_ID=your-account-id\nCLOUDCONFIG_D1_API_TOKEN=your-d1-api-token\n",[126,337,338,343],{"__ignoreMap":167},[171,339,340],{"class":173,"line":174},[171,341,342],{},"CLOUDFLARE_ACCOUNT_ID=your-account-id\n",[171,344,345],{"class":173,"line":180},[171,346,347],{},"CLOUDCONFIG_D1_API_TOKEN=your-d1-api-token\n",[122,349,350,351,355],{},"Create the token in ",[352,353,354],"strong",{},"Cloudflare → My Profile → API Tokens → Create Custom\nToken",":",[357,358,359,367,370],"ol",{},[360,361,362,363,366],"li",{},"Select ",[352,364,365],{},"Account → D1 → Edit",".",[360,368,369],{},"Include the account that owns the database.",[360,371,372],{},"Set an expiry and plan how to rotate it.",[122,374,375,376,379],{},"Read permission alone cannot execute writes. This token grants account-level D1\naccess: keep it server-side, never in a public Nuxt or Next.js environment\nvariable. ",[126,377,378],{},"CLOUDFLARE_API_TOKEN"," is accepted as a fallback.",[122,381,382],{},"The Wrangler file supplies the database name and ID. Existing databases are\nreused; a new one is provisioned after a successful build when needed. Wrangler\nOAuth can handle interactive provisioning, but its expiring login is not uploaded\nto the Node application.",[122,384,385],{},"Queries from another host use Cloudflare's REST API. Account API limits and an\nadditional network round trip apply.",[142,387,389],{"id":388},"keep-an-existing-r2-bucket","Keep an Existing R2 Bucket",[122,391,392],{},"Cloudflare uses the native R2 binding. For Vercel or Azure, supply bucket-scoped\nS3 credentials:",[162,394,396],{"className":164,"code":395,"language":166,"meta":167,"style":167},"CLOUDCONFIG_STORAGE_ACCESS_KEY_ID=your-r2-access-key\nCLOUDCONFIG_STORAGE_SECRET_ACCESS_KEY=your-r2-secret-key\n",[126,397,398,403],{"__ignoreMap":167},[171,399,400],{"class":173,"line":174},[171,401,402],{},"CLOUDCONFIG_STORAGE_ACCESS_KEY_ID=your-r2-access-key\n",[171,404,405],{"class":173,"line":180},[171,406,407],{},"CLOUDCONFIG_STORAGE_SECRET_ACCESS_KEY=your-r2-secret-key\n",[122,409,410,411,414],{},"CloudConfig derives the endpoint and bucket name from the account and Wrangler\nconfig, or ",[126,412,413],{},"deploy.r2",". File metadata and authorization stay in CloudConfig.",[142,416,418],{"id":417},"use-an-existing-libsql-database","Use an Existing libSQL Database",[122,420,421],{},"For another hosted libSQL service, select it independently of the app host:",[162,423,425],{"className":197,"code":424,"filename":128,"language":199,"meta":167,"style":167},"db: {\n  remote: { provider: 'libsql' },\n},\n",[126,426,427,433,448],{"__ignoreMap":167},[171,428,429,431],{"class":173,"line":174},[171,430,207],{"class":206},[171,432,211],{"class":210},[171,434,435,437,439,441,443,446],{"class":173,"line":180},[171,436,216],{"class":206},[171,438,219],{"class":210},[171,440,222],{"class":206},[171,442,225],{"class":210},[171,444,445],{"class":228},"'libsql'",[171,447,232],{"class":210},[171,449,450],{"class":173,"line":235},[171,451,238],{"class":210},[122,453,454],{},"Supply its server credentials:",[162,456,458],{"className":164,"code":457,"language":166,"meta":167,"style":167},"CLOUDCONFIG_DATABASE_URL=libsql:\u002F\u002Fyour-database.example.com\nCLOUDCONFIG_DATABASE_TOKEN=your-database-token\n",[126,459,460,465],{"__ignoreMap":167},[171,461,462],{"class":173,"line":174},[171,463,464],{},"CLOUDCONFIG_DATABASE_URL=libsql:\u002F\u002Fyour-database.example.com\n",[171,466,467],{"class":173,"line":180},[171,468,469],{},"CLOUDCONFIG_DATABASE_TOKEN=your-database-token\n",[122,471,472,473,476,477,480,481,248,483,366],{},"The URL can use ",[126,474,475],{},"libsql:\u002F\u002F"," or ",[126,478,479],{},"https:\u002F\u002F",". Override the variable names with\n",[126,482,255],{},[126,484,258],{},[122,486,487],{},"CloudConfig applies generated SQL migrations, checks drift, and records\nchecksums in an atomic batch. Remote migration commands follow this setting:",[162,489,491],{"className":308,"code":490,"language":310,"meta":167,"style":167},"pnpm exec cloudconfig db status --remote\npnpm exec cloudconfig db migrate --remote\n",[126,492,493,512],{"__ignoreMap":167},[171,494,495,497,500,503,506,509],{"class":173,"line":174},[171,496,317],{"class":206},[171,498,499],{"class":228}," exec",[171,501,502],{"class":228}," cloudconfig",[171,504,505],{"class":228}," db",[171,507,508],{"class":228}," status",[171,510,511],{"class":323}," --remote\n",[171,513,514,516,518,520,522,525],{"class":173,"line":180},[171,515,317],{"class":206},[171,517,499],{"class":228},[171,519,502],{"class":228},[171,521,505],{"class":228},[171,523,524],{"class":228}," migrate",[171,526,511],{"class":323},[122,528,529],{},"The service must already exist. CloudConfig does not create it or import D1 rows.\nChanging providers requires an explicit data migration.",[142,531,533],{"id":532},"other-database-engines","Other Database Engines",[122,535,536],{},"The built-in data stack currently supports SQLite-compatible databases: local\nSQLite, D1, Turso, and other libSQL services. Neon and Supabase require PostgreSQL\nsupport across schema compilation, queries, authentication, and migrations.\nPlanetScale also requires an adapter for its selected PostgreSQL or MySQL\u002FVitess\nengine. These providers are not supported yet.",[122,538,539],{},"Switching between SQLite-compatible providers reuses the schema and migrations;\nit does not move existing rows. A connection URL alone cannot convert SQLite\nmigrations into PostgreSQL or MySQL migrations. Cosmos DB and AWS database\nservices need adapters for the specific database engine or API.",[142,541,543],{"id":542},"use-an-existing-s3-compatible-bucket","Use an Existing S3-Compatible Bucket",[122,545,546],{},"Select S3 storage and your service's region:",[162,548,550],{"className":197,"code":549,"filename":128,"language":199,"meta":167,"style":167},"storage: {\n  provider: 's3',\n  region: 'your-region',\n},\n",[126,551,552,559,572,584],{"__ignoreMap":167},[171,553,554,557],{"class":173,"line":174},[171,555,556],{"class":206},"storage",[171,558,211],{"class":210},[171,560,561,564,566,569],{"class":173,"line":180},[171,562,563],{"class":206},"  provider",[171,565,225],{"class":210},[171,567,568],{"class":228},"'s3'",[171,570,571],{"class":210},",\n",[171,573,574,577,579,582],{"class":173,"line":235},[171,575,576],{"class":206},"  region",[171,578,225],{"class":210},[171,580,581],{"class":228},"'your-region'",[171,583,571],{"class":210},[171,585,587],{"class":173,"line":586},4,[171,588,238],{"class":210},[122,590,591],{},"Supply the endpoint, bucket, and credentials:",[162,593,595],{"className":164,"code":594,"language":166,"meta":167,"style":167},"CLOUDCONFIG_STORAGE_ENDPOINT=https:\u002F\u002Fyour-s3-endpoint.example.com\nCLOUDCONFIG_STORAGE_BUCKET=blog-uploads\nCLOUDCONFIG_STORAGE_ACCESS_KEY_ID=your-access-key\nCLOUDCONFIG_STORAGE_SECRET_ACCESS_KEY=your-secret-key\n",[126,596,597,602,607,612],{"__ignoreMap":167},[171,598,599],{"class":173,"line":174},[171,600,601],{},"CLOUDCONFIG_STORAGE_ENDPOINT=https:\u002F\u002Fyour-s3-endpoint.example.com\n",[171,603,604],{"class":173,"line":180},[171,605,606],{},"CLOUDCONFIG_STORAGE_BUCKET=blog-uploads\n",[171,608,609],{"class":173,"line":235},[171,610,611],{},"CLOUDCONFIG_STORAGE_ACCESS_KEY_ID=your-access-key\n",[171,613,614],{"class":173,"line":586},[171,615,616],{},"CLOUDCONFIG_STORAGE_SECRET_ACCESS_KEY=your-secret-key\n",[122,618,619],{},"The service and bucket must already exist. Selecting them does not copy files\nfrom another bucket.",[142,621,623],{"id":622},"update-an-older-mount","Update an Older Mount",[122,625,626,627,630],{},"Newly generated standalone and Next.js mounts use ",[126,628,629],{},"configuredDatabase(config)",";\nthe Nuxt module selects it automatically. Update older projects once:",[162,632,634],{"className":308,"code":633,"language":310,"meta":167,"style":167},"pnpm add @cloudconfig\u002Fcore@beta\n",[126,635,636],{"__ignoreMap":167},[171,637,638,640,642],{"class":173,"line":174},[171,639,317],{"class":206},[171,641,320],{"class":228},[171,643,644],{"class":228}," @cloudconfig\u002Fcore@beta\n",[122,646,647,648,651,652,476,655,658],{},"In Nuxt projects, update ",[126,649,650],{},"@cloudconfig\u002Fnuxt@beta"," at the same time. In standalone\nand Next.js projects, replace an explicit ",[126,653,654],{},"sqliteFile()",[126,656,657],{},"d1()"," driver in the\nexisting backend mount:",[162,660,662],{"className":197,"code":661,"language":199,"meta":167,"style":167},"import { configuredDatabase } from '@cloudconfig\u002Fcore\u002Fdrivers\u002Fconfigured'\n\nconst app = createBackend(config, { db: configuredDatabase(config) })\n",[126,663,664,679,685],{"__ignoreMap":167},[171,665,666,670,673,676],{"class":173,"line":174},[171,667,669],{"class":668},"s8jYJ","import",[171,671,672],{"class":210}," { configuredDatabase } ",[171,674,675],{"class":668},"from",[171,677,678],{"class":228}," '@cloudconfig\u002Fcore\u002Fdrivers\u002Fconfigured'\n",[171,680,681],{"class":173,"line":180},[171,682,684],{"emptyLinePlaceholder":683},true,"\n",[171,686,687,690,693,696,699,702,705],{"class":173,"line":235},[171,688,689],{"class":668},"const",[171,691,692],{"class":323}," app",[171,694,695],{"class":668}," =",[171,697,698],{"class":206}," createBackend",[171,700,701],{"class":210},"(config, { db: ",[171,703,704],{"class":206},"configuredDatabase",[171,706,707],{"class":210},"(config) })\n",[122,709,710,711,248,714,717,718,721],{},"Keep your existing ",[126,712,713],{},"config",[126,715,716],{},"createBackend"," imports. The configured driver\nuses ",[126,719,720],{},"db.local"," in development and the selected remote service in production.",[723,724,725],"style",{},"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 .snPdu, html code.shiki .snPdu{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":167,"searchDepth":180,"depth":180,"links":727},[728,729,730,731,732,733,734],{"id":144,"depth":180,"text":145},{"id":262,"depth":180,"text":263},{"id":388,"depth":180,"text":389},{"id":417,"depth":180,"text":418},{"id":532,"depth":180,"text":533},{"id":542,"depth":180,"text":543},{"id":622,"depth":180,"text":623},"Configure production data services independently of the application host.","md",null,{},{"icon":74},{"title":71,"description":735},"r1rr9riQcf9R632WvfJgwiBdJxd8W2sZKMPxrf6z_rg",[743,745],{"title":66,"path":67,"stem":68,"description":744,"icon":69},"Move the application first while keeping the same production database and files.",{"title":76,"path":77,"stem":78,"description":746,"icon":79},"Set the public origin, use your own domain, and provide application secrets.",1792122403883]