Browser-side Space Engineers entity viewer used by Quasar for live grids, asteroid voxels, and future entity-focused views.
src/CometWorks.EntityViewer/contains reusable MudBlazor/Razor UI, services, and the static viewer runtime underwwwroot/.src/CometWorks.EntityViewer.Quasar/contains the thin Quasar UI plugin adapter.src/CometWorks.EntityViewer.Magnetar/contains the Magnetar companion plugin that captures live scene snapshots for the viewer.samples/PreviewHost/contains a standalone MudBlazor preview host for checking plugin components without running Quasar.Docs/contains viewer user/developer documentation.package.jsonandpackage-lock.jsonpin browser runtime packages that the viewer repository uses for its static runtime.
Quasar installs this repository as a Quasar UI plugin through QuasarHub. The hub
manifest pins a commit, Quasar clones that commit, builds the adapter project,
and mounts src/CometWorks.EntityViewer/wwwroot under
/_quasar/plugins/cometworks.entityviewer/.
The repository follows the Quasar UI plugin template split:
CometWorks.EntityViewerowns Razor components, MudBlazor dialog UI, shared UI service registration, and static assets.CometWorks.EntityViewer.QuasarimplementsIQuasarPluginand contributes the Entities page viewer column extension targets. Its scene API endpoint calls Quasar'sIQuasarCompanionChannel; Quasar core does not contain a viewer scene endpoint or viewer scene DTOs.CometWorks.EntityViewer.Magnetarimplements the companion plugin handler forcometworks.entityviewerscene requests and owns the server-side Space Engineers scene-capture code.
During local development, the adapter references a sibling Quasar checkout when
QuasarPluginAbstractionsProject resolves. During QuasarHub installation,
Quasar passes QuasarPluginAbstractionsAssembly so the plugin builds against
the exact Quasar.Plugin.Abstractions.dll loaded by the running Quasar worker.
The Magnetar companion project references the sibling Quasar checkout's
Magnetar.Protocol project by default. It compiles against the protocol bridge
but does not copy Magnetar.Protocol.dll into its own output; the running server
must use the protocol assembly staged with Quasar.Agent so companion handler
interface identity stays shared.
quasar-plugin.json points Quasar at the adapter project and exposes
src/CometWorks.EntityViewer/wwwroot as the plugin static asset directory. It
also asks Quasar to inject scoped quasar-plugin.css from that static asset
directory so the viewer dialog and replacement column can share host page
styling without loading the iframe-global viewer runtime CSS into Quasar. The
manifest also declares the cometworks.entityviewer companion plugin id. The
adapter opens a fullscreen MudBlazor dialog that serves the viewer from
/_quasar/plugins/cometworks.entityviewer/.
Build or run the standalone preview host while developing viewer plugin UI:
dotnet run --project samples/PreviewHost/PreviewHost.csprojThe preview host uses Quasar-like MudBlazor theming and references only the
shared CometWorks.EntityViewer UI project. It can render the replacement
Entities page column, the fullscreen dialog, and the static viewer runtime
without loading Quasar.
The static viewer vendors the browser modules it needs under
src/CometWorks.EntityViewer/wwwroot/vendor/ and resolves them with relative
import-map URLs. This keeps the viewer working when Quasar serves it from
/_quasar/plugins/cometworks.entityviewer/ instead of from the web root.
Chrome, Edge, and other Chromium 122+ browsers can persist selected local Content and Mods folder handles through the File System Access API and IndexedDB. Other browsers use the backup folder-input viewer path and warn that folder selections must be repeated after reload.
Future submodule updates should move the Viewer gitlink in Quasar. The Quasar
release workflow watches that path, so a merge to main that updates the
viewer submodule pointer triggers the release build.
When Quasar embeds the viewer in its fullscreen entity dialog, the viewer reads MudBlazor CSS palette, typography, and border-radius variables from the parent document and maps them onto its own CSS/Three.js theme tokens. Standalone direct viewer URLs keep the built-in fallback palette.