4.8 KiB
Drasl Web UI Customization
How far you can reskin Drasl's web frontend, and what it costs. Source repo: https://github.com/unmojang/drasl · config docs: https://github.com/unmojang/drasl/blob/master/doc/configuration.md
TL;DR
Drasl has no theme/plugin system. You get three tiers, increasing effort:
- Config knobs (runtime, trivial) — rename instance, toggle footer / 3D bg.
- Static-asset override (mount, easy) — swap
style.css,logo.svg,icon.png. - Template / fork (build, heavy) — edit
view/*.tmpl, rebuild the image.
For a "very noob-friendly UI" the realistic win is tier 2 (reskin CSS + logo) plus a dead-simple guide page on the landing site that walks guests through register → login → upload skin, screenshots included. Drasl's own pages stay the backend; the landing page is where you make it friendly.
Tier 1 — Config knobs (config.toml)
Live in drasl/config/config.toml.tmpl. Already rendered into the container at
/etc/drasl/config.toml. No rebuild — just docker compose restart drasl.
| Option | Default | Effect |
|---|---|---|
InstanceName |
"Drasl" |
Site name shown in header/title. Set to "Ulicraft Accounts". |
ApplicationOwner |
"Anonymous" |
Owner label (already "Ulicraft"). |
EnableBackgroundEffect |
true |
3D animated background. Off = cleaner/faster. |
EnableFooter |
true |
Footer block. |
EnableWebFrontEnd |
true |
Master switch for the whole web UI. |
Low effort, low ceiling. Does not change layout, colors, or copy.
Tier 2 — Static-asset override (CSS + logo) ← recommended
Drasl serves static files from DataDirectory (default /usr/share/drasl).
The shipped assets live in the image's public/:
style.css— primary stylesheet (all colors/spacing/theme)logo.svg— header logoicon.png— faviconopenid-logo.svg— OIDC button icon (unused here, no OIDC)
Plan
-
Pull the upstream
style.cssas a baseline: https://raw.githubusercontent.com/unmojang/drasl/master/public/style.css -
Create
drasl/public/in this repo. Drop in your editedstyle.css,logo.svg,icon.png. -
Bind-mount over the container's asset dir in
docker-compose.yml:drasl: volumes: - ./drasl/config:/etc/drasl:ro - ./drasl/public:/usr/share/drasl/public:ro # <-- add - drasl_state:/var/lib/drasl⚠ Verify the exact in-container path first — assets may sit at
/usr/share/drasl/public/or directly under/usr/share/drasl/. Check:docker compose exec drasl sh -c 'find /usr/share/drasl -name style.css'Mount to match whatever that prints. Mount the directory, not the single file, so the logo/icon ride along.
-
docker compose up -d drasl. Hard-refresh browser (CSS cache).
Ceiling: full restyle of existing pages — colors, fonts, button sizes, hide clutter, big friendly upload button. Cannot add/remove page elements or reword text (that's the templates → tier 3).
Tier 3 — Templates / fork (heavy)
Page structure + copy live in Go templates view/*.tmpl, embedded into the
binary at build time (Go embed.FS) — not overridable by mounting. Files:
root.tmpl user.tmpl player.tmpl registration.tmpl
complete-registration.tmpl challenge.tmpl admin.tmpl
layout.tmpl header.tmpl footer.tmpl error.tmpl
To change them you must fork + rebuild:
- Fork
unmojang/drasl. - Edit
view/*.tmpl(reword, restructure, add help text/links). - Build a custom image, push to your registry (or build locally).
- Point
image:in compose at your fork.
Maintenance cost: you now track upstream and rebase on releases. Only worth it if tier 2 + landing-page guide aren't enough.
Alternative to forking: build a thin custom frontend that talks to Drasl's
HTTP API (see api.go) for the one flow guests care about (login + skin
upload), hosted at e.g. ${BASE_DOMAIN}/skins. More code, but total UI control
and no upstream coupling. Overkill for 4–10 friends.
Recommended path for Ulicraft
- Tier 1:
InstanceName = "Ulicraft Accounts", decide on bg/footer. - Tier 2: reskin
style.cssto match the landing page, swap logo + favicon. - Landing-page guide: add a
/skins(or/help) page on the apex landing site — numbered steps + screenshots: register atauth., log in, upload skin, done. This is what actually makes it noob-friendly; Drasl stays the plumbing. - Skip tier 3 unless a specific page is confusing enough to justify a fork.
Related
- Skin/cape config flags: see
plan/03-drasl.mdand CLAUDE.md gotchas. AllowTextureFromURL = truelets guests paste a skin URL (e.g. from a skin site) instead of uploading a file — friendlier for non-technical users.