# About Moonarc

Moonarc is a library of motion components for Astro, built and maintained by one developer, Azri. The 102 primitives in `@moonarc/core` are free under the MIT license, and 67 of them load no JavaScript. Pro, the paid tier, adds page sections, GPU effects and templates.

The [changelog](https://moonarc.dev/changelog/) starts on 12 September 2026 and lists every release since, with its date.

## Who builds it

I'm Azri, a full-stack developer and a 3D, motion and graphic designer. I have shipped production web work since 2022. I design, write and test each Moonarc component. [Portfolio](https://www.zrior.tech/) · [GitHub](https://github.com/azriPtr)

## Why I built it

Each library below works as designed. The problems start where it meets the way Astro builds pages.

- **Scripts run once.** With `ClientRouter`, Astro swaps the page without a reload, so setup code from the first load never runs again. Five threads on the GSAP forum between April and August 2024 report GSAP breaking after an Astro navigation ([one of them](https://gsap.com/community/forums/topic/41197-astro-viewtransitions-breaks-scrolltrigger-the-second-time-i-enter-a-page/)).
- **React effects need React.** An effect from a React catalogue runs in a React island, and React with ReactDOM costs about 67 kB gzip before the effect itself ([measured here](https://moonarc.dev/compare/react/)). React context also stops at the edge of each island ([Astro docs](https://docs.astro.build/en/recipes/sharing-state-islands/)).
- **Content waits for JavaScript.** A library that starts elements at `opacity: 0` leaves them invisible when its script fails to load ([AOS #81](https://github.com/michalsnik/aos/issues/81)).
- **Two scripts move the scroll.** On a site with `ClientRouter`, Lenis and Astro's scroll restoration both write the scroll position ([withastro/astro#12725](https://github.com/withastro/astro/issues/12725)).

Every Moonarc component follows four rules, one for each problem:

- One [runtime](https://moonarc.dev/docs/runtime/) binds each component after every navigation and cleans it up before the next.
- Effects use CSS wherever the browser can draw them. Each component page prints the JavaScript it ships, measured from a production build ([how](https://moonarc.dev/docs/performance/)).
- The server renders each component's end state, so the page reads correctly with JavaScript off. Every component also has a `prefers-reduced-motion` branch.
- The [GSAP and Lenis adapters](https://moonarc.dev/docs/view-transitions/) run on that same runtime, so they rebind with everything else.

## How Moonarc is tested

These checks run in CI on pull requests and on pushes to `main`, whenever the change can affect what they check:

- A production build of each component measures the JavaScript it ships. That number is the cost printed on its page.
- The packed `@moonarc/core` package installs into 7 real Astro projects: Astro 5, 6 and 7, static and server output, with real GSAP and Lenis.
- axe-core checks every page of this site against WCAG 2.1 AA, in light and dark on desktop, and on a phone.
- A browser test loads every page in Chromium, fails on any page error, and runs the navigation demo.

## How it is paid for

The primitives are MIT-licensed and stay free. Pro pays for the rest of the work: new components every month, the agent tooling and support ([pricing](https://moonarc.dev/pricing/)). Polar processes payments as the merchant of record.

## If Moonarc stops

What you installed keeps working:

- The primitives are MIT-licensed. Your copy is yours to keep and change.
- Pro components you installed stay licensed in every project after a subscription ends ([pricing FAQ](https://moonarc.dev/pricing/#faq)).
- The free components never depend on a server. The registry and the MCP catalogue are also published as static files.

What ends is access to the Pro registry, the Pro MCP tools and new releases.

## Contact

Email [hello@moonarc.dev](mailto:hello@moonarc.dev). Bugs and component requests go to [GitHub issues](https://github.com/azriPtr/moonarc/issues). Send security reports by email, so they stay private until a fix ships.
