# Unpoly

> Unpoly is the missing application layer for HTML. Links and forms update fragments of the page instead of loading a new one, so everything around them keeps its state: scroll positions, focus, half-typed input. The application stays on the server, in any language or framework, and responds with plain HTML.

These are the docs of Unpoly 3.15.0: **Learn pages** that explain concepts and show how to solve common tasks by combining features, and **API pages** with the exact specs of every attribute, function, event and option.

Fragment links point at the heading ending in `{#hash}`, e.g. `[label](/path#fragment)` points at `## Headline {#fragment}`.

Most pages are available as both HTML and Markdown: append `.md` to the page's URL, e.g. [https://unpoly.com/api/up.render**.md**](https://unpoly.com/api/up.render.md).

An [agent skill](https://unpoly.com/learn/skill.md) lets you read and search all of this documentation offline.

## Learn

- [Learn](https://unpoly.com/learn.md): Every guide, chapter by chapter, in reading order.
- [Getting started](https://unpoly.com/learn/start/overview.md): Unpoly lets your links and forms update fragments of the current page, instead of loading full new documents.
- [Links](https://unpoly.com/learn/links.md): Unpoly enhances links so they update a fragment of the current page, instead of loading a full new document.
- [Forms](https://unpoly.com/learn/forms.md): Unpoly submits forms and updates a fragment of the current page with the response.
- [Overlays](https://unpoly.com/learn/overlays.md): Unpoly can open any URL in an overlay, like a modal dialog or a drawer.
- [Loading state](https://unpoly.com/learn/loading-state.md): While Unpoly waits for the server, it can show loading state, like a spinner, a skeleton screen or even the expected result.
- [Live fragments](https://unpoly.com/learn/live-fragments.md): Live fragments are elements that update without being targeted by a link or form.
- [History](https://unpoly.com/learn/history.md): Unpoly keeps the browser history working while it updates fragments.
- [Scrolling & focus](https://unpoly.com/learn/scrolling-and-focus.md): After a fragment update, Unpoly decides what scrolls and what gets focus.
- [Network & caching](https://unpoly.com/learn/network.md): All of Unpoly's requests go through one HTTP client.
- [Motion](https://unpoly.com/learn/motion.md): Unpoly can animate a fragment update: the old content fades or slides out while the new content comes in.
- [Scripting](https://unpoly.com/learn/scripting.md): Unpoly pairs HTML elements with JavaScript behavior.
- [Backend integration](https://unpoly.com/learn/backend-integration.md): Unpoly works with any backend that renders HTML.
- [Advanced rendering](https://unpoly.com/learn/advanced-rendering.md): Every link, form, overlay or poll that Unpoly handles ends in the same render pass, and every render pass takes the same options.
- [Extensions](https://unpoly.com/learn/extensions.md): Unpoly works without extensions.

## API

- [API reference](https://unpoly.com/api.md): Every module, with its most important features.
- [`up.link`](https://unpoly.com/api/up.link.md): Features to follow links without a full page load.
- [`up.form`](https://unpoly.com/api/up.form.md): Features to submit and validate forms without a full page load.
- [`up.script`](https://unpoly.com/api/up.script.md): Features to attach JavaScript behavior to HTML elements whenever they enter the page.
- [`up.layer`](https://unpoly.com/api/up.layer.md): Features to open, close and look up overlays.
- [`up.fragment`](https://unpoly.com/api/up.fragment.md): The JavaScript API to render, look up and destroy page fragments.
- [`up.radio`](https://unpoly.com/api/up.radio.md): Features to update fragments without a user click.
- [`up.motion`](https://unpoly.com/api/up.motion.md): Features to animate fragment updates.
- [`up.status`](https://unpoly.com/api/up.status.md): Features to show which request is loading and which link leads to the current page.
- [`up.network`](https://unpoly.com/api/up.network.md): Features to make HTTP requests and cache their responses.
- [`up.event`](https://unpoly.com/api/up.event.md): Features to emit and observe DOM events.
- [`up.protocol`](https://unpoly.com/api/up.protocol.md): HTTP headers that let your server inspect and steer Unpoly's rendering.
- [`up.element`](https://unpoly.com/api/up.element.md): Low-level functions to access and change the DOM.
- [`up.viewport`](https://unpoly.com/api/up.viewport.md): Features to control scrolling and focus when fragments are updated.
- [`up.history`](https://unpoly.com/api/up.history.md): Features to update the browser history and handle the Back button.
- [`up.util`](https://unpoly.com/api/up.util.md): Helper functions for basic JavaScript values.
- [`up.framework`](https://unpoly.com/api/up.framework.md): Features to control when Unpoly boots.
- [`up.log`](https://unpoly.com/api/up.log.md): Features to log Unpoly's activity to the browser console.
- [Formats](https://unpoly.com/api/formats.md): Mini-languages used throughout the API.

## Changes

- [Changes](https://unpoly.com/changes.md): Release notes for every version of Unpoly.
- [Upgrading Unpoly](https://unpoly.com/changes/upgrading.md): How unpoly-migrate.js polyfills APIs that a new version renamed or removed.

## Support

- [Support](https://unpoly.com/support.md): Community support on GitHub Discussions, and professional support from the people who build Unpoly.

Unpoly is one JavaScript file with no build step, MIT-licensed.
