[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"landing-site-settings:localized-content-set-v4":3,"landing-navigation-items:localized-content-set-v4":32,"landing-page-seo:\u002F:localized-content-set-v3":117,"landing-faq-items:localized-content-set-v3":147,"landing-footer-link-groups:localized-content-set-v3":220,"landing-page:\u002F:sections-items-localized-content-set-v3":402},[4],{"siteUrl":5,"githubUrl":6,"enfyraVersion":7,"contentSet":8},"https:\u002F\u002Fenfyra.io","https:\u002F\u002Fgithub.com\u002Fenfyra\u002Fenfyra","2.2.20",{"id":9,"contents":10},56,[11],{"languageCode":12,"values":13,"isActive":30,"id":31},"en",{"siteName":14,"logoText":14,"description":15,"copyrightText":16,"navMenuTitle":17,"navMenuDescription":18,"docsSearchButtonLabel":19,"docsSidebarToggleLabel":20,"docsSearchTitle":19,"docsSearchDescription":21,"docsSearchPlaceholder":22,"docsSearchEmptyText":23,"docsSearchNoResultsText":24,"docsSearchFooterHint":25,"copyCommandLabel":26,"copiedCommandLabel":27,"backToTopLabel":28,"themeMenuLabel":29},"Enfyra","Live metadata backend platform for APIs, permissions, hooks, workflows, realtime behavior, and admin tools on Enfyra Cloud or your own infrastructure.","© 2026 Enfyra. Licensed under Elastic License 2.0.","Navigation","Primary Enfyra navigation","Search documentation","Toggle documentation navigation","Search docs by title, summary, slug, and body content.","Search docs...","Type to search every cached documentation page.","No matching docs found.","↑↓ Enter Esc","Copy command","Copied command","Back to top","Theme menu",true,524,[33,48,59,72,84,95,106],{"id":34,"kind":35,"type":36,"to":37,"href":38,"icon":38,"order":34,"metadata":39,"contentSet":41},1,"primary","internal","\u002F",null,{"active":40},"exact",{"id":42,"contents":43},46,[44],{"languageCode":12,"values":45,"isActive":30,"id":47},{"label":46,"ariaLabel":38},"Home",525,{"id":49,"kind":35,"type":36,"to":50,"href":38,"icon":38,"order":49,"metadata":51,"contentSet":52},2,"\u002Ffeatures",{"active":40},{"id":53,"contents":54},47,[55],{"languageCode":12,"values":56,"isActive":30,"id":58},{"label":57,"ariaLabel":38},"Features",526,{"id":60,"kind":35,"type":36,"to":61,"href":38,"icon":62,"order":63,"metadata":64,"contentSet":65},7,"\u002Fpricing","lucide:badge-dollar-sign",3,{"active":40},{"id":66,"contents":67},51,[68],{"languageCode":12,"values":69,"isActive":30,"id":71},{"label":70,"ariaLabel":70},"Pricing",531,{"id":63,"kind":35,"type":36,"to":73,"href":38,"icon":38,"order":74,"metadata":75,"contentSet":77},"\u002Fdocs",4,{"active":76},"prefix",{"id":78,"contents":79},48,[80],{"languageCode":12,"values":81,"isActive":30,"id":83},{"label":82,"ariaLabel":38},"Docs",527,{"id":74,"kind":35,"type":36,"to":85,"href":38,"icon":38,"order":86,"metadata":87,"contentSet":88},"\u002Fgetting-started",5,{"active":40},{"id":89,"contents":90},49,[91],{"languageCode":12,"values":92,"isActive":30,"id":94},{"label":93,"ariaLabel":38},"Getting Started",528,{"id":86,"kind":35,"type":36,"to":96,"href":38,"icon":38,"order":97,"metadata":98,"contentSet":99},"\u002Fcommunity",6,{"active":40},{"id":100,"contents":101},50,[102],{"languageCode":12,"values":103,"isActive":30,"id":105},{"label":104,"ariaLabel":38},"Community",529,{"id":97,"kind":107,"type":108,"to":38,"href":6,"icon":109,"order":34,"metadata":38,"contentSet":110},"social","external","lucide:github",{"id":111,"contents":112},338,[113],{"languageCode":12,"values":114,"isActive":30,"id":116},{"label":115,"ariaLabel":115},"GitHub",530,[118],{"path":37,"changefreq":119,"priority":120,"ogImage":38,"contentSet":121},"daily","1",{"id":122,"contents":123},321,[124],{"languageCode":12,"values":125,"isActive":30,"id":146},{"title":126,"description":127,"keywords":128,"structuredData":134},"Enfyra - Live metadata backend platform","Build backends from live metadata. Start with Enfyra Cloud or run the open-source runtime on your own infrastructure.",[14,129,130,131,132,133],"Programmable BaaS","Backend platform","Enfyra Cloud","Self-hosted backend","Generated REST API",{"@type":135,"name":14,"applicationCategory":136,"operatingSystem":137,"offers":138,"aggregateRating":142},"SoftwareApplication","DeveloperApplication","Any",{"@type":139,"price":140,"priceCurrency":141},"Offer","0","USD",{"@type":143,"ratingValue":144,"ratingCount":145},"AggregateRating","4.8","150",507,[148,157,166,175,184,193,202,211],{"contentSet":149},{"id":150,"contents":151},330,[152],{"languageCode":12,"values":153,"isActive":30,"id":156},{"question":154,"answer":155},"What is Enfyra?","Enfyra is an open-source backend platform that turns metadata and database schemas into REST APIs, optional GraphQL, auth, storage, realtime features, and server-side logic without repetitive backend boilerplate.",516,{"contentSet":158},{"id":159,"contents":160},331,[161],{"languageCode":12,"values":162,"isActive":30,"id":165},{"question":163,"answer":164},"Is Enfyra free to use?","Yes. Enfyra Server is open source and can be self-hosted on your own infrastructure. Enfyra Cloud is a separate hosted offering for teams that want managed infrastructure.",517,{"contentSet":167},{"id":168,"contents":169},332,[170],{"languageCode":12,"values":171,"isActive":30,"id":174},{"question":172,"answer":173},"What databases does Enfyra support?","Enfyra supports PostgreSQL, MySQL-compatible databases, and MongoDB. The server detects the database type from mysql:\u002F\u002F, postgres:\u002F\u002F, postgresql:\u002F\u002F, or mongodb:\u002F\u002F DB_URI protocols.",518,{"contentSet":176},{"id":177,"contents":178},333,[179],{"languageCode":12,"values":180,"isActive":30,"id":183},{"question":181,"answer":182},"Does Enfyra generate both REST and GraphQL APIs?","REST is the default generated API surface. GraphQL can be enabled per table when you want a schema-driven query layer alongside REST.",519,{"contentSet":185},{"id":186,"contents":187},334,[188],{"languageCode":12,"values":189,"isActive":30,"id":192},{"question":190,"answer":191},"Can I add custom backend logic?","Yes. Enfyra supports live metadata route handlers, pre-hooks, post-hooks, flows, and WebSocket event scripts so custom logic can run close to your data.",520,{"contentSet":194},{"id":195,"contents":196},335,[197],{"languageCode":12,"values":198,"isActive":30,"id":201},{"question":199,"answer":200},"Can Enfyra run in multiple instances?","Yes. Enfyra supports multi-instance deployments with Redis cache invalidation, BullMQ queues, Socket.IO Redis adapter support, and NODE_NAME-scoped runtime telemetry.",521,{"contentSet":203},{"id":204,"contents":205},336,[206],{"languageCode":12,"values":207,"isActive":30,"id":210},{"question":208,"answer":209},"Does Enfyra include authentication and file storage?","Yes. Enfyra includes JWT authentication, role and route permissions, field permissions, file management, and configurable local or cloud storage backends.",522,{"contentSet":212},{"id":213,"contents":214},337,[215],{"languageCode":12,"values":216,"isActive":30,"id":219},{"question":217,"answer":218},"Is Enfyra Cloud required?","No. Enfyra can be self-hosted today. Enfyra Cloud is for users who want isolated hosted Enfyra projects without operating the runtime themselves.",523,[221,263,309,352],{"id":222,"type":223,"order":34,"contentSet":224,"children":231},14,"group",{"id":225,"contents":226},52,[227],{"languageCode":12,"values":228,"isActive":30,"id":230},{"label":229},"Product",545,[232,239,246,254],{"id":34,"type":36,"to":50,"href":38,"order":34,"isActive":30,"contentSet":233},{"id":234,"contents":235},57,[236],{"languageCode":12,"values":237,"isActive":30,"id":238},{"label":57},532,{"id":49,"type":36,"to":85,"href":38,"order":49,"isActive":30,"contentSet":240},{"id":241,"contents":242},58,[243],{"languageCode":12,"values":244,"isActive":30,"id":245},{"label":93},533,{"id":63,"type":36,"to":73,"href":38,"order":63,"isActive":30,"contentSet":247},{"id":248,"contents":249},59,[250],{"languageCode":12,"values":251,"isActive":30,"id":253},{"label":252},"Documentation",534,{"id":74,"type":108,"to":38,"href":255,"order":74,"isActive":30,"contentSet":256},"https:\u002F\u002Fdemo.enfyra.io\u002F",{"id":257,"contents":258},60,[259],{"languageCode":12,"values":260,"isActive":30,"id":262},{"label":261},"Demo",535,{"id":264,"type":223,"order":49,"contentSet":265,"children":272},15,{"id":266,"contents":267},53,[268],{"languageCode":12,"values":269,"isActive":30,"id":271},{"label":270},"Resources",546,[273,282,291,300],{"id":274,"type":36,"to":73,"href":38,"order":34,"isActive":30,"contentSet":275},9,{"id":276,"contents":277},65,[278],{"languageCode":12,"values":279,"isActive":30,"id":281},{"label":280},"API Reference",540,{"id":283,"type":36,"to":73,"href":38,"order":49,"isActive":30,"contentSet":284},10,{"id":285,"contents":286},66,[287],{"languageCode":12,"values":288,"isActive":30,"id":290},{"label":289},"Examples",541,{"id":292,"type":36,"to":73,"href":38,"order":63,"isActive":30,"contentSet":293},11,{"id":294,"contents":295},91,[296],{"languageCode":12,"values":297,"isActive":30,"id":299},{"label":298},"Architecture",542,{"id":301,"type":108,"to":38,"href":6,"order":74,"isActive":30,"contentSet":302},12,{"id":303,"contents":304},92,[305],{"languageCode":12,"values":306,"isActive":30,"id":308},{"label":307},"Contributing",543,{"id":310,"type":223,"order":63,"contentSet":311,"children":317},16,{"id":312,"contents":313},54,[314],{"languageCode":12,"values":315,"isActive":30,"id":316},{"label":104},547,[318,325,334,342],{"id":86,"type":108,"to":38,"href":6,"order":34,"isActive":30,"contentSet":319},{"id":320,"contents":321},61,[322],{"languageCode":12,"values":323,"isActive":30,"id":324},{"label":115},536,{"id":97,"type":108,"to":38,"href":326,"order":49,"isActive":30,"contentSet":327},"https:\u002F\u002Fdiscord.gg\u002FDH5sXtFVWM",{"id":328,"contents":329},62,[330],{"languageCode":12,"values":331,"isActive":30,"id":333},{"label":332},"Discord",537,{"id":60,"type":36,"to":96,"href":38,"order":63,"isActive":30,"contentSet":335},{"id":336,"contents":337},63,[338],{"languageCode":12,"values":339,"isActive":30,"id":341},{"label":340},"Discussions",538,{"id":343,"type":108,"to":38,"href":344,"order":74,"isActive":30,"contentSet":345},8,"https:\u002F\u002Fgithub.com\u002Fenfyra\u002Fenfyra\u002Fissues",{"id":346,"contents":347},64,[348],{"languageCode":12,"values":349,"isActive":30,"id":351},{"label":350},"Issues",539,{"id":353,"type":223,"order":74,"contentSet":354,"children":361},17,{"id":355,"contents":356},55,[357],{"languageCode":12,"values":358,"isActive":30,"id":360},{"label":359},"Legal",548,[362,372,382,392],{"id":363,"type":36,"to":364,"href":38,"order":34,"isActive":30,"contentSet":365},13,"\u002Fcloud-terms",{"id":366,"contents":367},93,[368],{"languageCode":12,"values":369,"isActive":30,"id":371},{"label":370},"Cloud Terms",544,{"id":373,"type":36,"to":374,"href":38,"order":49,"isActive":30,"contentSet":375},18,"\u002Fprivacy-policy",{"id":376,"contents":377},94,[378],{"languageCode":12,"values":379,"isActive":30,"id":381},{"label":380},"Privacy Policy",549,{"id":383,"type":36,"to":384,"href":38,"order":63,"isActive":30,"contentSet":385},19,"\u002Frefund-policy",{"id":386,"contents":387},95,[388],{"languageCode":12,"values":389,"isActive":30,"id":391},{"label":390},"Refund Policy",550,{"id":393,"type":36,"to":394,"href":38,"order":74,"isActive":30,"contentSet":395},20,"\u002Fcloud-headroom",{"id":396,"contents":397},96,[398],{"languageCode":12,"values":399,"isActive":30,"id":401},{"label":400},"Cloud Provider Model",551,[403],{"id":34,"path":37,"slug":404,"order":34,"isActive":30,"contentSet":405,"sections":410},"home",{"id":34,"contents":406},[407],{"languageCode":12,"values":408,"isActive":30,"id":34},{"title":14,"description":409},"Live metadata backend platform for data models, APIs, permissions, hooks, workflows, realtime behavior, and admin tools that can evolve without routine server restarts.",[411,471,520,575,798,860,905],{"id":34,"sectionKey":412,"icon":413,"layout":414,"actionPath":415,"secondaryActionPath":73,"order":34,"isActive":30,"contentSet":416,"items":425},"hero","lucide:radar","homepage-hero","\u002Fpricing#cloud-plans",{"id":97,"contents":417},[418],{"languageCode":12,"values":419,"isActive":30,"id":424},{"eyebrow":420,"title":421,"description":422,"actionText":423,"secondaryActionText":82},"Live metadata • No downtime • Deeply custom","Enfyra,","Model data, APIs, permissions, hooks, workflows, realtime behavior, and admin tools as metadata that runs. Update everyday backend behavior without routine server restarts.","Start on Cloud",389,[426,437,448,460],{"id":34,"icon":38,"href":38,"path":38,"code":38,"metadata":427,"order":34,"isActive":30,"contentSet":429},{"kind":428},"heroSubtitle",{"id":430,"contents":431},31,[432],{"languageCode":12,"values":433,"isActive":30,"id":436},{"label":434,"title":38,"description":38,"value":435},"subtitle","the live metadata backend platform",415,{"id":49,"icon":438,"href":38,"path":61,"code":38,"metadata":439,"order":49,"isActive":30,"contentSet":441},"lucide:credit-card",{"kind":440},"heroTertiaryAction",{"id":442,"contents":443},32,[444],{"languageCode":12,"values":445,"isActive":30,"id":447},{"label":446,"title":38,"description":38,"value":38},"View pricing",416,{"id":63,"icon":38,"href":38,"path":38,"code":449,"metadata":450,"order":63,"isActive":30,"contentSet":452},"docker run -d --name enfyra -p 3000:3000 -v enfyra-data:\u002Fapp\u002Fdata enfyra\u002Fenfyra:latest",{"kind":451},"command",{"id":453,"contents":454},33,[455],{"languageCode":12,"values":456,"isActive":30,"id":459},{"label":457,"title":38,"description":458,"value":38},"Self-host with Docker","Run the open-source runtime locally when you want full control",417,{"id":74,"icon":38,"href":38,"path":38,"code":461,"metadata":462,"order":74,"isActive":30,"contentSet":463},"npx @enfyra\u002Fcreate my-enfyra",{"kind":451},{"id":464,"contents":465},271,[466],{"languageCode":12,"values":467,"isActive":30,"id":470},{"label":468,"title":38,"description":469,"value":38},"Manual Installation","Use separate server and app scaffolds for full control",418,{"id":49,"sectionKey":472,"icon":38,"layout":473,"actionPath":38,"secondaryActionPath":38,"order":49,"isActive":30,"contentSet":474,"items":479},"proof_points","stat-grid",{"id":60,"contents":475},[476],{"languageCode":12,"values":477,"isActive":30,"id":478},{"eyebrow":38,"title":38,"description":38,"actionText":38,"secondaryActionText":38},390,[480,490,500,510],{"id":86,"icon":481,"href":38,"path":38,"code":38,"metadata":38,"order":34,"isActive":30,"contentSet":482},"lucide:route",{"id":483,"contents":484},34,[485],{"languageCode":12,"values":486,"isActive":30,"id":489},{"label":487,"title":38,"description":38,"value":488},"Live APIs, custom behavior","API",419,{"id":97,"icon":491,"href":38,"path":38,"code":38,"metadata":38,"order":49,"isActive":30,"contentSet":492},"lucide:database",{"id":493,"contents":494},35,[495],{"languageCode":12,"values":496,"isActive":30,"id":499},{"label":497,"title":38,"description":38,"value":498},"Live metadata model and admin UI","Meta",420,{"id":60,"icon":501,"href":38,"path":38,"code":38,"metadata":38,"order":63,"isActive":30,"contentSet":502},"lucide:activity",{"id":503,"contents":504},36,[505],{"languageCode":12,"values":506,"isActive":30,"id":509},{"label":507,"title":38,"description":38,"value":508},"Hooks, flows, realtime, and operations","Runtime",421,{"id":343,"icon":511,"href":38,"path":38,"code":38,"metadata":38,"order":74,"isActive":30,"contentSet":512},"lucide:server",{"id":513,"contents":514},287,[515],{"languageCode":12,"values":516,"isActive":30,"id":519},{"label":517,"title":38,"description":38,"value":518},"PostgreSQL, MySQL-compatible, MongoDB","Multi-DB",422,{"id":63,"sectionKey":521,"icon":38,"layout":38,"actionPath":38,"secondaryActionPath":38,"order":63,"isActive":30,"contentSet":522,"items":530},"core_model",{"id":343,"contents":523},[524],{"languageCode":12,"values":525,"isActive":30,"id":529},{"eyebrow":526,"title":527,"description":528,"actionText":38,"secondaryActionText":38},"Live metadata","Live metadata for the backend you keep changing.","Enfyra turns schema, routes, permissions, hooks, handlers, flows, realtime behavior, and admin UI into metadata that drives the running backend.",391,[531,542,553,564],{"id":274,"icon":532,"href":38,"path":38,"code":38,"metadata":38,"order":34,"isActive":30,"contentSet":533},"lucide:table-properties",{"id":534,"contents":535},37,[536],{"languageCode":12,"values":537,"isActive":30,"id":541},{"label":538,"title":539,"description":540,"value":38},"01","Model the backend as metadata","Define data, relationships, access, files, flows, realtime behavior, and admin UI from one inspectable metadata model.",423,{"id":283,"icon":543,"href":38,"path":38,"code":38,"metadata":38,"order":49,"isActive":30,"contentSet":544},"lucide:braces",{"id":545,"contents":546},38,[547],{"languageCode":12,"values":548,"isActive":30,"id":552},{"label":549,"title":550,"description":551,"value":38},"02","Expose generated APIs immediately","Generated REST APIs follow the model as it changes, with permissions and query controls wired into the live runtime.",424,{"id":292,"icon":554,"href":38,"path":38,"code":38,"metadata":38,"order":63,"isActive":30,"contentSet":555},"lucide:code",{"id":556,"contents":557},39,[558],{"languageCode":12,"values":559,"isActive":30,"id":563},{"label":560,"title":561,"description":562,"value":38},"03","Override behavior with code","Add custom routes, pre-hooks, handlers, post-hooks, flows, websocket logic, and extension UI when product behavior goes beyond CRUD.",425,{"id":301,"icon":565,"href":38,"path":38,"code":38,"metadata":38,"order":74,"isActive":30,"contentSet":566},"lucide:boxes",{"id":567,"contents":568},40,[569],{"languageCode":12,"values":570,"isActive":30,"id":574},{"label":571,"title":572,"description":573},"04","Run it where the product needs it","Use Enfyra Cloud to manage projects in customer-owned provider accounts, or self-host when you need complete infrastructure control.",426,{"id":74,"sectionKey":576,"icon":38,"layout":38,"actionPath":38,"secondaryActionPath":38,"order":74,"isActive":30,"contentSet":577,"items":585},"runtime_surface",{"id":274,"contents":578},[579],{"languageCode":12,"values":580,"isActive":30,"id":584},{"eyebrow":581,"title":582,"description":583,"actionText":38,"secondaryActionText":38},"No-downtime runtime","Change backend behavior without stopping the app.","Start with generated APIs, then add auth, permissions, files, realtime, workflows, and extensions as runtime capabilities that reload without routine server restarts.",392,[586,597,607,617,627,641,657,673,689,705,722,740,760,781],{"id":363,"icon":38,"href":38,"path":38,"code":38,"metadata":587,"order":34,"isActive":30,"contentSet":589},{"kind":588},"database",{"id":590,"contents":591},288,[592],{"languageCode":12,"values":593,"isActive":30,"id":596},{"label":594,"title":38,"description":38,"value":595},"PostgreSQL","#4169E1",427,{"id":222,"icon":38,"href":38,"path":38,"code":38,"metadata":598,"order":49,"isActive":30,"contentSet":599},{"kind":588},{"id":600,"contents":601},289,[602],{"languageCode":12,"values":603,"isActive":30,"id":606},{"label":604,"title":38,"description":38,"value":605},"MySQL","#4479A1",428,{"id":264,"icon":38,"href":38,"path":38,"code":38,"metadata":608,"order":63,"isActive":30,"contentSet":609},{"kind":588},{"id":610,"contents":611},290,[612],{"languageCode":12,"values":613,"isActive":30,"id":616},{"label":614,"title":38,"description":38,"value":615},"MariaDB","#003545",429,{"id":310,"icon":38,"href":38,"path":38,"code":38,"metadata":618,"order":74,"isActive":30,"contentSet":619},{"kind":588},{"id":620,"contents":621},291,[622],{"languageCode":12,"values":623,"isActive":30,"id":626},{"label":624,"title":38,"description":38,"value":625},"MongoDB","#47A248",430,{"id":353,"icon":491,"href":38,"path":38,"code":38,"metadata":628,"order":86,"isActive":30,"contentSet":633},{"kind":629,"signals":630},"capability",[631,632,624],"PG-compatible","MySQL-compatible",{"id":634,"contents":635},67,[636],{"languageCode":12,"values":637,"isActive":30,"id":640},{"label":38,"title":638,"description":639,"value":38},"Schema engine","Create SQL or Mongo-backed data models with relations, validation, generated forms, and metadata access rules.",431,{"id":373,"icon":642,"href":38,"path":38,"code":38,"metadata":643,"order":97,"isActive":30,"contentSet":649},"lucide:workflow",{"kind":629,"signals":644},[645,646,647,648],"GET","POST","PATCH","DELETE",{"id":650,"contents":651},68,[652],{"languageCode":12,"values":653,"isActive":30,"id":656},{"label":38,"title":654,"description":655,"value":38},"Dynamic API layer","Generated REST routes support filters, fields, sort, pagination, permissions, and route-level publishing.",432,{"id":383,"icon":658,"href":38,"path":38,"code":38,"metadata":659,"order":60,"isActive":30,"contentSet":665},"lucide:shield-check",{"kind":629,"signals":660},[661,662,663,664],"RBAC","Guards","Field access","Validation",{"id":666,"contents":667},69,[668],{"languageCode":12,"values":669,"isActive":30,"id":672},{"label":38,"title":670,"description":671,"value":38},"Security model","JWT auth, roles, route permissions, metadata guards, field permissions, and column rules work together.",433,{"id":393,"icon":674,"href":38,"path":38,"code":38,"metadata":675,"order":343,"isActive":30,"contentSet":681},"lucide:square-terminal",{"kind":629,"signals":676},[677,678,679,680],"Hooks","Handlers","Flows","Packages",{"id":682,"contents":683},70,[684],{"languageCode":12,"values":685,"isActive":30,"id":688},{"label":38,"title":686,"description":687,"value":38},"Custom runtime","Custom logic and guided test runs give teams a controlled escape hatch when generated behavior is not enough.",434,{"id":690,"icon":691,"href":38,"path":38,"code":38,"metadata":692,"order":274,"isActive":30,"contentSet":697},21,"lucide:gauge",{"kind":629,"signals":693},[694,695,696,679],"Cache","Files","Realtime",{"id":698,"contents":699},71,[700],{"languageCode":12,"values":701,"isActive":30,"id":704},{"label":38,"title":702,"description":703,"value":38},"Operational systems","Files, realtime, cache, workflows, and runtime visibility live beside the API and admin experience.",435,{"id":706,"icon":707,"href":38,"path":38,"code":38,"metadata":708,"order":283,"isActive":30,"contentSet":714},22,"lucide:panel-top-open",{"kind":629,"signals":709},[710,711,712,713],"Vue SFC","Menus","Extensions","Forms",{"id":715,"contents":716},272,[717],{"languageCode":12,"values":718,"isActive":30,"id":721},{"label":38,"title":719,"description":720,"value":38},"Admin extensibility","Generated admin UI can be extended with custom Vue pages, widgets, menus, and header actions.",436,{"id":723,"icon":481,"href":38,"path":38,"code":724,"metadata":725,"order":292,"isActive":30,"contentSet":731},81,"GET \u002Fapi\u002Fproducts?filter={\"status\":{\"_eq\":\"active\"}}&fields=id,title,author.name\nPOST \u002Fapi\u002Fproducts\nPATCH \u002Fapi\u002Fproducts\u002F:id\nDELETE \u002Fapi\u002Fproducts\u002F:id",{"kind":726,"visual":727,"signals":728,"stat":729,"statLabel":730},"highlightCapability","rest",[645,646,647,648],"no restart","routes reload live",{"id":732,"contents":733},97,[734],{"languageCode":12,"values":735,"isActive":30,"id":739},{"label":736,"title":737,"description":738,"value":38},"REST CRUD","Generated REST CRUD without restarts","Publish or change a table and the runtime reloads routes, permissions, hooks, validation, and query shape while the app keeps serving traffic. No redeploy, no server restart.",495,{"id":741,"icon":543,"href":38,"path":38,"code":742,"metadata":743,"order":301,"isActive":30,"contentSet":751},82,"query ActiveProducts {\n  products(filter: { status: { _eq: \"active\" } }) {\n    data {\n      id\n      title\n      author { name }\n    }\n  }\n}",{"kind":726,"visual":744,"signals":745,"stat":749,"statLabel":750},"graphql",[746,747,748],"per table","schema reload","relations","live schema","GraphQL rebuilds in runtime",{"id":752,"contents":753},98,[754],{"languageCode":12,"values":755,"isActive":30,"id":759},{"label":756,"title":757,"description":758,"value":38},"GraphQL per table","GraphQL opt-in per table, reloaded live","Enable GraphQL exactly where it belongs. Enfyra rebuilds the generated schema from published table metadata, relations, permissions, and field state without bouncing the running app.",496,{"id":761,"icon":762,"href":38,"path":38,"code":763,"metadata":764,"order":363,"isActive":30,"contentSet":773},83,"lucide:radio-tower","const { roomId } = @BODY;\nif (!roomId) @THROW400(\"roomId is required\");\n@SOCKET.join(`orders_${roomId}`);\n@SOCKET.emitToCurrentRoom(`orders_${roomId}`, \"orderLive\", {\n  userId: @USER.id\n});\nreturn { joined: roomId };",{"kind":726,"visual":765,"signals":766,"stat":771,"statLabel":772},"realtime",[767,768,769,770],"@SOCKET","rooms","user events","broadcasts","live runtime","websocket handlers reload",{"id":774,"contents":775},99,[776],{"languageCode":12,"values":777,"isActive":30,"id":780},{"label":696,"title":778,"description":779,"value":38},"Realtime runtime built into the app model","Socket gateways, rooms, user targeting, and broadcasts run through the same sandbox and metadata runtime. Websocket handlers reload without restarting the app.",497,{"id":782,"icon":783,"href":38,"path":38,"code":38,"metadata":784,"order":222,"isActive":30,"contentSet":789},84,"lucide:refresh-cw",{"kind":785,"signals":786},"noDowntimePanel",[729,787,788],"cache invalidation","cluster reload",{"id":790,"contents":791},100,[792],{"languageCode":12,"values":793,"isActive":30,"id":797},{"label":794,"title":795,"description":796,"value":38},"runtime reload","No-downtime changes","Tables, routes, GraphQL schema, guards, permissions, flows, packages, and websocket definitions reload through the running cluster. The app keeps serving while metadata changes land.",498,{"id":86,"sectionKey":799,"icon":38,"layout":38,"actionPath":38,"secondaryActionPath":38,"order":86,"isActive":30,"contentSet":800,"items":808},"architecture",{"id":283,"contents":801},[802],{"languageCode":12,"values":803,"isActive":30,"id":807},{"eyebrow":804,"title":805,"description":806,"actionText":38,"secondaryActionText":38},"Deep customization","Shape the model, API, and runtime in one place.","Enfyra keeps generated APIs, access rules, custom logic, realtime behavior, admin tools, and deployment choices connected so product-specific behavior does not become scattered glue code.",393,[809,819,829,839,849],{"id":810,"icon":38,"href":38,"path":38,"code":38,"metadata":38,"order":34,"isActive":30,"contentSet":811},23,{"id":812,"contents":813},72,[814],{"languageCode":12,"values":815,"isActive":30,"id":818},{"label":816,"title":38,"description":817,"value":38},"Admin app","collections, forms, permissions, docs, and runtime tools",437,{"id":820,"icon":38,"href":38,"path":38,"code":38,"metadata":38,"order":49,"isActive":30,"contentSet":821},24,{"id":822,"contents":823},73,[824],{"languageCode":12,"values":825,"isActive":30,"id":828},{"label":826,"title":38,"description":827,"value":38},"App API","generated REST, auth, files, and optional GraphQL",438,{"id":830,"icon":38,"href":38,"path":38,"code":38,"metadata":38,"order":63,"isActive":30,"contentSet":831},25,{"id":832,"contents":833},74,[834],{"languageCode":12,"values":835,"isActive":30,"id":838},{"label":836,"title":38,"description":837,"value":38},"Custom logic","hooks, handlers, workflows, and extensions",439,{"id":840,"icon":38,"href":38,"path":38,"code":38,"metadata":38,"order":74,"isActive":30,"contentSet":841},26,{"id":842,"contents":843},75,[844],{"languageCode":12,"values":845,"isActive":30,"id":848},{"label":846,"description":847},"Managed Cloud or self-host","Enfyra-managed projects in your provider account, or your own database, storage, cache, and deployment stack.",440,{"id":850,"icon":38,"href":38,"path":38,"code":38,"metadata":851,"order":86,"isActive":30,"contentSet":853},27,{"kind":852},"footer",{"id":854,"contents":855},273,[856],{"languageCode":12,"values":857,"isActive":30,"id":859},{"label":852,"title":38,"description":38,"value":858},"metadata model -> live API -> permissions -> custom hooks and flows -> Cloud or self-hosted runtime",441,{"id":97,"sectionKey":861,"icon":38,"layout":38,"actionPath":38,"secondaryActionPath":38,"order":97,"isActive":30,"contentSet":862,"items":869},"use_cases",{"id":292,"contents":863},[864],{"languageCode":12,"values":865,"isActive":30,"id":868},{"eyebrow":866,"title":867,"description":38,"actionText":38,"secondaryActionText":38},"Who it is for","Built for teams that need backend leverage without giving up deployment control.",394,[870,879,888,897],{"id":871,"icon":38,"href":38,"path":38,"code":38,"metadata":38,"order":34,"isActive":30,"contentSet":872},28,{"id":873,"contents":874},274,[875],{"languageCode":12,"values":876,"isActive":30,"id":878},{"label":38,"title":38,"description":877,"value":38},"Internal tools where schema, API, forms, and permissions should evolve together.",442,{"id":880,"icon":38,"href":38,"path":38,"code":38,"metadata":38,"order":49,"isActive":30,"contentSet":881},29,{"id":882,"contents":883},275,[884],{"languageCode":12,"values":885,"isActive":30,"id":887},{"description":886},"Teams that want managed deployment and operations without giving up provider ownership or accepting infrastructure lock-in.",443,{"id":889,"icon":38,"href":38,"path":38,"code":38,"metadata":38,"order":63,"isActive":30,"contentSet":890},30,{"id":891,"contents":892},276,[893],{"languageCode":12,"values":894,"isActive":30,"id":896},{"label":38,"title":38,"description":895,"value":38},"Projects that need generated REST now, with optional GraphQL per table when it fits.",444,{"id":430,"icon":38,"href":38,"path":38,"code":38,"metadata":38,"order":74,"isActive":30,"contentSet":898},{"id":899,"contents":900},277,[901],{"languageCode":12,"values":902,"isActive":30,"id":904},{"label":38,"title":38,"description":903,"value":38},"Workflow-heavy business systems that need files, realtime, and admin extensions.",445,{"id":60,"sectionKey":906,"icon":38,"layout":38,"actionPath":415,"secondaryActionPath":73,"order":60,"isActive":30,"contentSet":907,"items":915},"final_cta",{"id":301,"contents":908},[909],{"languageCode":12,"values":910,"isActive":30,"id":914},{"eyebrow":911,"title":912,"description":913,"actionText":423,"secondaryActionText":252},"Start building","Start with metadata, customize what matters, keep it live.","Create an isolated Enfyra project, inspect the generated API, then add the hooks, flows, realtime behavior, and admin tools your product needs without routine restarts.",395,[916],{"id":442,"icon":38,"href":38,"path":38,"code":461,"metadata":38,"order":34,"isActive":30,"contentSet":917},{"id":918,"contents":919},278,[920],{"languageCode":12,"values":921,"isActive":30,"id":924},{"label":922,"title":38,"description":923,"value":38},"Self-host option","Use Docker or manual installation when you need to run Enfyra on your own infrastructure",446]