Solarized Light + Dark theme plugin for F∆I Studio
Find a file
flemming-it 0ec78fb06f chore(plugin): adopt fai-plugin-sdk naming + fai-plugins repo URL
Three SDK families convention from
fai/platform/docs/architecture/sdks.md: base name carries
family, suffix carries language. This plugin now depends on
fai-plugin-sdk (was fai-studio-plugin-sdk) and moves to the
fai-plugins/ org on Forgejo.

Signed-off-by: flemming-it <sf@flemming.it>
2026-05-26 00:59:18 +02:00
src chore(plugin): adopt fai-plugin-sdk naming + fai-plugins repo URL 2026-05-26 00:59:18 +02:00
.gitignore feat: studio-theme-solarized v0.1.0 — skeleton 2026-05-25 13:24:00 +02:00
Cargo.lock chore(plugin): adopt fai-plugin-sdk naming + fai-plugins repo URL 2026-05-26 00:59:18 +02:00
Cargo.toml chore(plugin): adopt fai-plugin-sdk naming + fai-plugins repo URL 2026-05-26 00:59:18 +02:00
MODULE.de.md docs: add MODULE.md + MODULE.de.md inline docs 2026-05-25 23:03:13 +02:00
MODULE.md docs: add MODULE.md + MODULE.de.md inline docs 2026-05-25 23:03:13 +02:00
module.yaml feat: studio-theme-solarized v0.1.0 — skeleton 2026-05-25 13:24:00 +02:00
README.md chore(plugin): adopt fai-plugin-sdk naming + fai-plugins repo URL 2026-05-26 00:59:18 +02:00
rust-toolchain.toml feat: studio.theme.solarized v0.1.0 builds against SDK 2026-05-25 14:31:23 +02:00

studio-theme-solarized

First in-tree Studio plugin. Ships Ethan Schoonover's Solarized palette as a Material 3 ColorScheme pair through the WIT theme export.

Status

v0.1 builds. The target/wasm32-wasip2/release/studio_theme_solarized.wasm artefact (~22 KiB stripped) is a valid F∆I Studio plugin component. What remains for full round-trip:

  • The Hub side needs an InvokePlugin gRPC RPC + a Component-Model loader path for studio-plugin-world components. Tracked as task #80.
  • Studio side needs plugin_host.dart + a theme-picker UI that lists installed studio.theme.* capabilities.

Until those land, this plugin can be inspected with wasm-tools component wit and packed via fai pack/tmp/studio-theme-solarized-0.1.0.fai is sha256 e3d5aae44bb97f14f8f84e293ef8742700956b69c7d6fe46bb8b3c97fc1b23a0.

Palette

Ethan Schoonover's Solarized. 14 Material 3 tokens per brightness, in the order Studio expects (primary → on-primary → secondary → … → outline-variant). Both Light and Dark are explicit consts in src/lib.rs.

Why the source has three Guest impls

v0.1 of the SDK declares all three plugin hooks (theme, translate, output-view) in a single WIT world. A plugin that only cares about one hook still has to declare all three — the other two return PluginError::Declined, and Studio falls back to its built-in renderer / the [EN] badge.

v0.2 will split the WIT into one world per hook so a theme plugin only writes the theme impl. See docs/advanced/plugin-sdk.md in fai/platform for the design notes.

Build

cargo build --release --target wasm32-wasip2
cp target/wasm32-wasip2/release/studio_theme_solarized.wasm module.wasm
fai pack .