No description
  • TypeScript 66.2%
  • JavaScript 32.7%
  • HTML 0.5%
  • CSS 0.3%
  • Shell 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-18 00:15:00 -07:00
build v0.25.2, released 2026-02-23 2026-03-30 22:19:35 -04:00
debug Export @srhazi/gooey/debug as a debug-enabled export 2022-04-28 21:57:54 -04:00
docs remove local headless runner and session notes 2026-10-11 00:26:15 -04:00
s remove local headless runner and session notes 2026-10-11 00:26:15 -04:00
src cells: derive per-cell editing from the active cell 2026-10-18 00:05:30 -07:00
.eslintrc.cjs Major code restructure (checkpoint) & update many dependencies 2024-06-20 11:21:37 -04:00
.gitignore merge wip/identity-replay into session/106 (spike continuation) 2026-10-17 23:03:15 -07:00
.npmignore v0.0.1 2021-10-30 18:54:03 -04:00
.nvmrc Major code restructure (checkpoint) & update many dependencies 2024-06-20 11:21:37 -04:00
.prettierrc Major code restructure (checkpoint) & update many dependencies 2024-06-20 11:21:37 -04:00
index.html Ensure mount() called once per element 2025-05-05 12:11:39 -04:00
LICENSE Bare setup 2021-09-25 18:18:40 -04:00
package-lock.json remove local headless runner and session notes 2026-10-11 00:26:15 -04:00
package.json remove local headless runner and session notes 2026-10-11 00:26:15 -04:00
README.md v0.13.0 2022-12-10 15:10:18 -05:00
tsconfig.json update to moduleResolution: bundler and fix type exports 2025-04-29 17:12:31 -04:00
vite.config.ts format 2025-04-18 10:34:33 -04:00

Gooey

Gooey is a new frontend web framework that is focused and flexible.

It works like a spreadsheet: build cells of UI or data that can read other cells of data, and it takes the work of ensuring the data and UI is always up to date.

It helps deal with the complicated bits of the Model and View in the traditional Model-View-Controller architectural pattern: ensuring that the DOM and any derived data is up to date.

It’s inspired by build systems, spreadsheets, and Backbone.

See https://gooey.abstract.properties for documentation and guide.

Simple Example

import Gooey, { mount, calc, model, collection } from '@srhazi/gooey';

const state = model({ count: 0 });
const clickTimes = collection<Date>([]);

mount(
  document.body,
  <>
    <h2>Clicker Demo</h2>
    <p>
      <button
        on:click={() => {
          state.count += 1;
          clickTimes.push(new Date());
          // Let's not go overboard, limit to 5 items
          if (clickTimes.length > 5) clickTimes.shift();
        }}
      >
        Clicked {calc(() => state.count)} times
      </button>
    </p>
    {calc(
      () =>
        clickTimes.length > 0 && (
          <ul>
            {clickTimes.mapView((date) => (
              <li>Clicked at {date.toLocaleTimeString()}</li>
            ))}
          </ul>
        )
    )}
  </>
);