Migration from v5 to v6
v6.0.0Dinou v6 encapsulates all internal build artifacts, manifests, and runtime caches into a single, clean .dinou directory at the root of your project.
1. Overview & Breaking Change
Dinou v6.0.0 is a streamlined major release designed to declutter your project root. Prior to v6, Dinou generated up to five separate directories directly in the project root to manage client manifests, server function proxies, development bundles, and static cache files.
The Only Breaking Change in v6.0.0
react_client_manifest, server_functions_manifest, public, dist2, and dist3) are now consolidated inside .dinou/..gitignore file to ignore .dinou instead of the individual folders.Your application code under src/ remains 100% identical. All React Server Components, Client Components, Server Actions, routing patterns, hooks, and plugins continue to function without any modifications.
2. Internal Folder Consolidation into .dinou
Here is a comparison of how internal build and manifest directories are structured between versions:
Five separate folders were generated directly in your project root:
public/(dev assets & bundles)dist3/(production bundles)dist2/(pre-rendered static HTML & RSC)react_client_manifest/(client manifest)server_functions_manifest/(actions manifest)
All folders are cleanly grouped under a single .dinou/ directory:
.dinou/public/.dinou/dist3/.dinou/dist2/.dinou/react_client_manifest/.dinou/server_functions_manifest/
Directory Tree Comparison
# Before (v5.x): Cluttered project root
my-app/
├── dist2/ # Static pre-rendered pages & RSC payloads
├── dist3/ # Production client bundles & assets
├── public/ # Development client bundles & assets
├── react_client_manifest/ # React client components manifest
├── server_functions_manifest/ # Server actions manifest
├── src/ # Your application code
├── package.json
└── tsconfig.json
# After (v6.0.0): Clean, organized project root
my-app/
├── .dinou/ # Consolidated framework artifacts
│ ├── dist2/
│ ├── dist3/
│ ├── public/
│ ├── react_client_manifest/
│ └── server_functions_manifest/
├── src/ # Your application code (untouched)
├── package.json
└── tsconfig.json3. Updating .gitignore
Update your .gitignore file to replace the individual folder entries with .dinou:
node_modules
-.dinou build folders
-dist2
-dist3
-public
-react_client_manifest
-server_functions_manifest
+.dinou
.envYour final recommended .gitignore now only needs three entries:
node_modules
.dinou
.envAfter upgrading to [email protected], you can safely delete the old root output folders left over from previous builds:
# Optional: Remove old legacy build directories
rm -rf dist2 dist3 public react_client_manifest server_functions_manifest4. Ejected Projects (dinou/)
If you are running an ejected Dinou application (where the dinou/ directory lives directly inside your repository), the internal core files and bundler configurations have been updated to use the new .dinou output paths:
- Bundler Configurations: Build scripts in
dinou/rollup/,dinou/esbuild/, anddinou/webpack/now output bundles and manifests to.dinou/public/,.dinou/dist3/,.dinou/react_client_manifest/, and.dinou/server_functions_manifest/. - Core Server & SSG: Modules in
dinou/core/(such asserver.js,render-html.js,render-app-to-html.js,generate-static-*.js, andcache-revalidate.js) now read and write cached pages and manifests under.dinou/dist2/and.dinou/....
Updating Ejected Core Files
dinou/core/ in your ejected app, ensure any direct path references like path.resolve(process.cwd(), "dist2") or "dist3" are updated to point to ".dinou/dist2" or ".dinou/dist3".5. Zero Application Code Changes
To summarize, upgrading from Dinou v5 to v6 requires no changes to your application code:
All file-system routes (src/page.tsx, src/[lang]/..., layouts, and route parameters) remain identical.
Server Functions marked with "use server" work seamlessly with arguments, FormData, and transitions.
The plugin system introduced in v5.2.0 remains fully compatible without modifying your hooks or config.
getStaticPaths(), on-demand revalidation, and static bailouts continue operating normally, outputting cleanly into .dinou/dist2/.