---
title: "Pages that move"
url: "https://mira.omrajguru.site/"
description: "Mira is an open source static site framework for sites that arrive fast, move like apps, and read as clearly to agents as they do to people."
---

# Pages that move.********

An open source static site framework. Write Markdown, ship plain HTML that loads fast, animates between pages, and reads as well to agents as it does to people.

- **1 KB runtime
- **0 KB app JavaScript
- **Any static host

`npm create mira@latest`

[Quick start](/docs/quick-start/) [GitHub](https://github.com/buildwithmira/mira)

[0.1.2The README on npm, and releases you can verify](/changelog/v0-1-2/)

********

************

## Elements travel between pages.

Add `mira-morph` to a title or image and it animates into its match on the next page. Back plays it in reverse.

## Ready before the click.

Links prefetch on hover and prerender on press, so the next page is usually already there.

#

##

## A Markdown copy of every page.

Add `.md` to any URL. Agents get clean text with a canonical link; people get the designed page.

## Styled from the first build.

A theme, type scale, and components come with every project. Change them in `mira.config.json`.

********

## Ships anywhere static files do.

`mira build` writes one folder of plain HTML, Markdown, and assets. Name your hosts in `mira.config.json` and each build writes their own config, so headers, clean URLs, the 404 page, and redirects behave the same on all of them. Firebase, Render, Azure, and Deno Deploy are covered too.

routes/ · content/ ** mira build ** dist/

Vercelvercel.json

Netlifynetlify.toml

Cloudflare Pageswrangler.toml

GitHub PagesActions workflow

Amazon S3CloudFront function

Docker and nginxDockerfile, nginx.conf

********

## Your site, served to agents.

Run `mira mcp` and any MCP client can list, search, and read every page, rebuilt fresh for each call. Add it to a client with `npx @miraframework/mira mcp`. Every page also has a Markdown twin, and each build writes `llms.txt` and a JSON search index.

```
$ mira mcp --root .
serving over stdio

tools/list
  **list_pages**  every URL and title
  **read_page**   one page as Markdown
  **search**      best matches, with snippets
```

[`/index.md`This page as Markdown](/index.md) [`/llms.txt`Every page, linked to its twin](/llms.txt) [`/_mira/search.json`Titles, headings, and text](/_mira/search.json)

********

## Also in every build.

### Native page transitions

Shared elements morph between pages with one attribute. Back plays the motion in reverse.

`mira-morph`

### Typed content

Frontmatter is checked against a schema and fails with the exact file and line.

`collections`

### Checks before deploy

Broken links, missing assets, and duplicate URLs stop the build, not the reader.

`mira build`

### Built in search

A build time index and a search box that loads only on pages that use it.

`<mira-search>`

### Strict security policy

Every page carries a content security policy built from hashes of its own code.

`sha256`

### Errors you can read

Build and runtime errors open on the page with the source line and a copy button.

`mira dev`

### Size budgets

A page over its size budget fails the build. The runtime is about 1 KB gzipped, against a hard 2 KB limit.

`page_kb`

### Instant navigation

Links prefetch on hover and prerender on press, so the next page is ready first.

`Speculation Rules`

********

## Bring your site with you.

`mira migrate` moves a Next.js, Astro, Hugo, Jekyll, Docusaurus, Gatsby, Eleventy, or VitePress site into a new Mira project. It reads the old site without running any of it, keeps every URL with redirects, and lists anything that needs a person, with the file and line.

- Next.js
- Astro
- Hugo
- Jekyll
- Docusaurus
- Gatsby
- Eleventy
- VitePress

```
$ mira migrate ./docusaurus ./site
from Docusaurus
  pages            **10**
  blog entries     **4**
  static files     **8**
  redirects        **4**
  to review        **1**

migrated to ./site, and it builds: 17 pages
```

## Start a site in one command.

`npm create mira@latest`

[Read the docs](/docs/)[Changelog](/changelog/)[npm](https://www.npmjs.com/package/@miraframework/mira)
