[{"data":1,"prerenderedAt":704},["ShallowReactive",2],{"navigation_docs":3,"landing":4},[],{"id":5,"title":6,"body":7,"description":6,"extension":695,"meta":696,"navigation":697,"path":698,"seo":699,"stem":702,"__hash__":703},"landing\u002Findex.md","",{"type":8,"value":9,"toc":693},"minimark",[10,63,78,597,663,689],[11,12,13,31,37,47],"u-page-hero",{},[14,15,16,22,23,26,27],"template",{"v-slot:title":6},[17,18,21],"span",{"className":19},[20],"text-primary","Laravel"," owns behavior. ",[24,25],"br",{}," Your app owns the ",[17,28,30],{"className":29},[20],"UI.",[14,32,33,34,36],{"v-slot:description":6},"Inertify is a family of headless, schema-driven packages for Laravel, Inertia, and Vue. ",[24,35],{}," Declare behavior once on the server, then render it with your own components and design system.",[14,38,39],{"v-slot:links":6},[40,41,46],"u-button",{"color":42,"size":43,"to":44,"trailing-icon":45},"neutral","xl","#packages","i-lucide-arrow-down","See the packages",[14,48,49],{"v-slot:headline":6},[50,51,57],"div",{"className":52},[53,54,55,56],"flex","flex-col","items-center","gap-4",[40,58,62],{"color":42,"size":59,"to":44,"icon":60,"variant":61},"sm","i-lucide-box","outline","Laravel + Inertia + Vue",[64,65,69,72,75],"u-page-section",{"className":66,"id":68},[67],"scroll-mt-24","packages",[14,70,71],{"v-slot:title":6},"Three packages, one contract",[14,73,74],{"v-slot:description":6},"Every Inertify package serializes server-owned behavior into an Inertia property and hands it to a typed Vue engine. None of them ship CSS, a Tailwind preset, icons, or ready-made components.",[76,77],"package-grid",{},[64,79,83,90,93],{"className":80,"id":81,"headline":82},[67],"form","Available today",[14,84,85,86],{"v-slot:title":6},"Inside ",[17,87,89],{"className":88},[20],"Inertify Form",[14,91,92],{"v-slot:description":6},"The first package covers the whole form lifecycle: schema, authorization, validation, binding, uploads, collections, and wizards. Two installs — a Laravel package and a Vue package — behind one form contract.",[94,95,96,409,431,471,487,503,581],"u-page-grid",{},[97,98,102,403,406],"u-page-card",{":spotlight":99,"className":100},"true",[101],"col-span-2",[103,104,109],"pre",{"className":105,"code":106,"filename":107,"language":108,"meta":6,"style":6},"language-php shiki shiki-themes github-light github-light github-dark","final class ProfileForm extends Form\n{\n    public function fields(): array\n    {\n        return [\n            TextInput::make('name', 'Name')\n                ->required()\n                ->precognitive(),\n            Combobox::make('skill', 'Primary skill')\n                ->source(route('skills.index'))\n                ->searchable(),\n            File::make('avatar', 'Avatar')\n                ->image()\n                ->maxSize(5 * 1024),\n            TextInput::make('company', 'Company')\n                ->visibleWhen('is_employed', true)\n                ->clearWhenHidden(),\n        ];\n    }\n}\n","app\u002FForms\u002FProfileForm.php","php",[110,111,112,133,140,161,167,176,205,217,228,250,271,281,303,313,335,356,375,385,391,397],"code",{"__ignoreMap":6},[17,113,116,120,123,127,130],{"class":114,"line":115},"line",1,[17,117,119],{"class":118},"s8jYJ","final",[17,121,122],{"class":118}," class",[17,124,126],{"class":125},"snPdu"," ProfileForm",[17,128,129],{"class":118}," extends",[17,131,132],{"class":125}," Form\n",[17,134,136],{"class":114,"line":135},2,[17,137,139],{"class":138},"sxrX7","{\n",[17,141,143,146,149,152,155,158],{"class":114,"line":142},3,[17,144,145],{"class":118},"    public",[17,147,148],{"class":118}," function",[17,150,151],{"class":125}," fields",[17,153,154],{"class":138},"()",[17,156,157],{"class":118},":",[17,159,160],{"class":118}," array\n",[17,162,164],{"class":114,"line":163},4,[17,165,166],{"class":138},"    {\n",[17,168,170,173],{"class":114,"line":169},5,[17,171,172],{"class":118},"        return",[17,174,175],{"class":138}," [\n",[17,177,179,183,186,189,192,196,199,202],{"class":114,"line":178},6,[17,180,182],{"class":181},"sBjJW","            TextInput",[17,184,185],{"class":118},"::",[17,187,188],{"class":125},"make",[17,190,191],{"class":138},"(",[17,193,195],{"class":194},"sIIMD","'name'",[17,197,198],{"class":138},", ",[17,200,201],{"class":194},"'Name'",[17,203,204],{"class":138},")\n",[17,206,208,211,214],{"class":114,"line":207},7,[17,209,210],{"class":118},"                ->",[17,212,213],{"class":125},"required",[17,215,216],{"class":138},"()\n",[17,218,220,222,225],{"class":114,"line":219},8,[17,221,210],{"class":118},[17,223,224],{"class":125},"precognitive",[17,226,227],{"class":138},"(),\n",[17,229,231,234,236,238,240,243,245,248],{"class":114,"line":230},9,[17,232,233],{"class":181},"            Combobox",[17,235,185],{"class":118},[17,237,188],{"class":125},[17,239,191],{"class":138},[17,241,242],{"class":194},"'skill'",[17,244,198],{"class":138},[17,246,247],{"class":194},"'Primary skill'",[17,249,204],{"class":138},[17,251,253,255,258,260,263,265,268],{"class":114,"line":252},10,[17,254,210],{"class":118},[17,256,257],{"class":125},"source",[17,259,191],{"class":138},[17,261,262],{"class":125},"route",[17,264,191],{"class":138},[17,266,267],{"class":194},"'skills.index'",[17,269,270],{"class":138},"))\n",[17,272,274,276,279],{"class":114,"line":273},11,[17,275,210],{"class":118},[17,277,278],{"class":125},"searchable",[17,280,227],{"class":138},[17,282,284,287,289,291,293,296,298,301],{"class":114,"line":283},12,[17,285,286],{"class":181},"            File",[17,288,185],{"class":118},[17,290,188],{"class":125},[17,292,191],{"class":138},[17,294,295],{"class":194},"'avatar'",[17,297,198],{"class":138},[17,299,300],{"class":194},"'Avatar'",[17,302,204],{"class":138},[17,304,306,308,311],{"class":114,"line":305},13,[17,307,210],{"class":118},[17,309,310],{"class":125},"image",[17,312,216],{"class":138},[17,314,316,318,321,323,326,329,332],{"class":114,"line":315},14,[17,317,210],{"class":118},[17,319,320],{"class":125},"maxSize",[17,322,191],{"class":138},[17,324,325],{"class":181},"5",[17,327,328],{"class":118}," *",[17,330,331],{"class":181}," 1024",[17,333,334],{"class":138},"),\n",[17,336,338,340,342,344,346,349,351,354],{"class":114,"line":337},15,[17,339,182],{"class":181},[17,341,185],{"class":118},[17,343,188],{"class":125},[17,345,191],{"class":138},[17,347,348],{"class":194},"'company'",[17,350,198],{"class":138},[17,352,353],{"class":194},"'Company'",[17,355,204],{"class":138},[17,357,359,361,364,366,369,371,373],{"class":114,"line":358},16,[17,360,210],{"class":118},[17,362,363],{"class":125},"visibleWhen",[17,365,191],{"class":138},[17,367,368],{"class":194},"'is_employed'",[17,370,198],{"class":138},[17,372,99],{"class":181},[17,374,204],{"class":138},[17,376,378,380,383],{"class":114,"line":377},17,[17,379,210],{"class":118},[17,381,382],{"class":125},"clearWhenHidden",[17,384,227],{"class":138},[17,386,388],{"class":114,"line":387},18,[17,389,390],{"class":138},"        ];\n",[17,392,394],{"class":114,"line":393},19,[17,395,396],{"class":138},"    }\n",[17,398,400],{"class":114,"line":399},20,[17,401,402],{"class":138},"}\n",[14,404,405],{"v-slot:title":6},"Schema lives in PHP",[14,407,408],{"v-slot:description":6},"Forms are container-resolved classes. Fields, rules, defaults, visibility, binding, routes, and upload behavior are declared once and serialized as functional metadata only.",[97,410,413,425,428],{":spotlight":99,"className":411},[101,412],"lg:col-span-1",[50,414,419],{"className":415},[53,416,55,417,418],"flex-1","justify-center","py-12",[420,421],"u-icon",{"className":422,"name":424},[423,20],"size-24","i-lucide-list-tree",[14,426,427],{"v-slot:title":6},"A field for the job",[14,429,430],{"v-slot:description":6},"Text and structured input, choices, dates, colors and sliders, files, rich text, repeaters, typed blocks, key-value pairs, fieldsets, and submits.",[97,432,434,465,468],{":spotlight":99,"className":433},[101,412],[50,435,437],{"className":436},[53,416,55,417,418],[50,438,444,449],{"className":439},[440,53,441,55,417,442,443],"relative","size-28","rounded-full","bg-primary\u002F10",[420,445],{"className":446,"name":448},[447,20],"size-14","i-lucide-shield-check",[50,450,460],{"className":451},[452,453,454,53,455,55,417,442,456,457,458,459],"absolute","-right-3","-top-2","size-9","border","border-default","bg-default","shadow-sm",[420,461],{"className":462,"name":464},[463,20],"size-4","i-lucide-check",[14,466,467],{"v-slot:title":6},"Authorization stays structural",[14,469,470],{"v-slot:description":6},"Unauthorized fields disappear from schema, initial data, and validation rules together instead of being hidden in the browser.",[97,472,474,481,484],{":spotlight":99,"className":473},[101,412],[50,475,477],{"className":476},[53,416,55,417,418],[420,478],{"className":479,"name":480},[423,20],"i-lucide-cloud-upload",[14,482,483],{"v-slot:title":6},"Uploads for real applications",[14,485,486],{"v-slot:description":6},"Native, temporary, resumable chunked, and direct-to-storage uploads, each resolved server-side and validated by Laravel.",[97,488,490,497,500],{":spotlight":99,"className":489},[101,412],[50,491,493],{"className":492},[53,416,55,417,418],[420,494],{"className":495,"name":496},[423,20],"i-lucide-workflow",[14,498,499],{"v-slot:title":6},"Collections and wizards",[14,501,502],{"v-slot:description":6},"Repeaters, typed blocks, and multi-step forms with stable nested paths, server-side step validation, and application-owned navigation.",[97,504,506,575,578],{":spotlight":99,"className":505},[101],[103,507,512],{"className":508,"code":509,"filename":510,"language":511,"meta":6,"style":6},"language-ts shiki shiki-themes github-light github-light github-dark","export const { FormField, FormFields } = createFormRenderer({\n    renderers: {\n      Text: TextField,\n      Checkbox: CheckboxField,\n      File: FileField,\n    },\n})\n","resources\u002Fjs\u002Fcomponents\u002Fform\u002Findex.ts","ts",[110,513,514,545,550,555,560,565,570],{"__ignoreMap":6},[17,515,516,519,522,525,528,530,533,536,539,542],{"class":114,"line":115},[17,517,518],{"class":118},"export",[17,520,521],{"class":118}," const",[17,523,524],{"class":138}," { ",[17,526,527],{"class":181},"FormField",[17,529,198],{"class":138},[17,531,532],{"class":181},"FormFields",[17,534,535],{"class":138}," } ",[17,537,538],{"class":118},"=",[17,540,541],{"class":125}," createFormRenderer",[17,543,544],{"class":138},"({\n",[17,546,547],{"class":114,"line":135},[17,548,549],{"class":138},"    renderers: {\n",[17,551,552],{"class":114,"line":142},[17,553,554],{"class":138},"      Text: TextField,\n",[17,556,557],{"class":114,"line":163},[17,558,559],{"class":138},"      Checkbox: CheckboxField,\n",[17,561,562],{"class":114,"line":169},[17,563,564],{"class":138},"      File: FileField,\n",[17,566,567],{"class":114,"line":178},[17,568,569],{"class":138},"    },\n",[17,571,572],{"class":114,"line":207},[17,573,574],{"class":138},"})\n",[14,576,577],{"v-slot:title":6},"Behavior without package markup",[14,579,580],{"v-slot:description":6},"The schema describes what a field does. Your application decides its HTML, components, layout, accessibility, and visual states — the Vue engine emits no elements of its own.",[97,582,584,591,594],{":spotlight":99,"className":583},[101,412],[50,585,587],{"className":586},[53,416,55,417,418],[420,588],{"className":589,"name":590},[423,20],"i-lucide-braces",[14,592,593],{"v-slot:title":6},"Composables first",[14,595,596],{"v-slot:description":6},"Nested values and errors, dirty and touched state, debounced Precognition validation, conditional transitions, collection reordering, upload progress, and unsaved-navigation protection.",[64,598,601,604,607],{"className":599,"id":600},[67],"approach",[14,602,603],{"v-slot:title":6},"Shared foundations",[14,605,606],{"v-slot:description":6},"The packages differ in scope, not in philosophy. Whatever ships next follows the same rules.",[14,608,609,619,628,637,646,654],{"v-slot:features":6},[610,611,613,616],"u-page-feature",{"icon":612},"i-lucide-square-dashed",[14,614,615],{"v-slot:title":6},"Headless by default",[14,617,618],{"v-slot:description":6},"No CSS, Tailwind preset, component library, editor, or icon set is shipped at runtime.",[610,620,622,625],{"icon":621},"i-simple-icons-laravel",[14,623,624],{"v-slot:title":6},"Laravel-first",[14,626,627],{"v-slot:description":6},"Behavior is declared in container-resolved PHP classes with the framework APIs you already use.",[610,629,631,634],{"icon":630},"i-simple-icons-inertia",[14,632,633],{"v-slot:title":6},"Inertia-native",[14,635,636],{"v-slot:description":6},"Resources pass straight through Inertia properties, including partial reloads and Precognition.",[610,638,640,643],{"icon":639},"i-simple-icons-vuedotjs",[14,641,642],{"v-slot:title":6},"Typed Vue engines",[14,644,645],{"v-slot:description":6},"Every package pairs with a Vue 3.5 package built from composables and renderless components.",[610,647,648,651],{"icon":448},[14,649,650],{"v-slot:title":6},"Server-owned authorization",[14,652,653],{"v-slot:description":6},"What a user may see or change is decided in Laravel and reflected in the serialized resource.",[610,655,657,660],{"icon":656},"i-lucide-scale",[14,658,659],{"v-slot:title":6},"MIT licensed",[14,661,662],{"v-slot:description":6},"Independent, clean-room implementations released as open source under the MIT License.",[64,664,665,672,675],{},[14,666,667,671],{"v-slot:title":6},[17,668,670],{"className":669},[20],"Ready"," to build?",[14,673,674],{"v-slot:description":6},"Inertify Form is the package you can install today. Table and Modal are still in design — follow the organization on GitHub to see them land.",[14,676,677,683],{"v-slot:links":6},[40,678,682],{"color":679,"size":43,"to":680,"icon":681,":external":99},"primary","\u002Fform\u002F","i-lucide-book-open","Read the documentation",[40,684,688],{"color":42,"size":43,"to":685,"icon":686,"variant":61,"target":687},"https:\u002F\u002Fgithub.com\u002Finertify","i-lucide-users","_blank","Follow the organization",[690,691,692],"style",{},"html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}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 .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}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);}",{"title":6,"searchDepth":135,"depth":135,"links":694},[],"md",{},true,"\u002F",{"title":700,"description":701},"Headless packages for Laravel, Inertia, and Vue","Inertify builds server-driven, completely headless packages for Laravel, Inertia, and Vue. Laravel owns schema, authorization, validation, and behavior while your application owns every rendered element.","index","RFwef_iR6GWTd6q4RRy9-BKTFh_EUMITmDG99MLRjyY",1786958162715]