Skip to content
Back to skills

Tinyworld Settings

ASecurity

Use when changing Tiny World Builder Settings modal tabs, panels, controls, rendering/world/material/crowd/AI settings, or settings accessibility.

  • 1,587 stars
  • 0 votes
  • 0 copies
  • 6 views
  • Added September 3, 2026
designgotestingperformance

Works with

  • cli

Security analysis

A100/100

Scanned September 3, 2026

npx -y skills add jasonkneen/tiny-world-builder --skill tinyworld-settings --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Tinyworld Settings?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Tinyworld Settings
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/jasonkneen-tinyworld-settings/badge)](https://www.skillsdirectory.com/skills/jasonkneen-tinyworld-settings)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: tinyworld-settings
description: Use when changing Tiny World Builder Settings modal tabs, panels, controls, rendering/world/material/crowd/AI settings, or settings accessibility.
---

# Tiny World Settings

Settings live in `tiny-world-builder.html` inside `#render-modal`.

Keep settings changes compatible with the existing static single-file app:

- Preserve `data-settings-tab` values (`app`, `rendering`, `world`, `materials`, `environment`, `crowd`, `ai`) unless every command-palette and settings caller is updated in the same change.
- Preserve existing control IDs. The settings setup code binds controls by `getElementById`, so moving controls between sections is safe but renaming IDs is not.
- `selectSettingsTab(name)` must guard unknown names and update all tab and panel state together: `.active`, `aria-selected`, tab `tabIndex`, panel `.active`, and panel `hidden`.
- Settings tabs should remain real `role="tab"` buttons inside a `role="tablist"` and support click plus Arrow/Home/End keyboard navigation.
- Panels should be `role="tabpanel"` with stable IDs and `aria-labelledby` pointing at the matching tab.
- Settings search should be a thin UI layer over the existing tab/panel wiring: never rename controls for search, keep hidden rows reversible when the query clears, and route automatic tab changes through `selectSettingsTab()`.
- Search result counts may be shown inside tab buttons, but keep the tab's `data-settings-tab` value, `role`, keyboard navigation, and accessible label in sync.

Structure rules:

- Keep settings grouped by user intent, not implementation variable names.
- Current top-level tabs are Workspace, Rendering, World, Materials, Environment, Crowd, and AI.
- Tabs should stay dense and scannable: desktop may show a short hint; mobile should keep a compact horizontal tab strip.
- Mobile/short-screen scroll: `.settings-card` is height-capped (`max-height: calc(100vh - 100px)`, `dvh` on phones) and the panels scroll internally (`.settings-panels { overflow-y: auto }`, layout `flex:1 1 auto; min-height:0`). Never let the card grow unbounded again — on a phone that pushes lower controls off-screen and they become unreachable. On phones the layout is `grid-template-rows: auto minmax(0,1fr)` so the panels row is the scroller.
- Add `data-settings-keywords` when a setting or panel should be discoverable by broader user language such as performance, mechanics, textures, weather, or model.
- Preserve the existing `data-settings-tab` / `data-settings-panel` wiring, ARIA roles, keyboard tab navigation, and search-count chips.
- Search should route broad category terms to the right panel without hiding the controls in that panel.

Organization guidance:

- App/Workspace owns the UI theme selector (`ui-theme-mode`). `Auto` follows
  live UK/BST time-of-day, `Dark` forces dark chrome, and `Light` forces light
  chrome without auto-darkening after-hours.
- Rendering: keep image/render-cost controls grouped by intent. `Quality` covers shadow quality, Resolution, Dynamic resolution, and Target FPS; dynamic resolution treats the Resolution slider as a ceiling and only changes a transient effective scale. `Lighting` covers lighting and fill controls; `Image effects` covers brightness, saturation, contrast, pixelation, shader AA, and tilt-shift.
- World: preview/ghost controls are intentionally removed and forced to zero; do not reintroduce distance/window/opacity controls unless Preview rendering is explicitly brought back. Terrain style covers voxel bevel, landscape/planet toggles, voxel/cottage, and terrain voxel resolution. `Voxel gap` and `Show crowns` are also intentionally removed from the UI and forced off for render stability/performance.
- Time & weather popup: the time-of-day range is editable only in Build mode for
  local lighting previews. Play/Tinyverse/no-edit modes follow live UK/BST time
  and disable the range; do not persist manual build-time overrides to localStorage.
- Environment owns the `Planes` checkbox (`render-planes-enabled`) because it
  controls ambient flyovers and towed banners. It defaults off for the current
  performance pass and should stay searchable by plane/crop-duster/banner terms.
- Environment owns the admin-only Watcher controls (`watcher-*`). The Watcher
  visual is sourced from `engine/world/assets/god-face_15.html`, rendered by
  `engine/world/69-watcher-layer.js`, and must stay a transient Three scene
  layer, not saved world data. Keep it world-anchored with X/Y/Z controls so it
  zooms/pans with the island; do not re-lock it to the camera. Leave depth
  testing enabled so a distant Watcher sits behind the island instead of
  painting over it.
- Material wear defaults to 100% (`materialWear: '1'` and shipped
  `tinyworld:render:materialWear` = `1.00`). When changing shipped render
  defaults that must override older browser localStorage, bump
  `RENDER_SETTINGS_VERSION` and update `tinyworld-defaults.json` together.
- Materials, Environment, Crowd, and AI can be improved independently, but keep their current control IDs and listener wiring intact.

Validation:

- Run the inline script syntax check, `npm test`, and `npm run build`.
- Browser-check Settings opens, every tab can be selected, only one panel is visible, search routes to matching sections and clears cleanly, Arrow/Home/End navigation works, command-palette-style tab clicks still work, and the console has no app errors.
- For responsive settings changes, also check desktop and mobile widths: no horizontal page overflow, tab text does not overflow, search switches to expected panels, and console has no fresh warnings/errors.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.