- added
NextFs.TemplatesNuGet package —dotnet new nextfsscaffolds a complete App Router project with NextFs.Dsl - added template to release workflow
- added Dependabot config for GitHub Actions, NuGet, and npm auto-updates
- added migration guide (0.x → 1.0) to documentation
- marked experimental APIs in API reference
- added
NextFs.Dslpackage with computation expressions and async helpers for Next.js App Router - added DSL & Computation Expressions documentation page
- updated release workflow to publish
NextFs.DslalongsideNextFs
- added
[<NextFs.NextFsEntry>]and[<NextFs.NextFsStaticExport>]F# attribute types so entry modules can declare their own wrapper shape directly in source - added
tools/nextfs-scan.mjsthat reads a.fsproj, scans[<NextFsEntry>]-annotated F# files, and writesnextfs.entries.jsonautomatically — no handwritten JSON - annotated all 16 starter entry modules with
[<NextFs.NextFsEntry>]attributes coveringDefault,Named,Directive,ExportAll, andStaticExportscenarios - added
scannpm script and wired it intosync:appandwatch:fableso the manifest stays current during development - added 11 automated tests for the scanner in
tests/nextfs-scan.test.mjs
- added a "scan + manifest diff" CI step that regenerates
nextfs.entries.jsonfrom F# attributes and fails the build if the committed file is out of date - added an E2E smoke step:
next startin the background,curl /andcurl /api/postsmust return HTTP 200
- added
CODE_OF_CONDUCT.md - added
ARCHITECTURE.mdwith an ASCII pipeline diagram (F# → Fable → nextfs-scan → nextfs-entry → Next.js) - added "Zero to running in 5 minutes" quickstart to
CONTRIBUTING.md - improved NuGet package tags to include
app-router,nextjs-app-router,fable-binding,binding,dotnet - added doc comment to
NavigationClient.unstableIsUnrecognizedActionErrorexplaining its experimental status
The following APIs are stable and covered by compile-smoke and the E2E starter build:
Link,Image,Script,Form,Headcomponent buildersNavigationClienthooks (useRouter,usePathname,useSearchParams,useParams,useSelectedLayoutSegment*,useServerInsertedHTML)Navigationhelpers (redirect,notFound,forbidden,unauthorized,unstableRethrow)Serverhelpers (headers,cookies,draftMode,connection,after,userAgent)ServerFetchandServerFetchInittypedfetch()extensionsCacheinvalidation APIs (cacheTag,cacheTags,cacheLife*,revalidatePath,revalidateTag*,refresh,noStore,updateTag)Directiveinline directives (useServer,useCache,useCachePrivate,useCacheRemote)Metadata,Viewport,MetadataOpenGraph,MetadataTwitter,MetadataRoute.*,ImageMetadata,ImageResponseServerRequest,ServerResponse,ResponseInit,RouteHandlerContextFont.localand the generatedGoogleFont.*catalogProxyConfig,ProxyMatcher,RouteHas,NextFetchEventCookieOptions,ErrorBoundaryProps,TemplateProps,DefaultPropsRouteRuntime,PreferredRegion,GenerateSitemapsEntry,Revalidate[<NextFsEntry>]/[<NextFsStaticExport>]attributes andnextfs-scan.mjs
The following APIs are experimental — they depend on Next.js experimental flags or unstable_* upstream functions and may change without a NextFs major bump if Next.js changes or removes them:
Navigation.forbidden()andNavigation.unauthorized()— requireexperimental.authInterrupts: trueProxyConfig/ middleware config —next.config.mjsproxy support is still marked experimental in some Next.js buildsNavigationClient.unstableIsUnrecognizedActionError— wrapsnext/navigation unstable_isUnrecognizedActionErrorDirective.useCachePrivate()andDirective.useCacheRemote()— requireexperimental.dynamicIOor equivalent flags
- fixed the starter and the library layout so a real
Fable -> wrappers -> next buildpipeline now succeeds on Next.js 16 - split
NextFsinto core, component, server, and client files so client entries no longer pull server-only imports and server entries no longer pull client-only hooks - moved browser-only App Router hooks to
NavigationClient,LinkClient, andWebVitalswhile keeping server-safe navigation helpers underNavigation - changed the generated
GoogleFontcatalog to chunked files, which avoids the Fable/FCS stack overflow caused by a single monolithic font binding file - expanded the wrapper generator with stale-file pruning, duplicate-output validation, and fallback resolution from dotted Fable paths to nested
.fable/App/...output paths - aligned the starter manifest and wrappers with real Fable output paths, added
package-lock.json, and wired the starter example into CI with a realnext build - updated the documentation to reflect the working starter pipeline, client/server binding split, and
next/fontliteral-object requirement
- added typed Next.js server
fetch()bindings throughServerFetch,ServerFetchInit,NextFetchOptions,ServerFetchResponse,ServerFetchCache, andRevalidate - added
GenerateSitemapsEntryhelpers for multi-sitemap flows and a new compile-smoke file covering server fetch and sitemap generation patterns - expanded the starter route handler to export route segment config and demonstrate typed
fetch(..., { next: { revalidate, tags } }) - expanded wrapper-generator regression coverage for route-handler config exports
- added dedicated documentation for server fetch and route segment config flows
- added instrumentation types for root
instrumentation.jsandinstrumentation-client.jsflows - expanded the starter example with F#-driven server and client instrumentation entries plus generated root wrappers
- added compile-smoke coverage for instrumentation export shapes
- added
docs/instrumentation.mdand linked instrumentation flows from the wrapper and starter docs - expanded wrapper-generator tests for root instrumentation entries
- added
ServerRequestconstructors plusNextRequestInitandNextConfigbuilders for lower-level request interop - added
ServerResponse.create*helpers and richerNextRequest/NextResponsebody APIs - added
Navigation.useServerInsertedHTML,Navigation.useSelectedLayoutSegmentFor,Navigation.useSelectedLayoutSegmentsFor, andNavigation.unstableIsUnrecognizedActionError - added
Image.getImageProps()and a dedicated compile-smoke file for request/response and client/server helper flows - expanded wrapper-generator coverage for the remaining App Router special-file wrapper shapes
- added
docs/server-client-patterns.mdand linked it from the main repository docs
- added helper types for App Router special files:
ErrorBoundaryProps,ErrorWithDigest,TemplateProps, andDefaultProps<'T> - added compile-smoke coverage for
error.js,global-error.js,loading.js,not-found.js,forbidden.js,unauthorized.js,template.js, anddefault.js - expanded the starter example with F#-driven special-file entries and
next.config.mjsflags forauthInterruptsandglobalNotFound - added dedicated documentation for special-file conventions in
docs/special-files.md - added wrapper-generator tests for special-file wrapper shapes
- added
next/font/localbindings plus a generatedGoogleFontcatalog sourced from official Next.js type definitions - added font option builders, local font source/declaration helpers, and typed font results
- added
proxy.jshelpers:ProxyConfig,ProxyMatcher,RouteHas, andNextFetchEvent - expanded request/response cookie support with
CookieOptions, richer cookie shapes, and proxy-style mutation flows - expanded compile-smoke coverage for fonts, cookies, and proxy behavior
- updated the starter example to include F#-driven
next/font, cookie-aware route handling, and a rootproxy.jsentry - added wrapper-generator regression coverage for root-level
.fablere-export paths
- added metadata, viewport, robots, sitemap, manifest, and image-metadata builders
- added
ImageResponsebindings for Open Graph, icon, and metadata image generation flows - added
useLinkStatus,useReportWebVitals,after,userAgent,forbidden,unauthorized, andunstableRethrow - expanded compile-smoke coverage for metadata files, special route files, and advanced App Router helpers
- updated the starter example to export the root layout, metadata, and viewport from F#
- added
next/cachebindings and inline cache directives - expanded the smoke sample to cover cache invalidation flows
- added automated Node tests for the wrapper generator and wired them into CI
- added
examples/nextfs-starteras a minimal App Router starter - expanded repository documentation with quickstart, API reference, wrapper guidance, and package limitations
- initial public release with App Router component, navigation, and server bindings
- added wrapper generation for file-level
'use client'and'use server' - published the package through GitHub Actions and NuGet Trusted Publishing