---
"@type": Article
"@id": "https://helloloam.dev/nl/principes/standaard-een-pwa"
"@source": "https://helloloam.dev/data/article/pwa-by-default.json"
"@stamp": "2026-11-03T23:08:16+00:00"
about:
  "@type": DefinedTerm
  "@id": "https://helloloam.dev/data/definedterm/pwa-by-default.json"
  name: Standaard een PWA-app
  identifier: pwa-by-default
  inDefinedTermSet:
    "@type": DefinedTermSet
    "@id": "https://helloloam.dev/data/definedtermset/gives-any-site.json"
    name: Geeft elke site
    identifier: gives-any-site
author: {"@id":"https://helloloam.dev/#organization"}
datePublished: "2026-10-03"
description: Elke loam-site is installeerbaar. Een bezoeker zet hem op een telefoon of laptop, hij opent met een eigen icoon, en hij blijft werken zonder verbinding.
headline: Standaard een PWA-app
identifier: pwa-by-default
inLanguage: nl
publisher: {"@id":"https://helloloam.dev/#organization"}
url: "https://helloloam.dev/nl/principes/standaard-een-pwa"
---

# Standaard een PWA-app

[English](https://helloloam.dev/data/article/pwa-by-default.md) • [Nederlands](https://helloloam.dev/nl/data/article/pwa-by-default.md)

## Drie dingen maken een app

Een installeerbare site heeft een manifest nodig dat hem een naam geeft, een service worker die pagina's op het apparaat bewaart, en een pagina om te tonen als een pagina er niet is. In loam bouwt of onderhoudt niemand ze — de engine leidt alle drie af uit wat de site al over zichzelf zegt.

## Gemaakt uit wat de site zegt

`/manifest.json` komt uit de naam van de organisatie, het icoon van de site en de themakleuren. Verander de naam of het icoon op de site en de app volgt. Het manifest en de worker hebben geen themalaag: één verkeerde regel in een van beide breekt de installatie op elk apparaat, dus ze zijn van de engine. Wat een site vormgeeft, is de data waaruit ze gemaakt worden.

## Wat het apparaat bewaart

`/sw.js` bewaart wat een bezoeker opende en [loopt eens per dag de sitemap af](/nl/principes/seo-vriendelijk) om de rest te bewaren — de sitemap is al de lijst van wat bestaat, dus ook hier valt niets te onderhouden. Pagina's komen eerst van het netwerk en vallen terug op de kopie; assets met een versie blijven tot ze veranderen; formulieren worden nooit aangeraakt. Met een verbinding wint altijd de live pagina.

## Offline- en installatiepagina's

`/offline` rendert als al het andere weg is; `/install` legt per browser uit hoe je de site op een beginscherm zet. Een theme kan beide pagina's overnemen met een bestand met dezelfde naam. De site dringt geen installatie op — de browser weet wanneer iemand vaak genoeg terugkomt om er een te willen.

## Voor de bezoeker

Installeren is een eigenschap van het apparaat: geen account, niets over de persoon wordt ergens heen gestuurd, ongedaan gemaakt door het icoon te verwijderen. Een site op het beginscherm die opent zonder laadbalk en werkt in een tunnel — zonder store, review, tweede codebase of updatecyclus. Voor de eigenaar is het één ding minder dat bestaat.

## Wat het kost

[De worker cachet](/nl/principes/snelheid-door-caching), dus een bezoeker kan een pagina zien die een moment ouder is dan de live versie voordat de verversing binnenkomt — met een verbinding wint de live pagina. En het is een web-app, geen native app: geen pushmeldingen, geen camera, geen app store. Die ruil is bewust.
