v1 Roadmap
dai-shi opened this issue · comments
Here are tasks that I would like to finish before v1.
Previous Versions
-v0.14.0
- Server bundling #21
- New API as middleware #23
- RSC-only SSR (or opt-in SSR) #66
- Improve HTTP errors (404 instead of 500, especially with router) #76
- Support interacting with server (
req
andres
) #86 - CSS Modules on server #98 #105
- Server bundling issues #79
v0.15.0
- fix waku/router #85 #104
- Revisit
entries.ts
API (requires to revisit waku/router) #84 - Revisit
mutate()
api and maybeserve()
api #119
v0.16.0
v0.17.0
- Reconsider SSR (give up RSC-only SSR and go with full SSR) #147
- Node 20 #159
- Refactor
rscPrefix
config torscPath
#160
v0.18.0
- Support running on the edge
- Vite 5 #207
v0.18.1
v0.19.0
- Utilize hoistable elements #289
- Renew waku/router API #246
- Environment variables #292
- Improve Vercel deployment
- Config file
waku.config.ts
support in cli.ts #368 - Improve CLI and templates
v0.19.1
v0.19.2
v0.19.3
v0.19.4
v0.20.0
- #513
- Enable SSR by default (no
--with-ssr
option) -
getContext
fromwaku/server
- Conditional SSR
#534
#569 - File-based router
#572
#575 - Managed mode (no
main.tsx
andentries.tsx
)
#580 - new waku/router apis
#593
#613
v0.20.1
- Support omitting file extensions in import statements
#629 - Support
.js
and.jsx
extensions
#633
#636 - Support trailing slash with static sites (SSG)
#637 - Bug fixes
#631
#651
#639
#452
v0.20.2
v0.21.0
- Transform files on the server (DEV)
#762
#707 - Support importing server files directly from client files
#708
#714 - Support server actions in server components
#729
#785 - Router improvements
#799
#746 - Cloudflare Pages support
#795 - Support customizing html attrs & head with SSR
#825 - DEV improvements
#833
v0.21.1
- Improve build system (mostly internally, plugin system)
v0.22.0
- Internal re-architecture (customizable entries with router)
- #329
- single
waku.config.ts
config file (novite.config.ts
)
v1-alpha
- Support monorepo setup
- support progressive enhancement for forms
- Migrate to Vite Environment API?
- Migrate to
react-server-dom-vite
? - More compatibilities with third-party libraries
#423
v1-beta
- Explore Jotai integration
- Explore support for third-party routers
#272
v1-final
- Wait for React 19
How about actions? I was thinking about developing a plugin for vite a while ago, Since I think it's something similar to telefunc while developing this tool with Rom Brillout.
Actions (what I call "React Server Functions") are already implemented. I wouldn't say it's complete though.
Nice!
Anecdotally there seems to be a fairly large gap between waku's server actions and Next.js' implementation - I suppose this is expected because server actions are completely experimental in React right now.
IMO it makes sense to mark them as such (as an opt-in config option) before releasing v1.
I don't think our RSF (react server function) isn't that experimental, meaning it's the same level as react server component. I suppose Next's server action does more experimental things.
That said, I would like to revisit our approach anyway, which will require some feedbacks from collaborators/contributors/users.
In any case, unless we have an official doc or RFC from React, we wouldn't be able to finalize our API, which means v1 probably won't land until then.
The problem with shipping server actions now (or before they're stable in React) is that the semantics are not specified yet. For example Next.js server actions are queued, it's impossible to execute them concurrently - not the case in Waku. There is also the integration with transitions, not sure if this is implemented in Waku.
IMO need to wait for a React RFC but only for server actions, there is already an RFC for server components and they're designated at stable by the React team.
This is why I think waku server actions behind a flag is the right way forward.
Yeah, if we would release v1 before the callserver RFC, we should hide it behind a flag. For now, just noting it's not finalized would be enough. But in that sense, everything isn't finalized.
docs website is already static files.
we generate static files on build (SSG is a vague word, as people expect to generate HTML files.)
IMO it makes sense to mark them as such (as an opt-in config option) before releasing v1.
Having been working on #124, I'm getting more skeptical about the stability. (What is currently working may not work in the future.)
My gut feeling is that we should wait releasing v1 before React 18.3.0 or 19 is out.
So waku will not use react-server-dom-vite
in the future?
So waku will not use
react-server-dom-vite
in the future?
I think it's up to upstream. currently react official repo only has webpack and turbopack support.
BTW, is react-server-dom-esm an alternative?
It depends on what react-server-dom-vite
and react-server-dom-esm
will be like.
Hope the esm one is published: facebook/react#27197
Integrate React Float
@dai-shi
What is React Float? What's the relation with no index.html
?
Integrate React Float
@dai-shi What is React Float? What's the relation with
no index.html
?
I hope React docs will cover that soon. It will be called something like hoistable resource/elements.
It's technically not "integration". As #289 may tell, we no longer use index.html
and add <title>...</title>
in components, for example, which is possible because of hoistable elements.
How about initializing git setting? (git init
and then recomanded .gitignore
, etc)
I think it's a bit low-priority but It seems like good to be at waku@v1
.
@tom-sherman Do you know any updates?
I guess it's unlikely that the React docs specify such details.
Explore Jotai integration
@dai-shi Is this still something that needs exploration?
If yes, what are some things that you'd be concerned about with using jotai + waku?
I suspect some exploration has been done already though, considering the waku.gg docs use example code with jotai as the state library.
I suspect some exploration has been done already though, considering the waku.gg docs use example code with jotai as the state library.
The example in docs is what's possible now. What I would like to explore is to use atoms on the server too (that is connected to the client behind the scenes.) So, it's a very tight integration (and one reason that I started developing my own framework.)
I have a goal but don't have the implementation idea yet. #11 is an old attempt.
Anyway, there are so many things to do before working on it.