If you already have a React, Vue, or similar web application, you can adopt Fulora without rewriting your frontend.
The recommended brownfield path is:
attach web -> dev -> package
Start by wiring your existing frontend into a Fulora workspace:
fulora attach web \
--web ./app/web \
--desktop ./app/desktop \
--bridge ./app/bridge \
--framework react \
--web-command "npm run dev" \
--dev-server-url http://localhost:5173This creates Fulora-owned wiring, writes fulora.json, and leaves the existing web app structure intact.
- keep your existing web project
- run
fulora attach webonce - add a lightweight Avalonia + Fulora desktop host
- connect the host to your web dev server in development
- add native capabilities gradually through typed services
In development, your web app continues to run through its normal dev server:
cd app/web
npm run devYour Fulora host points to it:
WebView.EnableSpaHosting(new SpaHostingOptions
{
DevServerUrl = "http://localhost:5173"
});
await WebView.NavigateAsync(new Uri("app://localhost/index.html"));That keeps HMR and the existing frontend workflow intact.
In production, switch to embedded or packaged static assets:
WebView.EnableSpaHosting(new SpaHostingOptions
{
EmbeddedResourcePrefix = "wwwroot",
ResourceAssembly = typeof(MainWindow).Assembly
});
await WebView.NavigateAsync(new Uri("app://localhost/index.html"));The same app://localhost/... surface works in both development and production.
Expose host capabilities through typed bridge services:
[JsExport]
public interface IUserProfileService
{
Task<UserProfileDto> Get();
}Use them from the frontend through the generated app-service surface:
import { services } from "./bridge/client";
const profile = await services.userProfile.get();- keep your existing frontend framework and structure
- use the dev server in development
- use packaged assets in production
- keep generated bridge files under
src/bridge/generated - let app code use
services.*, not raw RPC calls - use preflight checks before development and packaging
fulora attach web --web ./app/web --framework react
fulora dev --preflight-only
fulora package --profile desktop-public --preflight-only
fulora generate types --project ./app/bridge/MyProduct.Bridge.csprojIf bridge artifacts are missing or stale, run fulora generate types explicitly. Fulora preflight checks report drift instead of silently rewriting files.
For the full recommended structure, integration steps, and troubleshooting guidance, see the full guide: