# Overview

Frame is an open source framework for publishing [web pages](https://www.frame.tools/frame/eth/1/0x612208653e00de208d4e4eab3c865ff781b84c64) to EVM-based block space.&#x20;

It consists of two components:

* A set of immutable smart contracts [deployed](https://docs.frame.tools/reference/deployed-contracts) to popular EVM-based networks, which are used for storing, retrieving, and rendering a cohesive web page.
* [FrameDataStore](https://docs.frame.tools/reference/technical-reference/framedatastore) contracts that hold reusable browser code already on-chain, such as [three.js](https://threejs.org/) and [p5.js](https://p5js.org/). Once data is added to these contracts it cannot be edited or removed.

The GitHub repo can be found [here](https://github.com/cncrde/frame-tools).&#x20;

### How it Works

Web pages are rendered from on-chain by iteratively calling the `renderPage` method on a [Frame](https://docs.frame.tools/reference/technical-reference/frame) contract and viewing the result in any modern web browser.&#x20;

Each Frame contract will usually reference two types of [FrameDataStore ](https://docs.frame.tools/reference/technical-reference/framedatastore)contracts for its data:

* Dependency data stores, such as [FrameTools](https://etherscan.io/address/0xddba0fe2a9d15e7885d1a944679280ac40420ce0), which contain already-on-chain code to be run in the web page on page load
* A newly-deployed data store containing any new browser code that will be run in the web page, after imported code is run

Frames can reference code that is already on-chain (and thus paid for), greatly reducing a creator's cost to create something reliant on powerful open source libraries. For example, the [FrameTools](https://etherscan.io/address/0xddba0fe2a9d15e7885d1a944679280ac40420ce0) contract provides access to [p5.js](https://p5js.org/) or [three.js](https://threejs.org/) for tiny percentage of their original on-chain storage cost.

### Use-Case

Web pages are really just containers for media. Frame was built to help creatives publish dynamic, high-fidelity media that lives entirely on-chain for as low of a cost as possible.&#x20;

A creator can also do more with code in the browser than in the EVM. For example, libraries in the Frame Tools data store are stored in a compressed format (gzip), and are decompressed on page load using code from the [fflate](https://github.com/101arrowz/fflate) js library.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.frame.tools/overview.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
