[{"data":1,"prerenderedAt":1703},["ShallowReactive",2],{"nav-docs":3,"page-/docs/webspace/create-database":880,"surround-/docs/webspace/create-database":1697,"raw-/docs/webspace/create-database":1700},[4,56,226,546,634,773,806,863],{"title":5,"path":6,"stem":7,"children":8,"page":55},"Space Builder","/getting-started","00.getting-started",[9,13,17,23,29,33,38,42,46,50],{"title":10,"path":11,"stem":12,"children":-1},"Introducing SpaceBuilder","/getting-started/overview","00.getting-started/00.overview",{"title":14,"path":15,"stem":16,"children":-1},"Create a SetFN Account","/getting-started/create-setfn-account","00.getting-started/05.create-setfn-account",{"title":18,"path":19,"stem":20,"tags":21,"children":-1},"Installing on Linux","/getting-started/install-linux","00.getting-started/10.install-linux",[22],"recommended",{"title":24,"path":25,"stem":26,"tags":27,"children":-1},"Installing with Docker","/getting-started/install-docker","00.getting-started/12.install-docker",[28],"preparing",{"title":30,"path":31,"stem":32,"children":-1},"Installing on Windows","/getting-started/install-windows","00.getting-started/14.install-windows",{"title":34,"path":35,"stem":36,"tags":37,"children":-1},"Installing on macOS","/getting-started/install-macos","00.getting-started/16.install-macos",[28],{"title":39,"path":40,"stem":41,"children":-1},"Initial Setup","/getting-started/initial-setup","00.getting-started/20.initial-setup",{"title":43,"path":44,"stem":45,"children":-1},"License Activation","/getting-started/license-activation","00.getting-started/30.license-activation",{"title":47,"path":48,"stem":49,"children":-1},"Checking Your Access Address (Local/Internal Network)","/getting-started/access-url","00.getting-started/35.access-url",{"title":51,"path":52,"stem":53,"tags":54,"children":-1},"Choosing an External Access Method","/getting-started/access-domain","00.getting-started/40.access-domain",[22],false,{"title":57,"path":58,"stem":59,"children":60,"page":55},"Space management","/admin","10.admin",[61,74,107,136,171,184,209],{"title":62,"path":63,"stem":64,"children":65,"page":55},"Admin Home","/admin/home","10.admin/00.home",[66,70],{"title":67,"path":68,"stem":69,"children":-1},"Accessing the Admin Page","/admin/home/admin-page-access","10.admin/00.home/00.admin-page-access",{"title":71,"path":72,"stem":73,"children":-1},"License Management","/admin/home/license","10.admin/00.home/20.license",{"title":75,"path":76,"stem":77,"children":78,"page":55},"User management","/admin/user-management","10.admin/10.user-management",[79,83,87,91,95,99,103],{"title":80,"path":81,"stem":82,"children":-1},"Setting Signup Policy and Default Permissions","/admin/user-management/signup-policy","10.admin/10.user-management/02.signup-policy",{"title":84,"path":85,"stem":86,"children":-1},"Creating a User Account","/admin/user-management/invite-new-member","10.admin/10.user-management/10.invite-new-member",{"title":88,"path":89,"stem":90,"children":-1},"Editing a User Account","/admin/user-management/edit-member","10.admin/10.user-management/11.edit-member",{"title":92,"path":93,"stem":94,"children":-1},"Adding an Admin","/admin/user-management/add-new-admin","10.admin/10.user-management/12.add-new-admin",{"title":96,"path":97,"stem":98,"children":-1},"Team Management","/admin/user-management/team","10.admin/10.user-management/22.team",{"title":100,"path":101,"stem":102,"children":-1},"Level Management","/admin/user-management/level","10.admin/10.user-management/24.level",{"title":104,"path":105,"stem":106,"children":-1},"Checking Access Logs","/admin/user-management/access-log","10.admin/10.user-management/30.access-log",{"title":108,"path":109,"stem":110,"children":111,"page":55},"Service Configuration","/admin/service-config","10.admin/20.service-config",[112,116,120,124,128,132],{"title":113,"path":114,"stem":115,"children":-1},"File Area Settings","/admin/service-config/file-area","10.admin/20.service-config/10.file-area",{"title":117,"path":118,"stem":119,"children":-1},"Webhook Settings","/admin/service-config/webhook-settings","10.admin/20.service-config/16.webhook-settings",{"title":121,"path":122,"stem":123,"children":-1},"Community Settings","/admin/service-config/community-space","10.admin/20.service-config/22.community-space",{"title":125,"path":126,"stem":127,"children":-1},"AI Chatbot Policy Settings","/admin/service-config/community-ai-chatbot","10.admin/20.service-config/24.community-ai-chatbot",{"title":129,"path":130,"stem":131,"children":-1},"Email Settings","/admin/service-config/email-settings","10.admin/20.service-config/30.email-settings",{"title":133,"path":134,"stem":135,"children":-1},"Branding Settings","/admin/service-config/brand","10.admin/20.service-config/40.brand",{"title":137,"path":138,"stem":139,"children":140,"page":55},"Intelligent Service (AI)","/admin/ai","10.admin/30.ai",[141,145,149,153,159,163,167],{"title":142,"path":143,"stem":144,"children":-1},"AI Model Settings","/admin/ai/ai-model-setting","10.admin/30.ai/10.ai-model-setting",{"title":146,"path":147,"stem":148,"children":-1},"AI DB Settings","/admin/ai/ai-db-setting","10.admin/30.ai/20.ai-db-setting",{"title":150,"path":151,"stem":152,"children":-1},"Setting Up a Qdrant Server","/admin/ai/qdrant-server-setup","10.admin/30.ai/25.qdrant-server-setup",{"title":154,"path":155,"stem":156,"children":157},"Knowledge Indexing","/admin/ai/knowledge-indexing","10.admin/30.ai/30.knowledge-indexing",[158],{"title":154,"path":155,"stem":156,"children":-1},{"title":160,"path":161,"stem":162,"children":-1},"AI Integration and Policy Settings","/admin/ai/ai-link","10.admin/30.ai/40.ai-link",{"title":164,"path":165,"stem":166,"children":-1},"MCP Server Management","/admin/ai/mcp-server","10.admin/30.ai/50.mcp-server",{"title":168,"path":169,"stem":170,"children":-1},"Search Management","/admin/ai/search-management","10.admin/30.ai/60.search-management",{"title":172,"path":173,"stem":174,"children":175,"page":55},"plugin","/admin/plugin","10.admin/40.plugin",[176,180],{"title":177,"path":178,"stem":179,"children":-1},"Managing Plugins","/admin/plugin/overview","10.admin/40.plugin/00.overview",{"title":181,"path":182,"stem":183,"children":-1},"Extension Plugin Settings","/admin/plugin/settings","10.admin/40.plugin/10.settings",{"title":185,"path":186,"stem":187,"children":188,"page":55},"Security Management","/admin/security","10.admin/50.security",[189,193,197,201,205],{"title":190,"path":191,"stem":192,"children":-1},"Security Overview","/admin/security/overview","10.admin/50.security/00.overview",{"title":194,"path":195,"stem":196,"children":-1},"Checking the Audit Log","/admin/security/audit-log","10.admin/50.security/05.audit-log",{"title":198,"path":199,"stem":200,"children":-1},"Block Management","/admin/security/block-management","10.admin/50.security/10.block-management",{"title":202,"path":203,"stem":204,"children":-1},"Security Settings","/admin/security/security-setting","10.admin/50.security/12.security-setting",{"title":206,"path":207,"stem":208,"children":-1},"IP Access Restriction","/admin/security/ip-restriction","10.admin/50.security/16.ip-restriction",{"title":210,"path":211,"stem":212,"children":213,"page":55},"System management","/admin/system-admin","10.admin/60.system-admin",[214,218,222],{"title":215,"path":216,"stem":217,"children":-1},"Device Information","/admin/system-admin/device-info","10.admin/60.system-admin/10.device-info",{"title":219,"path":220,"stem":221,"children":-1},"Server Restart and System Maintenance","/admin/system-admin/server-restart","10.admin/60.system-admin/12.server-restart",{"title":223,"path":224,"stem":225,"children":-1},"Background Services","/admin/system-admin/background-service","10.admin/60.system-admin/14.background-service",{"title":227,"path":228,"stem":229,"children":230,"page":55},"Use workspace","/workspace","20.workspace",[231,264,281,337,448,495,527],{"title":232,"path":233,"stem":234,"children":235,"page":55},"menu","/workspace/menu","20.workspace/05.menu",[236,240,244,248,252,256,260],{"title":237,"path":238,"stem":239,"children":-1},"Workspace Overview","/workspace/menu/overview","20.workspace/05.menu/00.overview",{"title":241,"path":242,"stem":243,"children":-1},"Team Space","/workspace/menu/team-space","20.workspace/05.menu/05.team-space",{"title":245,"path":246,"stem":247,"children":-1},"Client Space","/workspace/menu/client-space","20.workspace/05.menu/06.client-space",{"title":249,"path":250,"stem":251,"children":-1},"Favorites","/workspace/menu/favorites","20.workspace/05.menu/10.favorites",{"title":253,"path":254,"stem":255,"children":-1},"Recent Documents","/workspace/menu/recent","20.workspace/05.menu/20.recent",{"title":257,"path":258,"stem":259,"children":-1},"External Share","/workspace/menu/external-share","20.workspace/05.menu/30.external-share",{"title":261,"path":262,"stem":263,"children":-1},"Trash","/workspace/menu/trash","20.workspace/05.menu/40.trash",{"title":265,"path":266,"stem":267,"children":268,"page":55},"Account","/workspace/account","20.workspace/10.account",[269,273,277],{"title":270,"path":271,"stem":272,"children":-1},"Sign Up and Log In","/workspace/account/signup","20.workspace/10.account/10.signup",{"title":274,"path":275,"stem":276,"children":-1},"Resetting Your Password","/workspace/account/reset-password","20.workspace/10.account/20.reset-password",{"title":278,"path":279,"stem":280,"children":-1},"Account Settings","/workspace/account/account-settings","20.workspace/10.account/30.account-settings",{"title":282,"path":283,"stem":284,"children":285,"page":55},"folder","/workspace/folder","20.workspace/20.folder",[286,290,294,298,302,308,312,316,321,325,329,333],{"title":287,"path":288,"stem":289,"children":-1},"Folder Basics","/workspace/folder/basic","20.workspace/20.folder/10.basic",{"title":291,"path":292,"stem":293,"children":-1},"Creating Multiple Folders at Once","/workspace/folder/bulk-folder-creation","20.workspace/20.folder/12.bulk-folder-creation",{"title":295,"path":296,"stem":297,"children":-1},"Filter","/workspace/folder/filter","20.workspace/20.folder/13.filter",{"title":299,"path":300,"stem":301,"children":-1},"Configuring Folder View Options","/workspace/folder/folder-view-options","20.workspace/20.folder/14.folder-view-options",{"title":303,"path":304,"stem":305,"tags":306,"children":-1},"Folder Web View","/workspace/folder/folder-web-view","20.workspace/20.folder/16.folder-web-view",[307],"hot",{"title":309,"path":310,"stem":311,"children":-1},"Folder Organization","/workspace/folder/folder-organize","20.workspace/20.folder/17.folder-organize",{"title":313,"path":314,"stem":315,"children":-1},"Folder Notice (README)","/workspace/folder/folder-readme","20.workspace/20.folder/18.folder-readme",{"title":317,"path":318,"stem":319,"tags":320,"children":-1},"Exporting Folder/File Lists","/workspace/folder/folder-export","20.workspace/20.folder/20.folder-export",[307],{"title":322,"path":323,"stem":324,"children":-1},"Setting Level-Based Access Permissions","/workspace/folder/level-access-permissions","20.workspace/20.folder/24.level-access-permissions",{"title":326,"path":327,"stem":328,"children":-1},"Setting Team-Based Access Permissions","/workspace/folder/team-access-permissions","20.workspace/20.folder/26.team-access-permissions",{"title":330,"path":331,"stem":332,"children":-1},"Folder Webhooks","/workspace/folder/webhook","20.workspace/20.folder/30.webhook",{"title":334,"path":335,"stem":336,"children":-1},"Work Automation Folder","/workspace/folder/automation","20.workspace/20.folder/40.automation",{"title":338,"path":339,"stem":340,"children":341,"page":55},"file","/workspace/file","20.workspace/30.file",[342,346,351,355,359,363,367,371,375,379,384,388,392,396,400,404,408,412,416,420,424,428,432,436,440,444],{"title":343,"path":344,"stem":345,"children":-1},"File Management Basics","/workspace/file/overview","20.workspace/30.file/00.overview",{"title":347,"path":348,"stem":349,"tags":350,"children":-1},"Checking the List While Viewing a File","/workspace/file/list-in-file","20.workspace/30.file/05.list-in-file",[307],{"title":352,"path":353,"stem":354,"children":-1},"Register disk files","/workspace/file/disk-file-registration","20.workspace/30.file/06.disk-file-registration",{"title":356,"path":357,"stem":358,"children":-1},"Viewing and Editing Text Files","/workspace/file/text-file-viewer","20.workspace/30.file/10.text-file-viewer",{"title":360,"path":361,"stem":362,"children":-1},"Viewing HTML Files","/workspace/file/html-viewer","20.workspace/30.file/11.html-viewer",{"title":364,"path":365,"stem":366,"children":-1},"Viewing and Editing CSV Files","/workspace/file/csv-viewer","20.workspace/30.file/12.csv-viewer",{"title":368,"path":369,"stem":370,"children":-1},"Viewing Image/Video Files","/workspace/file/image-file-viewer","20.workspace/30.file/13.image-file-viewer",{"title":372,"path":373,"stem":374,"children":-1},"Viewing Office/PDF Files","/workspace/file/office-viewer","20.workspace/30.file/14.office-viewer",{"title":376,"path":377,"stem":378,"children":-1},"Pasting Web Pages (HTML)","/workspace/file/paste-html","20.workspace/30.file/20.paste-html",{"title":380,"path":381,"stem":382,"tags":383,"children":-1},"Pasting Screenshots","/workspace/file/paste-screenshot","20.workspace/30.file/21.paste-screenshot",[307],{"title":385,"path":386,"stem":387,"children":-1},"Pasting Markdown (MD)","/workspace/file/paste-md","20.workspace/30.file/22.paste-md",{"title":389,"path":390,"stem":391,"children":-1},"Screen Recording","/workspace/file/screen-recording","20.workspace/30.file/23.screen-recording",{"title":393,"path":394,"stem":395,"children":-1},"File Tags","/workspace/file/file-tag","20.workspace/30.file/33.file-tag",{"title":397,"path":398,"stem":399,"children":-1},"Bulk Renaming Files","/workspace/file/bulk-name-revise","20.workspace/30.file/34.bulk-name-revise",{"title":401,"path":402,"stem":403,"children":-1},"File Conversion","/workspace/file/file-convert-overview","20.workspace/30.file/40.file-convert-overview",{"title":405,"path":406,"stem":407,"children":-1},"Template Files","/workspace/file/templates","20.workspace/30.file/41.templates",{"title":409,"path":410,"stem":411,"children":-1},"To-Do List","/workspace/file/template-todo","20.workspace/30.file/42.template-todo",{"title":413,"path":414,"stem":415,"children":-1},"Approval Form","/workspace/file/template-approval","20.workspace/30.file/43.template-approval",{"title":417,"path":418,"stem":419,"children":-1},"Kanban Board","/workspace/file/template-kanban","20.workspace/30.file/44.template-kanban",{"title":421,"path":422,"stem":423,"children":-1},"Timeline","/workspace/file/template-timeline","20.workspace/30.file/45.template-timeline",{"title":425,"path":426,"stem":427,"children":-1},"Memo","/workspace/file/template-memo","20.workspace/30.file/46.template-memo",{"title":429,"path":430,"stem":431,"children":-1},"AI Chat File","/workspace/file/ai-chat-file","20.workspace/30.file/47.ai-chat-file",{"title":433,"path":434,"stem":435,"children":-1},"Checking the File Change History","/workspace/file/audit-trail","20.workspace/30.file/50.audit-trail",{"title":437,"path":438,"stem":439,"children":-1},"File Version Control","/workspace/file/version-trail","20.workspace/30.file/51.version-trail",{"title":441,"path":442,"stem":443,"children":-1},"Edit Lock","/workspace/file/file-lock","20.workspace/30.file/52.file-lock",{"title":445,"path":446,"stem":447,"children":-1},"File Encryption","/workspace/file/file-encrypt","20.workspace/30.file/53.file-encrypt",{"title":449,"path":450,"stem":451,"children":452,"page":55},"Collaboration","/workspace/cooperation","20.workspace/35.cooperation",[453,457,461,465,470,474,478,482,487,491],{"title":454,"path":455,"stem":456,"children":-1},"File/Folder Comments","/workspace/cooperation/file-comments","20.workspace/35.cooperation/00.file-comments",{"title":458,"path":459,"stem":460,"children":-1},"Chat","/workspace/cooperation/chat","20.workspace/35.cooperation/10.chat",{"title":462,"path":463,"stem":464,"children":-1},"Collaboration Chat and Edit Lock","/workspace/cooperation/collaboration-chat","20.workspace/35.cooperation/11.collaboration-chat",{"title":466,"path":467,"stem":468,"tags":469,"children":-1},"Following a Team Member's Location","/workspace/cooperation/follow-team-location","20.workspace/35.cooperation/12.follow-team-location",[307],{"title":471,"path":472,"stem":473,"children":-1},"Mentions","/workspace/cooperation/mention","20.workspace/35.cooperation/14.mention",{"title":475,"path":476,"stem":477,"children":-1},"Direct Messages","/workspace/cooperation/dm","20.workspace/35.cooperation/16.dm",{"title":479,"path":480,"stem":481,"children":-1},"Notification Inbox","/workspace/cooperation/notification-inbox","20.workspace/35.cooperation/18.notification-inbox",{"title":483,"path":484,"stem":485,"tags":486,"children":-1},"Checking Team Activity","/workspace/cooperation/file-activity","20.workspace/35.cooperation/30.file-activity",[307],{"title":488,"path":489,"stem":490,"children":-1},"Creating an External Share Link","/workspace/cooperation/share-link-creation","20.workspace/35.cooperation/40.share-link-creation",{"title":492,"path":493,"stem":494,"children":-1},"Sending an External Share Link by Email","/workspace/cooperation/share-link-email","20.workspace/35.cooperation/42.share-link-email",{"title":496,"path":497,"stem":498,"children":499,"page":55},"Search","/workspace/search","20.workspace/40.search",[500,504,509,515,519,523],{"title":501,"path":502,"stem":503,"children":-1},"File Search","/workspace/search/search","20.workspace/40.search/00.search",{"title":505,"path":506,"stem":507,"tags":508,"children":-1},"Context Search (AI Search)","/workspace/search/context-search","20.workspace/40.search/10.context-search",[307],{"title":510,"path":511,"stem":512,"tags":513,"children":-1},"Image Search","/workspace/search/image-search","20.workspace/40.search/20.image-search",[514],"new",{"title":516,"path":517,"stem":518,"children":-1},"Chat Search","/workspace/search/chat-search","20.workspace/40.search/30.chat-search",{"title":520,"path":521,"stem":522,"children":-1},"Comment Search","/workspace/search/comment-search","20.workspace/40.search/40.comment-search",{"title":524,"path":525,"stem":526,"children":-1},"Synonym Search","/workspace/search/synonym-search","20.workspace/40.search/50.synonym-search",{"title":528,"path":529,"stem":530,"children":531,"page":55},"AI","/workspace/ai","20.workspace/50.ai",[532,536,541],{"title":533,"path":534,"stem":535,"children":-1},"AI Features Summary","/workspace/ai/overview","20.workspace/50.ai/00.overview",{"title":537,"path":538,"stem":539,"tags":540,"children":-1},"Requesting Work from the Local AI","/workspace/ai/ai-work","20.workspace/50.ai/10.ai-work",[307],{"title":542,"path":543,"stem":544,"tags":545,"children":-1},"Using External AI","/workspace/ai/external-ai","20.workspace/50.ai/20.external-ai",[514],{"title":547,"path":548,"stem":549,"children":550,"page":55},"Webspace","/webspace","40.webspace",[551,555,559,563,567,571,576,580,584,588,592,621],{"title":552,"path":553,"stem":554,"children":-1},"What is WebSpace?","/webspace/overview","40.webspace/00.overview",{"title":556,"path":557,"stem":558,"children":-1},"Deploying a Website","/webspace/website-release","40.webspace/10.website-release",{"title":560,"path":561,"stem":562,"children":-1},"Create a schema file (.sfn)","/webspace/create-database","40.webspace/20.create-database",{"title":564,"path":565,"stem":566,"children":-1},"Build APIs and deploy a database","/webspace/api-overview","40.webspace/24.api-overview",{"title":568,"path":569,"stem":570,"children":-1},"Checking the Frontend Sample","/webspace/frontend-example","40.webspace/26.frontend-example",{"title":572,"path":573,"stem":574,"tags":575,"children":-1},"Building an Internal Team Web Service","/webspace/internal-webservice","40.webspace/32.internal-webservice",[307],{"title":577,"path":578,"stem":579,"children":-1},"Building a Publicly Accessible Web Service","/webspace/external-webservice","40.webspace/34.external-webservice",{"title":581,"path":582,"stem":583,"children":-1},"Import and export SQL","/webspace/sql-converter","40.webspace/42.sql-converter",{"title":585,"path":586,"stem":587,"children":-1},"Developer Tip 2: Code Converter","/webspace/code-converter","40.webspace/44.code-converter",{"title":589,"path":590,"stem":591,"children":-1},"Performance and scaling","/webspace/performance","40.webspace/48.performance",{"title":593,"path":594,"stem":595,"children":596,"page":55},"Webspace Management","/webspace/admin","40.webspace/50.admin",[597,601,605,609,613,617],{"title":598,"path":599,"stem":600,"children":-1},"Get started with WebSpace administration","/webspace/admin/overview","40.webspace/50.admin/00.overview",{"title":602,"path":603,"stem":604,"children":-1},"Operations","/webspace/admin/operations","40.webspace/50.admin/10.operations",{"title":606,"path":607,"stem":608,"children":-1},"Workspace access","/webspace/admin/workspace-access","40.webspace/50.admin/20.workspace-access",{"title":610,"path":611,"stem":612,"children":-1},"API & site security","/webspace/admin/api-site-security","40.webspace/50.admin/30.api-site-security",{"title":614,"path":615,"stem":616,"children":-1},"Services and capacity","/webspace/admin/service-capacity","40.webspace/50.admin/40.service-capacity",{"title":618,"path":619,"stem":620,"children":-1},"Deployment management and frontend releases","/webspace/admin/deployments","40.webspace/50.admin/50.deployments",{"title":622,"path":623,"stem":624,"children":625,"page":55},"Try WebSpace","/webspace/examples","40.webspace/60.examples",[626,630],{"title":627,"path":628,"stem":629,"children":-1},"WebSpace examples","/webspace/examples/overview","40.webspace/60.examples/00.overview",{"title":631,"path":632,"stem":633,"children":-1},"Build a real-time Gomoku game","/webspace/examples/realtime-gomoku","40.webspace/60.examples/20.realtime-gomoku",{"title":635,"path":636,"stem":637,"children":638,"page":55},"Using plugin","/plugin","50.plugin",[639,643,660,704,722,752],{"title":640,"path":641,"stem":642,"children":-1},"Plugin Overview","/plugin/overview","50.plugin/00.overview",{"title":644,"path":645,"stem":646,"children":647,"page":55},"Calendar","/plugin/calendar","50.plugin/10.calendar",[648,652,656],{"title":649,"path":650,"stem":651,"children":-1},"Calendar Introduction","/plugin/calendar/overview","50.plugin/10.calendar/00.overview",{"title":653,"path":654,"stem":655,"children":-1},"Creating, Editing, and Deleting Events","/plugin/calendar/create-event","50.plugin/10.calendar/10.create-event",{"title":657,"path":658,"stem":659,"children":-1},"Checking Activity History","/plugin/calendar/file-activity","50.plugin/10.calendar/40.file-activity",{"title":661,"path":662,"stem":663,"children":664,"page":55},"Email","/plugin/email","50.plugin/20.email",[665,669,672,676,680,684,688,692,696,700],{"title":666,"path":667,"stem":668,"children":-1},"Email Introduction","/plugin/email/overview","50.plugin/20.email/00.overview",{"title":129,"path":670,"stem":671,"children":-1},"/plugin/email/setfn-email-setting","50.plugin/20.email/05.setfn-email-setting",{"title":673,"path":674,"stem":675,"children":-1},"Connect an External Email Account","/plugin/email/external-email","50.plugin/20.email/07.external-email",{"title":677,"path":678,"stem":679,"children":-1},"Basic Email Functionality","/plugin/email/email-basic","50.plugin/20.email/10.email-basic",{"title":681,"path":682,"stem":683,"children":-1},"Composing and Sending Email","/plugin/email/email-compose","50.plugin/20.email/20.email-compose",{"title":685,"path":686,"stem":687,"children":-1},"Attaching Files","/plugin/email/email-attachment","50.plugin/20.email/30.email-attachment",{"title":689,"path":690,"stem":691,"children":-1},"Mail Folder Management","/plugin/email/email-folders","50.plugin/20.email/40.email-folders",{"title":693,"path":694,"stem":695,"children":-1},"Automatic Email Classification","/plugin/email/email-auto-classify","50.plugin/20.email/50.email-auto-classify",{"title":697,"path":698,"stem":699,"children":-1},"Email File Archiving and Sharing","/plugin/email/email-open-in-space","50.plugin/20.email/60.email-open-in-space",{"title":701,"path":702,"stem":703,"children":-1},"Email Security","/plugin/email/email-security","50.plugin/20.email/70.email-security",{"title":705,"path":706,"stem":707,"children":708,"page":55},"Workflow","/plugin/workflow","50.plugin/30.workflow",[709,713,718],{"title":710,"path":711,"stem":712,"children":-1},"Workflow Introduction","/plugin/workflow/overview","50.plugin/30.workflow/00.overview",{"title":714,"path":715,"stem":716,"tags":717,"children":-1},"Creating a New Workflow","/plugin/workflow/new-workflow","50.plugin/30.workflow/10.new-workflow",[307],{"title":719,"path":720,"stem":721,"children":-1},"Checking Execution History","/plugin/workflow/execution-history","50.plugin/30.workflow/20.execution-history",{"title":723,"path":724,"stem":725,"children":726,"page":55},"Pinetuning (AI learning)","/plugin/fine-tuning","50.plugin/40.fine-tuning",[727,732,736,740,744,748],{"title":728,"path":729,"stem":730,"tags":731,"children":-1},"Fine-tuning Introduction","/plugin/fine-tuning/overview","50.plugin/40.fine-tuning/00.overview",[307],{"title":733,"path":734,"stem":735,"children":-1},"Preprocessing Training Data","/plugin/fine-tuning/pre-processing","50.plugin/40.fine-tuning/10.pre-processing",{"title":737,"path":738,"stem":739,"children":-1},"Training","/plugin/fine-tuning/training","50.plugin/40.fine-tuning/20.training",{"title":741,"path":742,"stem":743,"children":-1},"Evaluation","/plugin/fine-tuning/evaluation","50.plugin/40.fine-tuning/30.evaluation",{"title":745,"path":746,"stem":747,"children":-1},"Chat Test","/plugin/fine-tuning/chat-test","50.plugin/40.fine-tuning/40.chat-test",{"title":749,"path":750,"stem":751,"children":-1},"Export","/plugin/fine-tuning/export","50.plugin/40.fine-tuning/50.export",{"title":753,"path":754,"stem":755,"children":756,"page":55},"EDC (data collection)","/plugin/edc","50.plugin/50.edc",[757,761,765,769],{"title":758,"path":759,"stem":760,"children":-1},"EDC Introduction","/plugin/edc/overview","50.plugin/50.edc/00.overview",{"title":762,"path":763,"stem":764,"children":-1},"Data Entry, Audit Trail","/plugin/edc/data-entry","50.plugin/50.edc/10.data-entry",{"title":766,"path":767,"stem":768,"children":-1},"Builder","/plugin/edc/builder","50.plugin/50.edc/20.builder",{"title":770,"path":771,"stem":772,"children":-1},"User/Site Settings","/plugin/edc/account","50.plugin/50.edc/30.account",{"title":774,"path":775,"stem":776,"children":777,"page":55},"FAQ","/faq","99.FAQ",[778,782,786,790,794,798,802],{"title":779,"path":780,"stem":781,"children":-1},"SetFN vs Cloud Services Comparison","/faq/comparison-cloud","99.FAQ/10.comparison-cloud",{"title":783,"path":784,"stem":785,"children":-1},"SetFN vs NAS Comparison","/faq/comparison-nas","99.FAQ/20.comparison-nas",{"title":787,"path":788,"stem":789,"children":-1},"Security Policy","/faq/security-policy","99.FAQ/30.security-policy",{"title":791,"path":792,"stem":793,"children":-1},"Why Is SetFN Fast","/faq/why-fast","99.FAQ/40.why-fast",{"title":795,"path":796,"stem":797,"children":-1},"License FAQ","/faq/license-faq","99.FAQ/50.license-faq",{"title":799,"path":800,"stem":801,"children":-1},"AI Features FAQ","/faq/ai-faq","99.FAQ/60.ai-faq",{"title":803,"path":804,"stem":805,"children":-1},"Troubleshooting Guide","/faq/troubleshooting","99.FAQ/70.troubleshooting",{"title":807,"path":808,"stem":809,"children":810,"page":55},"Applied (draft)","/draft","draft",[811,815,819,823,827,831,835,839,843,847,851,855,859],{"title":812,"path":813,"stem":814,"children":-1},"Example 1. Building an Introduction Page","/draft/static-intro","draft/05.static-intro",{"title":816,"path":817,"stem":818,"children":-1},"Example 2. Building a Notice Board","/draft/public-notice-board","draft/07.public-notice-board",{"title":820,"path":821,"stem":822,"children":-1},"Example 3. Building a Coffee Chat Booking System","/draft/coffee-chat-booking","draft/08.coffee-chat-booking",{"title":824,"path":825,"stem":826,"children":-1},"Example 4. Building a Leave Request System","/draft/leave-request","draft/09.leave-request",{"title":828,"path":829,"stem":830,"children":-1},"Example 5. Building Real-Time Team Chat","/draft/team-chat","draft/10.team-chat",{"title":832,"path":833,"stem":834,"children":-1},"Example 6. Building a Job Application Intake","/draft/client-submission","draft/11.client-submission",{"title":836,"path":837,"stem":838,"children":-1},"Example 7. Building an Issue Tracker with Team and Level Conditions","/draft/crm-basic","draft/12.crm-basic",{"title":840,"path":841,"stem":842,"children":-1},"Example 8. Building a Status Filter and Stats Summary Screen","/draft/crm-search-filter","draft/13.crm-search-filter",{"title":844,"path":845,"stem":846,"children":-1},"Example 9. Building Real-Time Community Chat with Moderation","/draft/community-moderation","draft/14.community-moderation",{"title":848,"path":849,"stem":850,"children":-1},"Example 10. Building a Real-Time Attendance Check / Poll","/draft/attendance-poll","draft/15.attendance-poll",{"title":852,"path":853,"stem":854,"children":-1},"Example 11. Building a Debate Battle","/draft/debate-battle","draft/16.debate-battle",{"title":856,"path":857,"stem":858,"children":-1},"Example 13. Building an Announcement Read Receipt","/draft/announcement-read","draft/18.announcement-read",{"title":860,"path":861,"stem":862,"children":-1},"Example 14. Building an Inventory Management System","/draft/inventory-management","draft/19.inventory-management",{"title":864,"path":865,"stem":866,"children":867,"page":55},"SJAUTO","/sjauto","sjauto",[868,872,876],{"title":869,"path":870,"stem":871,"children":-1},"Access the Administrator Page","/sjauto/admin-page-access","sjauto/00.admin-page-access",{"title":873,"path":874,"stem":875,"children":-1},"Sign Up and Sign In","/sjauto/signup","sjauto/10.signup",{"title":877,"path":878,"stem":879,"children":-1},"AI Chat Files","/sjauto/ai-chat-file","sjauto/ai-chat-file",{"id":881,"title":560,"body":882,"cover":1679,"description":1680,"extension":1681,"image":1679,"meta":1682,"navigation":1684,"path":561,"seo":1685,"stem":562,"tags":1679,"thumbnail":1679,"__hash__":1696},"docs_en/40.webspace/20.create-database.md",{"type":883,"value":884,"toc":1660},"minimal",[885,889,898,905,908,912,931,934,938,952,959,962,968,976,980,983,988,991,997,1042,1045,1048,1052,1064,1071,1077,1081,1084,1089,1095,1101,1151,1155,1161,1293,1311,1315,1318,1327,1331,1337,1343,1554,1562,1566,1569,1583,1587,1597,1600,1604,1619,1623,1629,1633,1656],[886,887,560],"h1",{"id":888},"create-a-schema-file-sfn",[890,891,892,893,897],"p",{},"WebSpace starts with a small file. Define the data and permissions in a schema file (",[894,895,896],"code",{},".sfn",") and deploy it to prepare a database and APIs together. You can then build a service that stores interface input and displays updates to other users in real time.",[890,899,900,901,904],{},"A schema file is the service blueprint. Saving it does not change the running database. Deploy it from ",[894,902,903],{},"API Build"," to apply it to the runtime.",[906,907],"hr",{},[909,910,705],"h2",{"id":911},"workflow",[913,914,915,919,922,925,928],"ol",{},[916,917,918],"li",{},"Create a schema file.",[916,920,921],{},"Configure tables and columns.",[916,923,924],{},"Review access permissions for each API.",[916,926,927],{},"Select a storage engine and deploy.",[916,929,930],{},"Call the generated APIs from HTML or an app.",[890,932,933],{},"You do not need to complete everything at once. Start with one small table, enter data from an actual interface, then add the structures and permissions you need.",[909,935,937],{"id":936},"create-a-new-schema-file","Create a new schema file",[890,939,940,941,944,945,944,948,951],{},"In the workspace, select ",[894,942,943],{},"Create"," > ",[894,946,947],{},"Template file",[894,949,950],{},"New schema (DB)",".",[890,953,954],{},[955,956],"img",{"alt":957,"src":958},"Create a schema file","./_screenshots/new-schema.png",[890,960,961],{},"Enter a file name and save it.",[890,963,964],{},[955,965],{"alt":966,"src":967},"Schema file","./_screenshots/schema-file-first.png",[890,969,970,971,951],{},"You do not select a database engine at this stage. Build the data structure first, then select SQLite3, PostgreSQL, MySQL, or MariaDB during ",[972,973,975],"a",{"href":974},"./api-overview","deployment",[909,977,979],{"id":978},"build-the-data-structure","Build the data structure",[890,981,982],{},"Build it directly, generate an initial draft with AI, or import existing SQL.",[984,985,987],"h3",{"id":986},"_1-generate-a-draft-with-ai","1. Generate a draft with AI",[890,989,990],{},"You do not need to know every database term. Describe the information you want to manage and who should manage it, and AI can generate a starting structure.",[890,992,993],{},[955,994],{"alt":995,"src":996},"Generate a schema draft with AI","./_screenshots/schema-file-ai-copy-button.png",[913,998,999,1005,1012,1025,1032],{},[916,1000,1001,1002,951],{},"Select ",[894,1003,1004],{},"Copy AI prompt",[916,1006,1007,1008],{},"Paste the copied prompt into the AI service you use.\n",[955,1009],{"alt":1010,"src":1011},"Paste into an AI prompt","./_screenshots/schema-paste-to-ai.png",[916,1013,1014,1015,1018,1019],{},"Under ",[894,1016,1017],{},"User request",", describe the service you want to build.",[1020,1021,1022],"blockquote",{},[890,1023,1024],{},"Example: Manage patent names, application numbers, owners, and progress. Allow only the assigned owner and administrators to edit records.",[916,1026,1027,1028],{},"Copy the JSON produced by the AI and paste it into the import screen.\n",[955,1029],{"alt":1030,"src":1031},"Import a schema","./_screenshots/schema-load.png",[916,1033,1001,1034,1037,1038],{},[894,1035,1036],{},"Import"," to create the database tables.\n",[955,1039],{"alt":1040,"src":1041},"Schema example","./_screenshots/schema-example.png",[890,1043,1044],{},"The copied instructions include the schema format and authoring rules. Prefer a structure that works with multiple storage engines over SQL tied to one database.",[890,1046,1047],{},"AI output is only a draft. Before deployment, check that names are clear, identify any personal information, and verify who should be able to read and update the data.",[984,1049,1051],{"id":1050},"_2-import-sql","2. Import SQL",[890,1053,1014,1054,944,1056,1059,1060,1063],{},[894,1055,1036],{},[894,1057,1058],{},"SQL",", paste existing ",[894,1061,1062],{},"CREATE TABLE"," statements. WebSpace reads common SQLite, PostgreSQL, and MySQL/MariaDB types, defaults, indexes, and constraints and converts them into a schema file.",[890,1065,1066,1067,1070],{},"You can also open a SQL file in the workspace and use ",[894,1068,1069],{},"Convert to SetFN schema",". Both paths use the same conversion rules.",[1072,1073,1074],"warning",{},[890,1075,1076],{},"Database-specific types, functions, triggers, partitions, and stored procedures may not transfer directly or may change meaning. Review the conversion result and warnings, then verify it again with the storage engine you will use.",[984,1078,1080],{"id":1079},"_3-build-it-directly-in-the-interface","3. Build it directly in the interface",[890,1082,1083],{},"Add tables and columns one at a time in the grid editor.",[1085,1086,1088],"h4",{"id":1087},"add-a-table","Add a table",[890,1090,1091],{},[955,1092],{"alt":1093,"src":1094},"Add a table or column","./_screenshots/schema-add-table-column.png",[890,1096,1001,1097,1100],{},[894,1098,1099],{},"+ Add table"," at the top of the main screen and enter the table information.",[1102,1103,1104,1117],"table",{},[1105,1106,1107],"thead",{},[1108,1109,1110,1114],"tr",{},[1111,1112,1113],"th",{},"Item",[1111,1115,1116],{},"Description",[1118,1119,1120,1132,1140],"tbody",{},[1108,1121,1122,1126],{},[1123,1124,1125],"td",{},"Table Name",[1123,1127,1128,1129],{},"Table name also used in API addresses, such as ",[894,1130,1131],{},"user_profile",[1108,1133,1134,1137],{},[1123,1135,1136],{},"Explain",[1123,1138,1139],{},"A description users can understand",[1108,1141,1142,1145],{},[1123,1143,1144],{},"Schema",[1123,1146,1147,1148],{},"Database schema name, such as ",[894,1149,1150],{},"public",[1085,1152,1154],{"id":1153},"add-columns","Add columns",[890,1156,1001,1157,1160],{},[894,1158,1159],{},"+ Add"," to add a row to the column list. Each row represents one column.",[1102,1162,1163,1174],{},[1105,1164,1165],{},[1108,1166,1167,1169,1171],{},[1111,1168,1113],{},[1111,1170,1116],{},[1111,1172,1173],{},"Example",[1118,1175,1176,1193,1212,1225,1236,1252,1263,1273,1283],{},[1108,1177,1178,1181,1184],{},[1123,1179,1180],{},"Column Name",[1123,1182,1183],{},"Column name",[1123,1185,1186,1189,1190],{},[894,1187,1188],{},"user_id",", ",[894,1191,1192],{},"email",[1108,1194,1195,1198,1201],{},[1123,1196,1197],{},"Type",[1123,1199,1200],{},"Data type",[1123,1202,1203,1189,1206,1189,1209],{},[894,1204,1205],{},"varchar",[894,1207,1208],{},"int",[894,1210,1211],{},"bool",[1108,1213,1214,1217,1220],{},[1123,1215,1216],{},"Length",[1123,1218,1219],{},"Data length",[1123,1221,1222],{},[894,1223,1224],{},"255",[1108,1226,1227,1230,1233],{},[1123,1228,1229],{},"Comment",[1123,1231,1232],{},"Column description",[1123,1234,1235],{},"User name",[1108,1237,1238,1241,1244],{},[1123,1239,1240],{},"Default",[1123,1242,1243],{},"Default value",[1123,1245,1246,1189,1249],{},[894,1247,1248],{},"auto_increment",[894,1250,1251],{},"NULL",[1108,1253,1254,1257,1260],{},[1123,1255,1256],{},"Unsigned",[1123,1258,1259],{},"Whether only positive values are allowed",[1123,1261,1262],{},"-",[1108,1264,1265,1268,1271],{},[1123,1266,1267],{},"Index",[1123,1269,1270],{},"Whether to create an index",[1123,1272,1262],{},[1108,1274,1275,1278,1281],{},[1123,1276,1277],{},"Unique",[1123,1279,1280],{},"Whether values must be unique",[1123,1282,1262],{},[1108,1284,1285,1288,1291],{},[1123,1286,1287],{},"Not null",[1123,1289,1290],{},"Whether a value is required",[1123,1292,1262],{},[890,1294,1295,1296,1299,1300,1189,1303,1306,1307,1310],{},"Use ",[894,1297,1298],{},"System columns"," to add commonly used fields such as ",[894,1301,1302],{},"_user_id",[894,1304,1305],{},"_nick",", and ",[894,1308,1309],{},"_created_at"," for recording users and creation times.",[1085,1312,1314],{"id":1313},"copy-or-delete-a-column","Copy or delete a column",[890,1316,1317],{},"Right-click a column to open its context menu.",[1319,1320,1321,1324],"ul",{},[916,1322,1323],{},"Copy and add: Adds a copy of the selected column below it with the same properties.",[916,1325,1326],{},"Delete: Deletes the selected column.",[984,1328,1330],{"id":1329},"_4-edit-as-json","4. Edit as JSON",[890,1332,1333],{},[955,1334],{"alt":1335,"src":1336},"Schema editor","./_screenshots/schema-editor_en.png",[890,1338,1001,1339,1342],{},[894,1340,1341],{},"Editor"," at the upper right to edit the complete structure as JSON. The JSON and grid editors use the same content, so you can switch between them.",[1344,1345,1350],"pre",{"className":1346,"code":1347,"language":1348,"meta":1349,"style":1349},"language-json shiki shiki-themes github-light github-dark monokai","{\n  \"content-type\": \"application/setfn-schema\",\n  \"dbType\": \"sqlite3\",\n  \"data\": [\n    {\n      \"table\": { \"name\": \"user_profile\", \"schema\": \"public\" },\n      \"columns\": [\n        {\n          \"name\": \"email\",\n          \"type\": \"varchar\",\n          \"len\": 255,\n          \"unique\": true,\n          \"notnull\": true\n        }\n      ],\n      \"label\": \"User profile\"\n    }\n  ]\n}\n","json","",[894,1351,1352,1361,1378,1391,1400,1406,1436,1444,1450,1463,1476,1489,1502,1513,1519,1525,1536,1542,1548],{"__ignoreMap":1349},[1353,1354,1357],"span",{"class":1355,"line":1356},"line",1,[1353,1358,1360],{"class":1359},"sMOD_","{\n",[1353,1362,1364,1368,1371,1375],{"class":1355,"line":1363},2,[1353,1365,1367],{"class":1366},"s-m8C","  \"content-type\"",[1353,1369,1370],{"class":1359},": ",[1353,1372,1374],{"class":1373},"sCZoN","\"application/setfn-schema\"",[1353,1376,1377],{"class":1359},",\n",[1353,1379,1381,1384,1386,1389],{"class":1355,"line":1380},3,[1353,1382,1383],{"class":1366},"  \"dbType\"",[1353,1385,1370],{"class":1359},[1353,1387,1388],{"class":1373},"\"sqlite3\"",[1353,1390,1377],{"class":1359},[1353,1392,1394,1397],{"class":1355,"line":1393},4,[1353,1395,1396],{"class":1366},"  \"data\"",[1353,1398,1399],{"class":1359},": [\n",[1353,1401,1403],{"class":1355,"line":1402},5,[1353,1404,1405],{"class":1359},"    {\n",[1353,1407,1409,1412,1415,1418,1420,1423,1425,1428,1430,1433],{"class":1355,"line":1408},6,[1353,1410,1411],{"class":1366},"      \"table\"",[1353,1413,1414],{"class":1359},": { ",[1353,1416,1417],{"class":1366},"\"name\"",[1353,1419,1370],{"class":1359},[1353,1421,1422],{"class":1373},"\"user_profile\"",[1353,1424,1189],{"class":1359},[1353,1426,1427],{"class":1366},"\"schema\"",[1353,1429,1370],{"class":1359},[1353,1431,1432],{"class":1373},"\"public\"",[1353,1434,1435],{"class":1359}," },\n",[1353,1437,1439,1442],{"class":1355,"line":1438},7,[1353,1440,1441],{"class":1366},"      \"columns\"",[1353,1443,1399],{"class":1359},[1353,1445,1447],{"class":1355,"line":1446},8,[1353,1448,1449],{"class":1359},"        {\n",[1353,1451,1453,1456,1458,1461],{"class":1355,"line":1452},9,[1353,1454,1455],{"class":1366},"          \"name\"",[1353,1457,1370],{"class":1359},[1353,1459,1460],{"class":1373},"\"email\"",[1353,1462,1377],{"class":1359},[1353,1464,1466,1469,1471,1474],{"class":1355,"line":1465},10,[1353,1467,1468],{"class":1366},"          \"type\"",[1353,1470,1370],{"class":1359},[1353,1472,1473],{"class":1373},"\"varchar\"",[1353,1475,1377],{"class":1359},[1353,1477,1479,1482,1484,1487],{"class":1355,"line":1478},11,[1353,1480,1481],{"class":1366},"          \"len\"",[1353,1483,1370],{"class":1359},[1353,1485,1224],{"class":1486},"s7F3e",[1353,1488,1377],{"class":1359},[1353,1490,1492,1495,1497,1500],{"class":1355,"line":1491},12,[1353,1493,1494],{"class":1366},"          \"unique\"",[1353,1496,1370],{"class":1359},[1353,1498,1499],{"class":1486},"true",[1353,1501,1377],{"class":1359},[1353,1503,1505,1508,1510],{"class":1355,"line":1504},13,[1353,1506,1507],{"class":1366},"          \"notnull\"",[1353,1509,1370],{"class":1359},[1353,1511,1512],{"class":1486},"true\n",[1353,1514,1516],{"class":1355,"line":1515},14,[1353,1517,1518],{"class":1359},"        }\n",[1353,1520,1522],{"class":1355,"line":1521},15,[1353,1523,1524],{"class":1359},"      ],\n",[1353,1526,1528,1531,1533],{"class":1355,"line":1527},16,[1353,1529,1530],{"class":1366},"      \"label\"",[1353,1532,1370],{"class":1359},[1353,1534,1535],{"class":1373},"\"User profile\"\n",[1353,1537,1539],{"class":1355,"line":1538},17,[1353,1540,1541],{"class":1359},"    }\n",[1353,1543,1545],{"class":1355,"line":1544},18,[1353,1546,1547],{"class":1359},"  ]\n",[1353,1549,1551],{"class":1355,"line":1550},19,[1353,1552,1553],{"class":1359},"}\n",[890,1555,1556,1559,1560,951],{},[894,1557,1558],{},"dbType"," provides compatibility with existing files; it does not select the runtime engine. Choose the final engine and connection information in the storage step of ",[894,1561,903],{},[909,1563,1565],{"id":1564},"api-permissions-matter-as-much-as-data","API permissions matter as much as data",[890,1567,1568],{},"For each API, configure sign-in requirements, minimum level, administrator access, team access, and whether a user may access only records they created.",[1319,1570,1571,1574,1577,1580],{},[916,1572,1573],{},"Do not use public access for lists containing personal information.",[916,1575,1576],{},"Specify an owner column for user-specific data.",[916,1578,1579],{},"Start update and delete permissions more narrowly than read permissions.",[916,1581,1582],{},"Check that the permission summary shows every intended condition.",[909,1584,1586],{"id":1585},"after-saving","After saving",[890,1588,1589,1590,1593,1594,1596],{},"Save the schema with the button at the upper left or ",[894,1591,1592],{},"Ctrl+S",". Then open ",[894,1595,903],{},", review endpoints and permissions, and deploy it as a database.",[890,1598,1599],{},"After deployment, create one small record. When the new structure appears in an API response, the schema file has become a working service rather than just a document.",[909,1601,1603],{"id":1602},"good-to-know","Good to know",[1319,1605,1606,1613,1616],{},[916,1607,1608,1609,1612],{},"Use only lowercase English letters, numbers, and underscores (",[894,1610,1611],{},"_",") in table and column names.",[916,1614,1615],{},"For many columns, use JSON editing or SQL import.",[916,1617,1618],{},"Depending on administrator policy, overwriting a schema with existing data may be prohibited or restricted to administrators and deployment operators.",[909,1620,1622],{"id":1621},"next-step","Next step",[890,1624,1625,1626,1628],{},"Continue with ",[972,1627,564],{"href":974}," to select the storage engine, review endpoints, and run your first API.",[909,1630,1632],{"id":1631},"related-documents","Related documents",[1319,1634,1635,1641,1645,1650],{},[916,1636,1637],{},[972,1638,1640],{"href":1639},"./examples/realtime-gomoku","Example: Build a real-time Gomoku game",[916,1642,1643],{},[972,1644,564],{"href":974},[916,1646,1647],{},[972,1648,581],{"href":1649},"./sql-converter",[916,1651,1652],{},[972,1653,1655],{"href":1654},"./frontend-example","Build a frontend interface",[1657,1658,1659],"style",{},"html pre.shiki code .sMOD_, html code.shiki .sMOD_{--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .s-m8C, html code.shiki .s-m8C{--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sCZoN, html code.shiki .sCZoN{--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#CFCFC2}html pre.shiki code .s7F3e, html code.shiki .s7F3e{--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}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 .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":1349,"searchDepth":1363,"depth":1380,"links":1661},[1662,1663,1664,1674,1675,1676,1677,1678],{"id":911,"depth":1363,"text":705},{"id":936,"depth":1363,"text":937},{"id":978,"depth":1363,"text":979,"children":1665},[1666,1667,1668,1673],{"id":986,"depth":1380,"text":987},{"id":1050,"depth":1380,"text":1051},{"id":1079,"depth":1380,"text":1080,"children":1669},[1670,1671,1672],{"id":1087,"depth":1393,"text":1088},{"id":1153,"depth":1393,"text":1154},{"id":1313,"depth":1393,"text":1314},{"id":1329,"depth":1380,"text":1330},{"id":1564,"depth":1363,"text":1565},{"id":1585,"depth":1363,"text":1586},{"id":1602,"depth":1363,"text":1603},{"id":1621,"depth":1363,"text":1622},{"id":1631,"depth":1363,"text":1632},null,"Learn how to design data structures and API permissions in a schema file (.sfn) and deploy it as a WebSpace service.","md",{"slug":1683},"/webspace/create-database/",true,{"title":1686,"description":1687,"ogType":1688,"twitterCard":1689,"keywords":1690},"Create a schema file (.sfn) | WebSpace Docs","Create a WebSpace schema file with AI, SQL import, or the editing interface.","article","summary_large_image",[1691,1692,528,1693,1694,1695],"create schema file","API","DB","AI schema","SQL import","TFIr6JbS6GaiHsnxF8K-RLXG2cu4-H90A_DOwg414_I",[1698,1699],{"title":556,"path":557,"stem":558,"children":-1},{"title":564,"path":565,"stem":566,"children":-1},{"title":560,"filename":1701,"content":1702},"create-database","# Create a schema file (.sfn)\n\nWebSpace starts with a small file. Define the data and permissions in a schema file (`.sfn`) and deploy it to prepare a database and APIs together. You can then build a service that stores interface input and displays updates to other users in real time.\n\nA schema file is the service blueprint. Saving it does not change the running database. Deploy it from `API Build` to apply it to the runtime.\n\n---\n\n## Workflow\n\n1. Create a schema file.\n2. Configure tables and columns.\n3. Review access permissions for each API.\n4. Select a storage engine and deploy.\n5. Call the generated APIs from HTML or an app.\n\nYou do not need to complete everything at once. Start with one small table, enter data from an actual interface, then add the structures and permissions you need.\n\n## Create a new schema file\n\nIn the workspace, select `Create` > `Template file` > `New schema (DB)`.\n\n![Create a schema file](./_screenshots/new-schema.png)\n\nEnter a file name and save it.\n\n![Schema file](./_screenshots/schema-file-first.png)\n\nYou do not select a database engine at this stage. Build the data structure first, then select SQLite3, PostgreSQL, MySQL, or MariaDB during [deployment](./24.api-overview.md).\n\n## Build the data structure\n\nBuild it directly, generate an initial draft with AI, or import existing SQL.\n\n### 1. Generate a draft with AI\n\nYou do not need to know every database term. Describe the information you want to manage and who should manage it, and AI can generate a starting structure.\n\n![Generate a schema draft with AI](./_screenshots/schema-file-ai-copy-button.png)\n\n1. Select `Copy AI prompt`.\n2. Paste the copied prompt into the AI service you use.\n   ![Paste into an AI prompt](./_screenshots/schema-paste-to-ai.png)\n3. Under `User request`, describe the service you want to build.\n\n   > Example: Manage patent names, application numbers, owners, and progress. Allow only the assigned owner and administrators to edit records.\n\n4. Copy the JSON produced by the AI and paste it into the import screen.\n   ![Import a schema](./_screenshots/schema-load.png)\n5. Select `Import` to create the database tables.\n   ![Schema example](./_screenshots/schema-example.png)\n\nThe copied instructions include the schema format and authoring rules. Prefer a structure that works with multiple storage engines over SQL tied to one database.\n\nAI output is only a draft. Before deployment, check that names are clear, identify any personal information, and verify who should be able to read and update the data.\n\n### 2. Import SQL\n\nUnder `Import` > `SQL`, paste existing `CREATE TABLE` statements. WebSpace reads common SQLite, PostgreSQL, and MySQL/MariaDB types, defaults, indexes, and constraints and converts them into a schema file.\n\nYou can also open a SQL file in the workspace and use `Convert to SetFN schema`. Both paths use the same conversion rules.\n\n::warning\nDatabase-specific types, functions, triggers, partitions, and stored procedures may not transfer directly or may change meaning. Review the conversion result and warnings, then verify it again with the storage engine you will use.\n::\n\n### 3. Build it directly in the interface\n\nAdd tables and columns one at a time in the grid editor.\n\n#### Add a table\n\n![Add a table or column](./_screenshots/schema-add-table-column.png)\n\nSelect `+ Add table` at the top of the main screen and enter the table information.\n\n| Item | Description |\n| --- | --- |\n| Table Name | Table name also used in API addresses, such as `user_profile` |\n| Explain | A description users can understand |\n| Schema | Database schema name, such as `public` |\n\n#### Add columns\n\nSelect `+ Add` to add a row to the column list. Each row represents one column.\n\n| Item | Description | Example |\n| --- | --- | --- |\n| Column Name | Column name | `user_id`, `email` |\n| Type | Data type | `varchar`, `int`, `bool` |\n| Length | Data length | `255` |\n| Comment | Column description | User name |\n| Default | Default value | `auto_increment`, `NULL` |\n| Unsigned | Whether only positive values are allowed | - |\n| Index | Whether to create an index | - |\n| Unique | Whether values must be unique | - |\n| Not null | Whether a value is required | - |\n\nUse `System columns` to add commonly used fields such as `_user_id`, `_nick`, and `_created_at` for recording users and creation times.\n\n#### Copy or delete a column\n\nRight-click a column to open its context menu.\n\n- Copy and add: Adds a copy of the selected column below it with the same properties.\n- Delete: Deletes the selected column.\n\n### 4. Edit as JSON\n\n![Schema editor](./_screenshots/schema-editor_en.png)\n\nSelect `Editor` at the upper right to edit the complete structure as JSON. The JSON and grid editors use the same content, so you can switch between them.\n\n```json\n{\n  \"content-type\": \"application/setfn-schema\",\n  \"dbType\": \"sqlite3\",\n  \"data\": [\n    {\n      \"table\": { \"name\": \"user_profile\", \"schema\": \"public\" },\n      \"columns\": [\n        {\n          \"name\": \"email\",\n          \"type\": \"varchar\",\n          \"len\": 255,\n          \"unique\": true,\n          \"notnull\": true\n        }\n      ],\n      \"label\": \"User profile\"\n    }\n  ]\n}\n```\n\n`dbType` provides compatibility with existing files; it does not select the runtime engine. Choose the final engine and connection information in the storage step of `API Build`.\n\n## API permissions matter as much as data\n\nFor each API, configure sign-in requirements, minimum level, administrator access, team access, and whether a user may access only records they created.\n\n- Do not use public access for lists containing personal information.\n- Specify an owner column for user-specific data.\n- Start update and delete permissions more narrowly than read permissions.\n- Check that the permission summary shows every intended condition.\n\n## After saving\n\nSave the schema with the button at the upper left or `Ctrl+S`. Then open `API Build`, review endpoints and permissions, and deploy it as a database.\n\nAfter deployment, create one small record. When the new structure appears in an API response, the schema file has become a working service rather than just a document.\n\n## Good to know\n\n- Use only lowercase English letters, numbers, and underscores (`_`) in table and column names.\n- For many columns, use JSON editing or SQL import.\n- Depending on administrator policy, overwriting a schema with existing data may be prohibited or restricted to administrators and deployment operators.\n\n## Next step\n\nContinue with [Build APIs and deploy a database](./24.api-overview.md) to select the storage engine, review endpoints, and run your first API.\n\n## Related documents\n\n- [Example: Build a real-time Gomoku game](./60.examples/20.realtime-gomoku.md)\n- [Build APIs and deploy a database](./24.api-overview.md)\n- [Import and export SQL](./42.sql-converter.md)\n- [Build a frontend interface](./26.frontend-example.md)\n",1789664756192]