You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Modernize toolchain: .NET 10, Fable 5.14, Vite 8, Bun workspace
Bring the project back to current versions of everything it builds on and
restructure the repository as a Bun workspace. No plugin behaviour changes
apart from the JSX transform backend.
.NET side
- Target net10.0 for Fable.Daemon and its tests; global.json pins SDK 10.0.400.
Fable.Compiler 5.14.1 only ships net10.0, so the .NET 10 runtime is now
required at install time.
- Upgrade Fable.Compiler 5.0.0-alpha.13 -> 5.14.1, Fable.AST -> 5.0.0 and the
transitive pins that come with it (FSharp.Core 10.1.203, StreamJsonRpc
2.25.29, MessagePack 2.5.302, Nerdbank.Streams 2.13.31). Drop the explicit
System.Text.Json reference now provided by the SDK.
- Replace CoolCatCracking with Fable's own MSBuildCrackerResolver. The new
ProjectCracking.fs keeps what Fable's resolver lacks: the design time build
cache, the fable_modules compile cache and the list of MSBuild files the
plugin watches. CliArgs.NoRestore is now false because Fable's resolver uses
it to decide whether to pass /restore.
- Decode the MSBuild JSON in Caching.fs with System.Text.Json and remove the
Thoth.Json.* dependencies.
- MSBuild.fs no longer gives up after five seconds and fails on a non-zero
exit code instead of silently continuing with partial output.
- Keep cracking.fsx as a scratch script; it is executable and takes the fsproj
as its last argument.
- dotnet tools: Fantomas 8.0.0-alpha-025, fsdocs-tool 22.1.0,
dotnet-outdated-tool 4.8.1. Sources reformatted with Fantomas 8.
JavaScript side
- Vite 8 (rolldown) as peer dependency. The JSX post-transform uses Vite's
transformWithOxc instead of a direct esbuild dependency; the jsx plugin
option keeps its 'transform' | 'preserve' | 'automatic' surface.
- Update all npm dependencies (@babel/code-frame 8, ts-lsp-client 1.1.1,
TypeScript 7, @types/node 26; React 19, @vitejs/plugin-react 6 and
vite-plugin-inspect 12 in the sample) and @fable-org/fable-library-js 2.5.1
to match the compiler.
- Locate fable-library with import.meta.resolve instead of guessing
node_modules paths, so hoisted, isolated and pnpm-style layouts all work.
- Replace Prettier with oxfmt (bun run format / format:check).
Repository layout
- Bun workspace with the isolated linker: the publishable package lives in
packages/vite-plugin-fable, sample-project depends on it via workspace:*,
and shared versions (vite, vite-plugin-inspect, fable-library-js) are
declared once in the root catalog. Single lockfile at the root.
- Directory.*.props stay at the repo root; prepublishOnly copies them into the
package because the consumer-side postinstall still runs dotnet publish.
The changelog updater moves to scripts/.
- .gitignore: un-ignore /packages/* (the NuGet template rule matched it).
CI
- Actions bumped to current majors (checkout v7, setup-bun v2, setup-dotnet v6,
upload-pages-artifact v5, deploy-pages v5); setup-dotnet reads global.json.
- New "Check formatting" step (oxfmt + dotnet fantomas check) and the sample
build step now fails on a real error instead of grepping the output.
Also adds ROADMAP.md with the remaining action items (postinstall
distribution, Vite lifecycle/HMR audit, F# rewrite of the plugin, .fsi change
detection).
Copy file name to clipboardExpand all lines: CHANGELOG.md
+59-1Lines changed: 59 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,7 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html) from version [0.1.0] moving forward.
7
7
8
8
## [Unreleased]
9
+
9
10
### Changed
11
+
10
12
- Fable.Daemon now targets `net10.0`; the .NET 10 runtime is required.
11
13
- Updated Fable.Compiler to 5.14.1 and `@fable-org/fable-library-js` to 2.5.1.
12
14
- Project cracking now delegates to Fable's own `MSBuildCrackerResolver`. The design time build cache and watched MSBuild files are kept in `ProjectCracking.fs`; `CoolCatCracking.fs` was removed.
@@ -15,118 +17,174 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
15
17
- Sample project targets `net10.0`.
16
18
- GitHub Actions updated to their latest major versions and the workflows read the SDK version from `global.json`.
17
19
- dotnet tools updated: Fantomas 8.0.0-alpha-025, fsdocs-tool 22.1.0, dotnet-outdated-tool 4.8.1. Sources reformatted with Fantomas 8 and CI now runs `dotnet fantomas check .`.
20
+
- Vite 8 is the peer dependency. The JSX transform after Fable compilation uses Vite's `transformWithOxc` (rolldown/oxc); `esbuild` is no longer a peer dependency.
21
+
- All JavaScript dependencies updated (`@babel/code-frame` 8, `ts-lsp-client` 1.1.1, TypeScript 7, React 19 and `@vitejs/plugin-react` 6 in the sample).
22
+
- The repository is a Bun workspace with isolated installs: the plugin lives in `packages/vite-plugin-fable` and `sample-project` depends on it via `workspace:*`. `Directory.*.props` stay at the repo root and are copied into the package by `prepublishOnly`; the changelog updater lives in `scripts/`. Shared versions (`vite`, `vite-plugin-inspect`, `@fable-org/fable-library-js`) are declared once in the root workspace catalog and referenced as `catalog:`.
23
+
-`fable-library` is located with `import.meta.resolve` instead of guessing `node_modules` paths.
24
+
- Prettier replaced by oxfmt (`bun run format`, `bun run format:check`).
18
25
19
26
### Fixed
27
+
20
28
-`dotnet msbuild` invocations for the cache key no longer give up after 5 seconds and now fail on a non-zero exit code.
21
29
22
30
## [0.2.1] - 2025-10-23
31
+
23
32
### Changed
33
+
24
34
- Removed caret range from ts-lsp-client to use version 1.0.4, pr ([#59](https://github.com/fable-compiler/vite-plugin-fable/pull/59)), targets issue ([#58](https://github.com/fable-compiler/vite-plugin-fable/issues/58))
25
35
26
36
## [0.2.0] - 2025-06-24
37
+
27
38
### Changed
28
-
- Upgrade to Vite 7.0.0 as peer dependency and adjust transform hook to use latest filter property, pr ([#49](https://github.com/fable-compiler/vite-plugin-fable/pull/49)), targets issue ([#39]([#39](https://github.com/fable-compiler/vite-plugin-fable/issues/39))
39
+
40
+
- Upgrade to Vite 7.0.0 as peer dependency and adjust transform hook to use latest filter property, pr ([#49](https://github.com/fable-compiler/vite-plugin-fable/pull/49)), targets issue ([#39](<[#39](https://github.com/fable-compiler/vite-plugin-fable/issues/39)>)
29
41
30
42
## [0.1.1] - 2025-06-03
43
+
31
44
### Fixed
45
+
32
46
- Support `major` roll forward dotnet versions of runtime for Fable.Daemon, pr ([#46](https://github.com/fable-compiler/vite-plugin-fable/pull/46)), targets issue ([#44](https://github.com/fable-compiler/vite-plugin-fable/issues/44))
33
47
34
48
## [0.1.0] - 2025-05-22
49
+
35
50
### Changed
51
+
36
52
- bumping version and package release for changelog sync
37
53
38
54
## [0.0.37] - 2025-05-10
55
+
39
56
### Changed
57
+
40
58
- Fable.Compiler updated to 5.0.0-alpha.13 ([#38](https://github.com/fable-compiler/vite-plugin-fable/pull/38))
41
59
- Added caret range to fable-library-js ([#38](https://github.com/fable-compiler/vite-plugin-fable/pull/38))
42
60
- Updated fable-library-js to 2.0.0-beta.3 ([#38](https://github.com/fable-compiler/vite-plugin-fable/pull/38))
43
61
44
62
## [0.0.36] - 2025-05-07
63
+
45
64
### Changed
65
+
46
66
- Updated fable-library-js to ^2.0.0-beta.3 ([#38](https://github.com/fable-compiler/vite-plugin-fable/pull/38))
47
67
48
68
## [0.0.35] - 2025-04-30
69
+
49
70
### Added
71
+
50
72
- Added README for Fable Daemon ([#34](https://github.com/fable-compiler/vite-plugin-fable/pull/34))
51
73
52
74
## [0.0.34] - 2025-04-20
75
+
53
76
### Changed
77
+
54
78
- Upgrade to latest Fable.Compiler and Fable.AST ([#13](https://github.com/fable-compiler/vite-plugin-fable/pull/13))
> This project is up for adoption. I'm looking for eager people to maintain this.<br>Please open a [discussion](https://github.com/fable-compiler/vite-plugin-fable/discussions) if you are interested!
10
9
11
10
## What is this?
12
11
13
-
Alright, the `tl;dr` is that I don't like the current way of how you can use [Fable](https://fable.io) with [Vite](https://vitejs.dev).
12
+
Alright, the `tl;dr` is that I don't like the current way of how you can use [Fable](https://fable.io) with [Vite](https://vitejs.dev).
14
13
I'm referring to the steps in the [get started with Vite](https://fable.io/docs/getting-started/javascript.html#browser), I don't like it and have an alternate take on it.
15
14
16
15
More thoughts on this can be read from the [documentation](https://fable.io/vite-plugin-fable/).
@@ -21,6 +20,7 @@ A first package was pushed to npm. This was merely to reserve the package name.
21
20
You can read the code, that's is it for now.
22
21
23
22
### Recent Notes
23
+
24
24
Support for the latest .NET runtime was added in [v0.1.1](https://github.com/fable-compiler/vite-plugin-fable/blob/main/CHANGELOG.md#011---2025-06-03). Please upgrade to the latest version. Earlier versions may fail silently if the .NET 8 runtime is missing—see the changelog for details.
Copy file name to clipboardExpand all lines: ROADMAP.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -24,6 +24,8 @@ Order is a rough suggestion: the first three unblock building locally and shrink
24
24
25
25
## 2. Rethink `postinstall`
26
26
27
+
_2026-08-29: the repo is now a Bun workspace (`packages/vite-plugin-fable` + `sample-project`, isolated linker). `postinstall` still runs `dotnet publish` inside the package; the distribution question below is unchanged._
28
+
27
29
**Current state**
28
30
29
31
-`package.json``postinstall` runs `dotnet publish Fable.Daemon/Fable.Daemon.fsproj -c Release --ucr -p:PublishReadyToRun=true -o ./bin` on the consumer's machine. The npm package therefore ships F# sources (`files` includes `Fable.Daemon/**/*.fs`, `Directory.*.props`) rather than a built daemon.
@@ -70,6 +72,8 @@ Order is a rough suggestion: the first three unblock building locally and shrink
70
72
71
73
## 4. Audit the Vite integration
72
74
75
+
_2026-08-29: on Vite 8 (rolldown). The JSX post-transform now uses `transformWithOxc` from Vite instead of a direct `esbuild` dependency; `fable-library` is located via `import.meta.resolve`. The lifecycle/HMR questions below are still open._
76
+
73
77
Questions to answer with the Vite 7 docs and, ideally, a small experiment in `sample-project`.
0 commit comments