Files
reforgermods-launcher/src/app.tsx
T
SowinskiBraedenandClaude Opus 5 377f3a31b3 initial commit: reforgermods.net launcher 0.1.0
A desktop server browser for Arma Reforger, built on the reforgermods.net v2
API. Live server list with search, sort and filters; a detail inspector with
population history and mod readiness; measured ICMP latency; favorites, recents
and settings; and direct joining through Steam.

Tauri 2 and Rust, with a Preact frontend that builds to 80 KB of JavaScript in
one chunk. Logic lives in rfm-core, which has no Tauri dependency and is tested
directly; src-tauri is the window, the command surface and the wiring.

Packaged for the public beta: a per-user NSIS installer, a portable .exe and an
Arch package, with signature-verified background updates on Windows and a
release pipeline that builds from a tag. The artifacts are not yet
Authenticode-signed — that is wired and waiting on an Azure Trusted Signing
identity, and docs/distribution.md says so plainly rather than letting anyone
discover it at the SmartScreen dialog.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-24 20:29:00 -07:00

33 lines
1.0 KiB
TypeScript

/** Application shell: brand, header, navigation and the active view. */
import { Inspector } from "./components/Inspector";
import { TitleBar } from "./components/TitleBar";
import { Sidebar } from "./components/Sidebar";
import { BrowseView } from "./views/BrowseView";
import { FavoritesView, RecentView } from "./views/ListView";
import { SettingsView } from "./views/SettingsView";
import { view } from "./lib/state";
export function App() {
const current = view.value;
// The saved lists render the same table as the browser, so they get the same
// inspector; only settings is full width.
const showInspector = current !== "settings";
return (
<div class="shell">
<TitleBar />
<Sidebar />
<main class={`main${showInspector ? "" : " main--full"}`}>
{current === "browse" && <BrowseView />}
{current === "favorites" && <FavoritesView />}
{current === "recent" && <RecentView />}
{current === "settings" && <SettingsView />}
{showInspector && <Inspector />}
</main>
</div>
);
}