[{"data":1,"prerenderedAt":1082},["ShallowReactive",2],{"content-\u002Fdocs\u002Freference\u002Fentry-points":3},{"id":4,"title":5,"body":6,"description":1064,"extension":1065,"meta":1066,"metaRows":1067,"navigation":751,"path":1077,"seo":1078,"source":1079,"stem":1080,"__hash__":1081},"docs\u002Fdocs\u002Freference\u002Fentry-points.md","Entry-point reference",{"type":7,"value":8,"toc":1048},"minimark",[9,13,20,23,31,38,41,70,73,146,152,157,174,207,213,221,228,231,267,567,583,589,595,664,688,694,701,784,792,798,801,818,824,835,841,848,868,874,878,990,994,1012,1016,1044],[10,11,5],"h1",{"id":12},"entry-point-reference",[14,15,16],"blockquote",{},[17,18,19],"p",{},"Every public export, grouped by the package subpath it ships from. Use this as the \"which import line do I need?\" lookup; the rest of the docs cover what each surface does.",[21,22],"docs-meta-table",{},[17,24,25,26,30],{},"Nine subpaths. New projects pick ",[27,28,29],"code",{},"attaform\u002Fzod","; the others cover Zod v3 holdouts, framework-agnostic core, Nuxt \u002F Vite integrations, compiler internals, the DevTools panel, and the type-only types subpath.",[32,33,35,37],"h2",{"id":34},"attaformzod-the-recommended-entry",[27,36,29],{},": the recommended entry",[17,39,40],{},"Zod v4 adapter. The canonical entry for new projects.",[42,43,48],"pre",{"className":44,"code":45,"language":46,"meta":47,"style":47},"language-ts shiki shiki-themes github-light github-dark","import { useForm, withMeta, zodAdapter, fieldMeta } from 'attaform\u002Fzod'\n","ts","",[27,49,50],{"__ignoreMap":47},[51,52,55,59,63,66],"span",{"class":53,"line":54},"line",1,[51,56,58],{"class":57},"szBVR","import",[51,60,62],{"class":61},"sVt8B"," { useForm, withMeta, zodAdapter, fieldMeta } ",[51,64,65],{"class":57},"from",[51,67,69],{"class":68},"sZZnC"," 'attaform\u002Fzod'\n",[17,71,72],{},"Ships:",[74,75,76,86,99,109,119,131,137],"ul",{},[77,78,79,82,83,85],"li",{},[27,80,81],{},"useForm",": the typed-Zod wrapper around the framework-agnostic ",[27,84,81],{},".",[77,87,88,91,92,91,95,98],{},[27,89,90],{},"useWizard",", ",[27,93,94],{},"injectForm",[27,96,97],{},"useRegister",": same composables, re-exported.",[77,100,101,104,105,108],{},[27,102,103],{},"zodAdapter",": explicit adapter constructor (most consumers don't need this; ",[27,106,107],{},"useForm({ schema })"," wraps automatically).",[77,110,111,114,115,118],{},[27,112,113],{},"fieldMeta"," \u002F ",[27,116,117],{},"withMeta",": schema-attached field metadata (label, description, placeholder).",[77,120,121,91,124,91,127,130],{},[27,122,123],{},"kindOf",[27,125,126],{},"ZodKind",[27,128,129],{},"assertZodVersion",": runtime Zod-introspection helpers.",[77,132,133,136],{},[27,134,135],{},"FieldMetaPayload",": the metadata shape.",[77,138,139,91,142,145],{},[27,140,141],{},"unset",[27,143,144],{},"isUnset",": the blank-anywhere sentinel and its type guard.",[32,147,149],{"id":148},"attaformzod-v3",[27,150,151],{},"attaform\u002Fzod-v3",[17,153,154,155,85],{},"Zod v3 adapter for projects still on v3. New projects should use ",[27,156,29],{},[42,158,160],{"className":44,"code":159,"language":46,"meta":47,"style":47},"import { useForm, withMeta } from 'attaform\u002Fzod-v3'\n",[27,161,162],{"__ignoreMap":47},[51,163,164,166,169,171],{"class":53,"line":54},[51,165,58],{"class":57},[51,167,168],{"class":61}," { useForm, withMeta } ",[51,170,65],{"class":57},[51,172,173],{"class":68}," 'attaform\u002Fzod-v3'\n",[17,175,176,177,179,180,91,182,91,184,91,186,91,188,91,190,91,192,194,195,198,199,206],{},"Surface matches ",[27,178,29],{}," one-for-one: ",[27,181,81],{},[27,183,94],{},[27,185,97],{},[27,187,90],{},[27,189,117],{},[27,191,113],{},[27,193,141],{},". The runtime introspection is leaner (",[27,196,197],{},"isZodSchemaType"," only); see ",[200,201,203],"a",{"href":202},"\u002Fdocs\u002Fschemas\u002Fabstract-schema#zod-v3-vs-zod-v4-an-introspection-asymmetry",[27,204,205],{},"AbstractSchema"," for the discussion.",[32,208,210],{"id":209},"attaformzod-v4",[27,211,212],{},"attaform\u002Fzod-v4",[17,214,215,216,218,219,85],{},"Explicit Zod v4 entry. Currently identical to ",[27,217,29],{},"; kept for forward-compat naming. New code should import from ",[27,220,29],{},[32,222,224,227],{"id":223},"attaform-framework-agnostic-core",[27,225,226],{},"attaform",": framework-agnostic core",[17,229,230],{},"The schema-agnostic entry. Drop here when:",[74,232,233,241,254],{},[77,234,235,236,85],{},"You're wiring a custom schema library via ",[200,237,239],{"href":238},"\u002Fdocs\u002Fschemas\u002Fabstract-schema",[27,240,205],{},[77,242,243,244,91,247,91,250,253],{},"You need directive-layer symbols (",[27,245,246],{},"vRegister",[27,248,249],{},"assignKey",[27,251,252],{},"RegisterTransform",") not re-exported by the typed entries.",[77,255,256,257,91,260,91,263,266],{},"You're writing SSR bootstrap code (",[27,258,259],{},"renderAttaformState",[27,261,262],{},"hydrateAttaformState",[27,264,265],{},"escapeForInlineScript",").",[42,268,270],{"className":44,"code":269,"language":46,"meta":47,"style":47},"import {\n  \u002F\u002F Plugin + registry\n  createAttaform,\n  useRegistry,\n  \u002F\u002F Schema-agnostic composables\n  useForm,\n  injectForm,\n  useWizard,\n  useRegister,\n  \u002F\u002F Directive layer\n  vRegister,\n  assignKey,\n  defaultCoercionRules,\n  defineCoercion,\n  \u002F\u002F SSR\n  renderAttaformState,\n  hydrateAttaformState,\n  escapeForInlineScript,\n  \u002F\u002F The unset sentinel\n  unset,\n  isUnset,\n  \u002F\u002F Error classes (every Attaform throw extends AttaformError)\n  AttaformError,\n  AnonPersistError,\n  InvalidPathError,\n  InvalidUseFormConfigError,\n  OutsideSetupError,\n  RegistryNotInstalledError,\n  ReservedFormKeyError,\n  SubmitErrorHandlerError,\n  \u002F\u002F Validation-error codes\n  AttaformErrorCode,\n  \u002F\u002F API-error parser\n  parseApiErrors,\n  PARSE_API_ERRORS_DEFAULTS,\n  \u002F\u002F Sensitive-name protection\n  DEFAULT_SENSITIVE_NAMES,\n  \u002F\u002F Display-state heuristic default\n  defaultDisplayState,\n  \u002F\u002F Path primitives (custom adapters only)\n  canonicalizePath,\n  parseDottedPath,\n  isPathPrefix,\n  ROOT_PATH,\n  ROOT_PATH_KEY,\n  \u002F\u002F DevTools shared\n  DEVTOOLS_WINDOW_KEY,\n} from 'attaform'\n",[27,271,272,279,286,292,298,304,310,316,322,328,334,340,346,352,358,364,370,376,382,388,394,400,406,412,418,424,430,436,442,448,454,460,466,472,478,484,490,496,502,508,514,520,526,532,538,544,550,556],{"__ignoreMap":47},[51,273,274,276],{"class":53,"line":54},[51,275,58],{"class":57},[51,277,278],{"class":61}," {\n",[51,280,282],{"class":53,"line":281},2,[51,283,285],{"class":284},"sJ8bj","  \u002F\u002F Plugin + registry\n",[51,287,289],{"class":53,"line":288},3,[51,290,291],{"class":61},"  createAttaform,\n",[51,293,295],{"class":53,"line":294},4,[51,296,297],{"class":61},"  useRegistry,\n",[51,299,301],{"class":53,"line":300},5,[51,302,303],{"class":284},"  \u002F\u002F Schema-agnostic composables\n",[51,305,307],{"class":53,"line":306},6,[51,308,309],{"class":61},"  useForm,\n",[51,311,313],{"class":53,"line":312},7,[51,314,315],{"class":61},"  injectForm,\n",[51,317,319],{"class":53,"line":318},8,[51,320,321],{"class":61},"  useWizard,\n",[51,323,325],{"class":53,"line":324},9,[51,326,327],{"class":61},"  useRegister,\n",[51,329,331],{"class":53,"line":330},10,[51,332,333],{"class":284},"  \u002F\u002F Directive layer\n",[51,335,337],{"class":53,"line":336},11,[51,338,339],{"class":61},"  vRegister,\n",[51,341,343],{"class":53,"line":342},12,[51,344,345],{"class":61},"  assignKey,\n",[51,347,349],{"class":53,"line":348},13,[51,350,351],{"class":61},"  defaultCoercionRules,\n",[51,353,355],{"class":53,"line":354},14,[51,356,357],{"class":61},"  defineCoercion,\n",[51,359,361],{"class":53,"line":360},15,[51,362,363],{"class":284},"  \u002F\u002F SSR\n",[51,365,367],{"class":53,"line":366},16,[51,368,369],{"class":61},"  renderAttaformState,\n",[51,371,373],{"class":53,"line":372},17,[51,374,375],{"class":61},"  hydrateAttaformState,\n",[51,377,379],{"class":53,"line":378},18,[51,380,381],{"class":61},"  escapeForInlineScript,\n",[51,383,385],{"class":53,"line":384},19,[51,386,387],{"class":284},"  \u002F\u002F The unset sentinel\n",[51,389,391],{"class":53,"line":390},20,[51,392,393],{"class":61},"  unset,\n",[51,395,397],{"class":53,"line":396},21,[51,398,399],{"class":61},"  isUnset,\n",[51,401,403],{"class":53,"line":402},22,[51,404,405],{"class":284},"  \u002F\u002F Error classes (every Attaform throw extends AttaformError)\n",[51,407,409],{"class":53,"line":408},23,[51,410,411],{"class":61},"  AttaformError,\n",[51,413,415],{"class":53,"line":414},24,[51,416,417],{"class":61},"  AnonPersistError,\n",[51,419,421],{"class":53,"line":420},25,[51,422,423],{"class":61},"  InvalidPathError,\n",[51,425,427],{"class":53,"line":426},26,[51,428,429],{"class":61},"  InvalidUseFormConfigError,\n",[51,431,433],{"class":53,"line":432},27,[51,434,435],{"class":61},"  OutsideSetupError,\n",[51,437,439],{"class":53,"line":438},28,[51,440,441],{"class":61},"  RegistryNotInstalledError,\n",[51,443,445],{"class":53,"line":444},29,[51,446,447],{"class":61},"  ReservedFormKeyError,\n",[51,449,451],{"class":53,"line":450},30,[51,452,453],{"class":61},"  SubmitErrorHandlerError,\n",[51,455,457],{"class":53,"line":456},31,[51,458,459],{"class":284},"  \u002F\u002F Validation-error codes\n",[51,461,463],{"class":53,"line":462},32,[51,464,465],{"class":61},"  AttaformErrorCode,\n",[51,467,469],{"class":53,"line":468},33,[51,470,471],{"class":284},"  \u002F\u002F API-error parser\n",[51,473,475],{"class":53,"line":474},34,[51,476,477],{"class":61},"  parseApiErrors,\n",[51,479,481],{"class":53,"line":480},35,[51,482,483],{"class":61},"  PARSE_API_ERRORS_DEFAULTS,\n",[51,485,487],{"class":53,"line":486},36,[51,488,489],{"class":284},"  \u002F\u002F Sensitive-name protection\n",[51,491,493],{"class":53,"line":492},37,[51,494,495],{"class":61},"  DEFAULT_SENSITIVE_NAMES,\n",[51,497,499],{"class":53,"line":498},38,[51,500,501],{"class":284},"  \u002F\u002F Display-state heuristic default\n",[51,503,505],{"class":53,"line":504},39,[51,506,507],{"class":61},"  defaultDisplayState,\n",[51,509,511],{"class":53,"line":510},40,[51,512,513],{"class":284},"  \u002F\u002F Path primitives (custom adapters only)\n",[51,515,517],{"class":53,"line":516},41,[51,518,519],{"class":61},"  canonicalizePath,\n",[51,521,523],{"class":53,"line":522},42,[51,524,525],{"class":61},"  parseDottedPath,\n",[51,527,529],{"class":53,"line":528},43,[51,530,531],{"class":61},"  isPathPrefix,\n",[51,533,535],{"class":53,"line":534},44,[51,536,537],{"class":61},"  ROOT_PATH,\n",[51,539,541],{"class":53,"line":540},45,[51,542,543],{"class":61},"  ROOT_PATH_KEY,\n",[51,545,547],{"class":53,"line":546},46,[51,548,549],{"class":284},"  \u002F\u002F DevTools shared\n",[51,551,553],{"class":53,"line":552},47,[51,554,555],{"class":61},"  DEVTOOLS_WINDOW_KEY,\n",[51,557,559,562,564],{"class":53,"line":558},48,[51,560,561],{"class":61},"} ",[51,563,65],{"class":57},[51,565,566],{"class":68}," 'attaform'\n",[17,568,569,570,573,574,577,578,582],{},"Also re-exports every public type from ",[27,571,572],{},"runtime\u002Ftypes\u002Ftypes-api"," and ",[27,575,576],{},"runtime\u002Ftypes\u002Ftypes-core",". See ",[200,579,581],{"href":580},"\u002Fdocs\u002Freference\u002Ftypes","Types reference"," for the full list.",[32,584,586],{"id":585},"attaformnuxt",[27,587,588],{},"attaform\u002Fnuxt",[17,590,591,592,594],{},"The Nuxt module. Auto-installs the plugin, auto-imports ",[27,593,81],{},", wires the DevTools panel.",[42,596,598],{"className":44,"code":597,"language":46,"meta":47,"style":47},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: ['attaform\u002Fnuxt'],\n  attaform: {\n    defaults: { validateOn: 'change', debounceMs: 100 },\n  },\n})\n",[27,599,600,605,620,631,636,654,659],{"__ignoreMap":47},[51,601,602],{"class":53,"line":54},[51,603,604],{"class":284},"\u002F\u002F nuxt.config.ts\n",[51,606,607,610,613,617],{"class":53,"line":281},[51,608,609],{"class":57},"export",[51,611,612],{"class":57}," default",[51,614,616],{"class":615},"sScJk"," defineNuxtConfig",[51,618,619],{"class":61},"({\n",[51,621,622,625,628],{"class":53,"line":288},[51,623,624],{"class":61},"  modules: [",[51,626,627],{"class":68},"'attaform\u002Fnuxt'",[51,629,630],{"class":61},"],\n",[51,632,633],{"class":53,"line":294},[51,634,635],{"class":61},"  attaform: {\n",[51,637,638,641,644,647,651],{"class":53,"line":300},[51,639,640],{"class":61},"    defaults: { validateOn: ",[51,642,643],{"class":68},"'change'",[51,645,646],{"class":61},", debounceMs: ",[51,648,650],{"class":649},"sj4cs","100",[51,652,653],{"class":61}," },\n",[51,655,656],{"class":53,"line":306},[51,657,658],{"class":61},"  },\n",[51,660,661],{"class":53,"line":312},[51,662,663],{"class":61},"})\n",[17,665,666,667,669,670,91,672,91,674,676,677,679,680,682,683,687],{},"After installing, ",[27,668,81],{}," is a global auto-import. Import ",[27,671,94],{},[27,673,90],{},[27,675,97],{},", and the rest of the surface explicitly from ",[27,678,29],{}," (or ",[27,681,226],{}," for the framework-agnostic flavor). See ",[200,684,686],{"href":685},"\u002Fdocs\u002Fserver-and-ssr\u002Fssr-nuxt","SSR hydration: Nuxt"," for the full setup.",[32,689,691],{"id":690},"attaformvite",[27,692,693],{},"attaform\u002Fvite",[17,695,696,697,700],{},"The Vite plugin. Required under bare Vue + Vite for SSR-correct ",[27,698,699],{},"v-register"," bindings.",[42,702,704],{"className":44,"code":703,"language":46,"meta":47,"style":47},"\u002F\u002F vite.config.ts\nimport { defineConfig } from 'vite'\nimport vue from '@vitejs\u002Fplugin-vue'\nimport attaform from 'attaform\u002Fvite'\n\nexport default defineConfig({\n  plugins: [vue(), attaform()],\n})\n",[27,705,706,711,723,735,747,753,764,780],{"__ignoreMap":47},[51,707,708],{"class":53,"line":54},[51,709,710],{"class":284},"\u002F\u002F vite.config.ts\n",[51,712,713,715,718,720],{"class":53,"line":281},[51,714,58],{"class":57},[51,716,717],{"class":61}," { defineConfig } ",[51,719,65],{"class":57},[51,721,722],{"class":68}," 'vite'\n",[51,724,725,727,730,732],{"class":53,"line":288},[51,726,58],{"class":57},[51,728,729],{"class":61}," vue ",[51,731,65],{"class":57},[51,733,734],{"class":68}," '@vitejs\u002Fplugin-vue'\n",[51,736,737,739,742,744],{"class":53,"line":294},[51,738,58],{"class":57},[51,740,741],{"class":61}," attaform ",[51,743,65],{"class":57},[51,745,746],{"class":68}," 'attaform\u002Fvite'\n",[51,748,749],{"class":53,"line":300},[51,750,752],{"emptyLinePlaceholder":751},true,"\n",[51,754,755,757,759,762],{"class":53,"line":306},[51,756,609],{"class":57},[51,758,612],{"class":57},[51,760,761],{"class":615}," defineConfig",[51,763,619],{"class":61},[51,765,766,769,772,775,777],{"class":53,"line":312},[51,767,768],{"class":61},"  plugins: [",[51,770,771],{"class":615},"vue",[51,773,774],{"class":61},"(), ",[51,776,226],{"class":615},[51,778,779],{"class":61},"()],\n",[51,781,782],{"class":53,"line":318},[51,783,663],{"class":61},[17,785,786,787,791],{},"See ",[200,788,790],{"href":789},"\u002Fdocs\u002Fserver-and-ssr\u002Fssr-bare-vue","SSR hydration: bare Vue"," for the matching server \u002F client wiring.",[32,793,795],{"id":794},"attaformtransforms",[27,796,797],{},"attaform\u002Ftransforms",[17,799,800],{},"Raw Vue compiler-core node transforms. Use only when wiring a custom bundler pipeline; the Vite plugin already wraps these for the common case.",[42,802,804],{"className":44,"code":803,"language":46,"meta":47,"style":47},"import { vRegisterTransform } from 'attaform\u002Ftransforms'\n",[27,805,806],{"__ignoreMap":47},[51,807,808,810,813,815],{"class":53,"line":54},[51,809,58],{"class":57},[51,811,812],{"class":61}," { vRegisterTransform } ",[51,814,65],{"class":57},[51,816,817],{"class":68}," 'attaform\u002Ftransforms'\n",[32,819,821],{"id":820},"attaformdevtools-panel",[27,822,823],{},"attaform\u002Fdevtools-panel",[17,825,826,827,831,832,834],{},"The DevTools panel internals. The ",[200,828,830],{"href":829},"\u002Fdocs\u002Fdevtools-and-debugging\u002Fdevtools-panel","Attaform DevTools panel"," is auto-wired by ",[27,833,588],{},"; this entry is exposed for advanced consumers building their own panel hosts.",[32,836,838],{"id":837},"attaformtypes",[27,839,840],{},"attaform\u002Ftypes",[17,842,843,844,847],{},"Type-only subpath. Re-exports every type from the runtime; useful when you want types in a ",[27,845,846],{},".d.ts"," consumer file without pulling in the runtime barrel:",[42,849,851],{"className":44,"code":850,"language":46,"meta":47,"style":47},"import type { UseFormReturnType, FieldState, ValidationError } from 'attaform\u002Ftypes'\n",[27,852,853],{"__ignoreMap":47},[51,854,855,857,860,863,865],{"class":53,"line":54},[51,856,58],{"class":57},[51,858,859],{"class":57}," type",[51,861,862],{"class":61}," { UseFormReturnType, FieldState, ValidationError } ",[51,864,65],{"class":57},[51,866,867],{"class":68}," 'attaform\u002Ftypes'\n",[17,869,870,871,873],{},"For runtime imports under typical app code, import directly from ",[27,872,226],{},"; the type re-exports there are equivalent.",[32,875,877],{"id":876},"which-subpath-for-which-job","Which subpath for which job?",[879,880,881,894],"table",{},[882,883,884],"thead",{},[885,886,887,891],"tr",{},[888,889,890],"th",{},"You want to…",[888,892,893],{},"Import from",[895,896,897,907,916,925,934,943,957,969,978],"tbody",{},[885,898,899,903],{},[900,901,902],"td",{},"Build a form in a Vue 3 \u002F Nuxt app on Zod v4",[900,904,905],{},[27,906,29],{},[885,908,909,912],{},[900,910,911],{},"Build a form in an app stuck on Zod v3",[900,913,914],{},[27,915,151],{},[885,917,918,921],{},[900,919,920],{},"Wire a custom schema library (Valibot, ArkType, …)",[900,922,923],{},[27,924,226],{},[885,926,927,930],{},[900,928,929],{},"Install the Nuxt module",[900,931,932],{},[27,933,588],{},[885,935,936,939],{},[900,937,938],{},"Install the Vite plugin under bare Vue + Vite",[900,940,941],{},[27,942,693],{},[885,944,945,953],{},[900,946,947,948,91,950,952],{},"Reach directive symbols (",[27,949,246],{},[27,951,249],{},", …)",[900,954,955],{},[27,956,226],{},[885,958,959,965],{},[900,960,961,962,964],{},"Use SSR helpers (",[27,963,259],{},", etc.)",[900,966,967],{},[27,968,226],{},[885,970,971,974],{},[900,972,973],{},"Catch an Attaform-thrown error by class",[900,975,976],{},[27,977,226],{},[885,979,980,986],{},[900,981,982,983,985],{},"Type-only imports in a ",[27,984,846],{}," file",[900,987,988],{},[27,989,840],{},[32,991,993],{"id":992},"the-framework-agnostic-story","The framework-agnostic story",[17,995,996,998,999,1001,1002,1004,1005,1007,1008,1011],{},[27,997,226],{}," (the bare entry) doesn't import Zod. Everything you see in ",[27,1000,29],{}," is a typed wrapper around ",[27,1003,226],{},"'s exports: same composables, same return shapes, with Zod-specific inference layered on top. If you ever need to bypass the Zod typing (writing a generic helper that should work across schema libraries), import from ",[27,1006,226],{}," directly and supply the ",[27,1009,1010],{},"Form"," generic yourself.",[32,1013,1015],{"id":1014},"where-to-next","Where to next",[74,1017,1018,1025,1030,1037],{},[77,1019,1020,1024],{},[200,1021,1023],{"href":1022},"\u002Fdocs\u002Fschemas\u002Fcontract","The schema contract",": the bridge between the typed entries and the framework-agnostic core.",[77,1026,1027,1029],{},[200,1028,581],{"href":580},": every type, grouped by purpose.",[77,1031,1032,1036],{},[200,1033,1035],{"href":1034},"\u002Fdocs\u002Freference\u002Ferrors","Errors reference",": every Attaform-thrown error class.",[77,1038,1039,1043],{},[200,1040,1041],{"href":238},[27,1042,205],{},": the contract for non-Zod schema libraries.",[1045,1046,1047],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":47,"searchDepth":281,"depth":281,"links":1049},[1050,1052,1053,1054,1056,1057,1058,1059,1060,1061,1062,1063],{"id":34,"depth":281,"text":1051},"attaform\u002Fzod: the recommended entry",{"id":148,"depth":281,"text":151},{"id":209,"depth":281,"text":212},{"id":223,"depth":281,"text":1055},"attaform: framework-agnostic core",{"id":585,"depth":281,"text":588},{"id":690,"depth":281,"text":693},{"id":794,"depth":281,"text":797},{"id":820,"depth":281,"text":823},{"id":837,"depth":281,"text":840},{"id":876,"depth":281,"text":877},{"id":992,"depth":281,"text":993},{"id":1014,"depth":281,"text":1015},"Every package subpath Attaform exposes and what ships from each. Import-path picker for adopters, anchor-keyed map of the public surface.","md",{},[1068,1071,1073,1075],{"label":1069,"value":1070},"Category","Reference",{"label":1072,"value":324},"Subpaths",{"label":1074,"value":29,"kind":27},"Recommended entry",{"label":1076,"value":226,"kind":27},"Framework-agnostic","\u002Fdocs\u002Freference\u002Fentry-points",{"title":5,"description":1064},null,"docs\u002Freference\u002Fentry-points","v0HYBLNKebUSMr2YZy2vpLBViQ32YScardAhorif9uc",1780949755303]