Build web apps like the hipster you are
Find a file
2026-01-09 14:31:54 -05:00
packages Bind functions in factory 2026-01-09 14:31:54 -05:00
.gitignore Add website and improved docs 2026-01-08 15:00:01 -05:00
biome.json Add website and improved docs 2026-01-08 15:00:01 -05:00
bun.lock Add website and improved docs 2026-01-08 15:00:01 -05:00
package.json sync and async transactions, docs updates 2026-01-09 09:01:15 -05:00
README.md sync and async transactions, docs updates 2026-01-09 09:01:15 -05:00
tsconfig.json Initial commit for public repo 2026-01-07 10:08:04 -05:00

Palette Logo

Build web apps like the hipster you are

Full Documentation: palette.camp

Overview

Palette provides utilities that work hand in hand with native browser APIs to bring modern ergonomics closer to the platform.

Use Templates powered by standard <template> elements to render dynamic content.

Manage State with a flexible and expressive state manager with support for deep reactivity, locking, and transactions with rollbacks.

Combine them with Components to create your own native Web Components with reactive rendering, blazing fast updates, and powerful utilities.

Quick Look

import { define, html, css } from "@rusticarcade/palette";

// Using convenience methods here.
// You can also just import and extend `Component` for class-based definitions
const CountingButton = define("counting-button", {
  template: html`<button>${"$count"}</button>`,

  styles: css`
    :host {
      --border-color: black;
    }

    button {
      font-size: 1.5em;
      border: 3px solid var(--border-color);
    }
  `,

  initialState: { count: 0 },

  script() {
    this.listen("button", "click", () => {
      this.liveState.count += 1;
    });
  }
});

Documentation

Guides and API docs can be found at palette.camp