ripple
Copilot instructions7.4k starsChanged 9 months agoMITView on GitHub
Ripple is a TypeScript-first UI framework and monorepo maintained by Dominic Gannaway. This repository owns the Ripple runtime, Ripple-specific compiler target, adapters, scaffolding, and framework integrations. The shared .tsrx language, compiler core, non-Ripple targets, language tooling, editor plugins, and syntax grammars are maintained in tsrx-org/tsrx. Use the nearest live source rather than historical summaries: - website/public/llms.txt for Ripple runtime APIs, target behavior, and Ripple-specific authoring guidance - tsrx.dev for target-neutral TSRX syntax, tooling, and the language specification - README.md for…
We split this copilot-instructions.md into the rules it gives an agent
17 rules. About 0 are common, 9 are distinctive, and 8 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈9
Distinctive · estimate
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 12
Use the nearest live source rather than historical summaries:
- Distinctive: line 24
If a guide conflicts with nearby code or package READMEs, trust the nearby code and current package docs.
- Distinctive: line 67
After changing RuleSync content, run:
- Very specific: line 75
Default component files are .tsrx.
- Very specific: line 77
Prefer the current TSRX component shape: function Component(props) @{ ...
- Distinctive: line 83
When a template scope mixes TypeScript setup with rendered output, setup statements come first and the scope finishes with one output node: …
- Very specific: line 88
Use @if, @for, @switch, and @try for template control flow.
- Very specific: line 105
Use pnpm for all package management and workspace scripts.
- Distinctive: line 106
Follow the conventions of the package you are changing.
- Distinctive: line 125
Prefer the smallest validation that covers the touched surface.
- Distinctive: line 146
Add a changeset for user-facing package changes.
- Very specific: line 149
Use patch changesets for ordinary changes.
- Very specific: line 167
Prefer Ripple docs in website/public/llms.txt and target-neutral guidance at tsrx.dev over stale architectural summaries.
- Very specific: line 169
Treat @tsrx/core and generic tooling as external published dependencies, including in tests and examples.
- Very specific: line 171
Avoid copying removed compiler APIs, old package layouts, or legacy .ripple examples into new guidance.
- Distinctive: line 173
If exact behavior is unclear, read the owning retained package and its tests.
- Distinctive: line 174
Keep documentation updates short and durable.
≈ “Common” is an estimate: at least 1 in 5 of the 3,669 Copilot instructions files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Ripple Project Guide for AI Agents
Ripple is a TypeScript-first UI framework and monorepo maintained by Dominic
Gannaway. This repository owns the Ripple runtime, Ripple-specific compiler
target, adapters, scaffolding, and framework integrations. The shared .tsrx
language, compiler core, non-Ripple targets, language tooling, editor plugins, and
syntax grammars are maintained in
tsrx-org/tsrx.
Start From Current Sources
Use the nearest live source rather than historical summaries:
website/public/llms.txtfor Ripple runtime APIs, target behavior, and Ripple-specific authoring guidance- tsrx.dev for target-neutral TSRX syntax, tooling, and the language specification
README.mdfor the Ripple overview, positioning, and quick-start examplespackages/*/README.mdfor package-specific usage and public APIsvitest.config.jsfor the current Ripple test projects and file globspackage.jsonfor workspace-wide scripts such asrules:generate,test,format,format:check, andtypecheck
If a guide conflicts with nearby code or package READMEs, trust the nearby code and current package docs.
Repository Boundary
This repository contains only Ripple-owned source:
packages/ripple/: runtime, DOM behavior, hydration, SSR, reactivity, types, and server helperspackages/tsrx-ripple/: the Ripple-specific@tsrx/ripplecompiler targetpackages/vite-plugin/andpackages/rollup-plugin/: Ripple bundler integrationspackages/adapter/,packages/adapter-node/,packages/adapter-bun/, andpackages/adapter-vercel/: deployment and platform adapterspackages/cli/,packages/create-ripple/, andtemplates/: Ripple scaffoldingplayground/ripple/,benchmarks/,website/, andwebsite-new/: Ripple examples, performance work, and documentation
Shared @tsrx/* packages are registry dependencies. Do not recreate moved
compiler, formatter, linter, language-server, grammar, editor-plugin, or
non-Ripple target source here. Route changes in those areas to tsrx-org/tsrx;
update Ripple only when its target integration must adapt.
The intended dependency direction is Ripple -> published TSRX packages. Do not add
a workspace link, Git dependency, or copied source that reverses that boundary.
@tsrx/ripple is the deliberate exception in package naming: its source and
publishing authority remain in this repository because it implements Ripple
runtime semantics.
RuleSync
This repository uses RuleSync as the single source of truth for shared AI agent
instructions. Edit .rulesync/rules/ and regenerate derived files instead of
patching generated outputs directly.
Generated targets include:
AGENTS.md.github/copilot-instructions.mdCLAUDE.mdGEMINI.md.cursor/rules/project.mdc
After changing RuleSync content, run:
pnpm rules:generateCurrent Working Assumptions
- Default component files are
.tsrx. Do not describe the project as primarily using.ripplefiles unless the local historical context requires it. - Prefer the current TSRX component shape:
function Component(props) @{ ... }when setup and output share a scope, orfunction Component(props) { return <div />; }for simple single-root output. - TSRX templates use JSX-shaped elements, fragments, text, expression containers, and directive control flow. Do not introduce removed experimental template-boundary or legacy component syntaxes in new examples.
- When a template scope mixes TypeScript setup with rendered output, setup statements come first and the scope finishes with one output node: a JSX element, JSX fragment, or JSX control-flow expression. Wrap text, expression containers, or multiple siblings in a fragment when they are the output after setup.
- Use
@if,@for,@switch, and@tryfor template control flow. Plain JavaScript control flow remains ordinary setup code. - A
<style>block is scoped to its siblings: it styles the elements beside it and everything below them, never the element that contains it. Put the block and its markup side by side in a fragment or element, inside a@{ ... }body or a control-flow branch. Blocks among the same children share one hash; nested children lists with blocks are nested scopes. Assign a block to a variable for a theme (theme.$class,<style apply={theme} />) or class map; raw CSS in a<style>inside a plainreturn <div />function is an error. - Share context across files by exporting one
Contextinstance from a shared module and importing it in providers and consumers, or passing the same instance as a prop. Call.set()and.get()during component initialization; event handlers can mutate tracked values stored in the context. For shared updates, provide a store object once in a common ancestor and update its reactive properties. A child's.set()overrides the provided value for its subtree; it does not update the value held by ancestors or sibling branches. Seewebsite/docs/guide/state-management.mdfor examples. - Use
pnpmfor all package management and workspace scripts. - Follow the conventions of the package you are changing. This repo mixes plain JavaScript, JSDoc-typed JavaScript, and TypeScript depending on package.
- Match nearby naming, file layout, and test style instead of applying a single convention repo-wide.
Finding The Right Package
- Ripple compiler lowering, analysis, or target semantics:
packages/tsrx-ripple/ - Ripple runtime behavior, hydration, reactivity, DOM updates, or server output:
packages/ripple/ - Ripple Vite, Rollup, or adapter behavior: the relevant retained package under
packages/ - Ripple project generation:
packages/cli/,packages/create-ripple/, andtemplates/ - Target-neutral TSRX parsing, diagnostics, formatting, linting, language-server
behavior, editor integration, or non-Ripple targets:
tsrx-org/tsrx
Validation
Prefer the smallest validation that covers the touched surface.
Common workspace commands:
pnpm rules:generate
pnpm format:check
pnpm test
pnpm test --project ripple-client
pnpm test --project ripple-server
pnpm test --project ripple-hydration
pnpm test --project tsrx-ripple
pnpm typecheck
pnpm changeset:checkRipple runtime suites use .test.tsrx files for many client, server, and
hydration tests. Tooling packages often use .test.js files.
Changesets And Publishing
Add a changeset for user-facing package changes. Skip changesets for docs-only, test-only, and internal tooling updates.
Use patch changesets for ordinary changes. Reserve minor for a breaking change
such as removed syntax or a removed public API, and never use major until a
release plan explicitly changes that policy. Peer-dependency bumps only patch
their dependents (@changesets/cli 3), so a minor on ripple never cascades
into a major.
pnpm changeset
pnpm changeset:checkChangesets discovers publishable packages from the pnpm workspace. Keep
non-publishable projects marked private: true, and use .changeset/config.json
for release grouping and temporary ignores. @tsrx/ripple remains the sole
@tsrx-scoped package published from this repository.
Practical Guidance For Agents
- Prefer Ripple docs in
website/public/llms.txtand target-neutral guidance attsrx.devover stale architectural summaries. - Treat
@tsrx/coreand generic tooling as external published dependencies, including in tests and examples. - Avoid copying removed compiler APIs, old package layouts, or legacy
.rippleexamples into new guidance. - If exact behavior is unclear, read the owning retained package and its tests.
- Keep documentation updates short and durable. High-level guidance ages better than detailed internal call lists.
Trending
Less talk lately.about the whole repository
Who's talking about Ripple-TS/ripple
- krausest/js-framework-benchmark“Important: Cleaning up and retiring implementations”GitHub · Sep 4, 2026 · 5 reactions
- A Hacker News story“Ripple – the elegant TypeScript UI framework”Hacker News · Nov 6, 2025 · 3 points
- oxc-project/oxc“Add native `TSRX` (`.tsrx`) support to `oxfmt` and `oxlint`”GitHub · Aug 20, 2026 · 2 reactions
- tsrx-org/tsrx“[Bug]: tsrx-core: Unused-import warnings do not show in .tsrx files when the imports have no semicolons …”GitHub · Oct 3, 2026
- radeqq007/ripple-ui“deps-dev(deps-dev): bump ripple from 0.3.127 to 0.4.6”GitHub · Sep 24, 2026
The biggest 5 of 30 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 30
Talked about on GitHub and Hacker News (30 times).
On GitHub · 29
- Sep 4, 2026Important: Cleaning up and retiring implementations — krausest/js-framework-benchmark5 reactions · 4 comments
- Aug 20, 2026Add native `TSRX` (`.tsrx`) support to `oxfmt` and `oxlint` — oxc-project/oxc2 reactions
- Oct 3, 2026[Bug]: tsrx-core: Unused-import warnings do not show in .tsrx files when the imports have no semicolons (TypeScript 5.9/6) — tsrx-org/tsrx0 reactions
- Sep 24, 2026deps-dev(deps-dev): bump ripple from 0.3.127 to 0.4.6 — radeqq007/ripple-ui0 reactions
- Sep 17, 2026deps-dev(deps-dev): bump ripple from 0.3.127 to 0.3.128 — radeqq007/ripple-ui0 reactions · 1 comment
24 more on GitHub
- Sep 15, 2026fix: support kebab-case inline style types — octanejs/octane0 reactions
- Sep 14, 2026feat: remove lazy destructuring (RFC #106) — tsrx-org/tsrx0 reactions · 5 comments
- Sep 10, 2026deps-dev(deps-dev): bump ripple from 0.3.124 to 0.3.127 — radeqq007/ripple-ui0 reactions
- Sep 3, 2026deps-dev(deps-dev): bump ripple from 0.3.124 to 0.3.125 — radeqq007/ripple-ui0 reactions · 1 comment
- Aug 27, 2026deps-dev(deps-dev): bump ripple from 0.3.120 to 0.3.124 — radeqq007/ripple-ui0 reactions
- Aug 24, 2026Update tsrx to v0.0.87 — zed-industries/extensions0 reactions
- Aug 24, 2026Update tsrx to v0.0.87 — zed-industries/extensions0 reactions
- Aug 20, 2026deps-dev(deps-dev): bump ripple from 0.3.118 to 0.3.120 — radeqq007/ripple-ui0 reactions
- Aug 12, 2026Update tsrx to v0.0.86 — zed-industries/extensions0 reactions · 3 comments
- Jul 30, 2026deps-dev(deps-dev): bump ripple from 0.3.93 to 0.3.118 — radeqq007/ripple-ui0 reactions
- Jul 15, 2026Tanstack Form — octanejs/octane0 reactions · 1 comment
- Jul 9, 2026deps-dev(deps-dev): bump ripple from 0.3.84 to 0.3.93 — radeqq007/ripple-ui0 reactions
- Jul 2, 2026deps-dev(deps-dev): bump ripple from 0.3.84 to 0.3.86 — radeqq007/ripple-ui0 reactions · 1 comment
- Jun 18, 2026refactor(node)!: Remove NpmClientHandler and NodeRuntime — sublimelsp/lsp_utils0 reactions · 1 comment
- Jun 18, 2026deps-dev(deps-dev): bump ripple from 0.3.79 to 0.3.84 — radeqq007/ripple-ui0 reactions
- Jun 11, 2026deps-dev(deps-dev): bump ripple from 0.3.72 to 0.3.79 — radeqq007/ripple-ui0 reactions
- Jun 4, 2026deps-dev(deps-dev): bump ripple from 0.3.68 to 0.3.72 — radeqq007/ripple-ui0 reactions
- May 28, 2026deps-dev(deps-dev): bump ripple from 0.3.65 to 0.3.68 — radeqq007/ripple-ui0 reactions
- May 21, 2026deps-dev(deps-dev): bump ripple from 0.3.58 to 0.3.65 — radeqq007/ripple-ui0 reactions
- May 14, 2026deps-dev(deps-dev): bump ripple from 0.3.49 to 0.3.58 — radeqq007/ripple-ui0 reactions
- May 7, 2026deps-dev(deps-dev): bump ripple from 0.3.39 to 0.3.49 — radeqq007/ripple-ui0 reactions
- Apr 30, 2026deps-dev(deps-dev): bump ripple from 0.3.28 to 0.3.39 — radeqq007/ripple-ui0 reactions
- Apr 23, 2026deps-dev(deps-dev): bump ripple from 0.3.10 to 0.3.28 — radeqq007/ripple-ui0 reactions
- Apr 16, 2026deps-dev(deps-dev): bump ripple from 0.3.6 to 0.3.10 — radeqq007/ripple-ui0 reactions
On Hacker News · 1
- Nov 6, 2025Ripple – the elegant TypeScript UI framework3 points
Other versions1 project uses a version of this.
Word for word · 1
- trueadm/ripple★ 7.4k100% same
Edited · 0
None found.
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Where files are headingNew Copilot instructions files have more rules about branches and pull requests, and fewer about code style.
Of the Copilot instructions files we read, the 2,297 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository3 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- .cursor/rules/project.mdcCursor rule
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

