An open API service indexing awesome lists of open source software.

https://github.com/overbrowsing/wasteback-machine

JavaScript library for analysing archived web pages.
https://github.com/overbrowsing/wasteback-machine

internet-archive memento wayback-machine web-archiving website-analysis

Last synced: 18 days ago
JSON representation

JavaScript library for analysing archived web pages.

Awesome Lists containing this project

README

          

# Wasteback Machine

[![NPM version](https://img.shields.io/npm/v/@overbrowsing/wasteback-machine.svg)](https://www.npmjs.com/package/@overbrowsing/wasteback-machine)
[![npm](https://img.shields.io/npm/dm/@overbrowsing/wasteback-machine.svg)](https://www.npmtrends.com/@overbrowsing/wasteback-machine)
[![License](https://img.shields.io/npm/l/@overbrowsing/wasteback-machine.svg)](https://tldrlegal.com/license/apache-license-2.0-(apache-2.0))

## Overview

Wasteback Machine is a JavaScript library for analysing archived web pages, measuring their size and composition to enable retrospective, quantitative web research.

## Features

- **Multi-archive support:** [Supports 20+ web archives](#supported-web-archives) and is [extensible to additional archives](#adding-web-archives).
- **Aggregate mementos:** Retrieve memento-datetimes for a target URL from an archiveโ€™s CDX server.
- **Analyse page composition:** Break down archived web pages by resource type, including HTML, stylesheets, scripts, images, etc.
- **Calculate size metrics:** Compute total and per-type sizes, including counts and bytes.
- **Generate resource inventory:** Optionally produce an inventory of all resources with metadata.
- **Completeness scoring:** Assess how fully an archived web page was retrieved.
- **CLI utility:** Analyse archived web pages [directly from the command line](#cli).

## Installation

```sh
npm i @overbrowsing/wasteback-machine
```

## Usage

Wasteback Machine provides two functions:

1. **`getMementos`**: Fetch all memento-datetimes from the CDX server of a [supported web archive](#supported-web-archives) for a given URL.
2. **`analyseMemento`**: Analyses the size and composition of an archived web page from a [supported web archive](#supported-web-archives).

### 1. Fetch Available Memento-datetimes (`getMementos`)

Fetch all memento-datetimes for https://nytimes.com, from the Internet Archive [(๐Ÿ†” = ia)](#supported-web-archives).

```javascript
import { getMementos } from "@overbrowsing/wasteback-machine";

const mementos = await getMementos(
"ia", // Web archive ID (๐Ÿ†” = ia, Internet Archive)
"https://nytimes.com", // Target URL
);

console.log(mementos);
```

#### Example Output

```javascript
[
'19961112181513', '19961121230155', '19961219002950', '19961220073509',
'19961226135029', '19961228014508', '19961230230427', '19970209220858',
'19970303103041', '19970414192930', '19970414210143', '19970415180120',
... 688983 more items
]
```

### 2. Analyse An Archived Web Page (`analyseMemento`)

Analyse the archived snapshot of https://nytimes.com, November 12, 1996, from the Internet Archive [(๐Ÿ†” = ia)](#supported-web-archives).

> [!TIP]
> If you provide a full 14-digit datetime (`YYYYMMDDHHMMSS`) using [`getMementos`](#1-fetch-available-memento-datetimes-getmementos), Wasteback Machine skips the TimeGate (URI-G) lookup, improving performance.

```javascript
import { analyseMemento } from "@overbrowsing/wasteback-machine";

const mementoData = await analyseMemento(
"ia", // Web archive ID (๐Ÿ†” = ia, Internet Archive)
"https://nytimes.com", // Target URL
"19961112", // Target memento-datetime (YYYYMMDDhhmmss); minimum input: YYYY
{ includeResources: true } // Resource list (true/false)
);

console.log(mementoData);
```

#### Example Output

```javascript
{
target: {
url: 'https://nytimes.com',
datetime: '19961112'
},
memento: {
url: 'https://web.archive.org/web/19961112181513if_/https://nytimes.com',
datetime: '19961112181513',
},
archive: {
name: 'Internet Archive (Wayback Machine)',
organisation: 'Internet Archive',
country: 'United States of America',
continent: 'North America',
url: 'https://web.archive.org',
},
sizes: {
html: { bytes: 1653, count: 1 },
stylesheet: { bytes: 0, count: 0 },
script: { bytes: 0, count: 0 },
image: { bytes: 46226, count: 2 },
video: { bytes: 0, count: 0 },
audio: { bytes: 0, count: 0 },
font: { bytes: 0, count: 0 },
flash: { bytes: 0, count: 0 },
plugin: { bytes: 0, count: 0 },
data: { bytes: 0, count: 0 },
document: { bytes: 0, count: 0 },
other: { bytes: 0, count: 0 },
total: { bytes: 47879, count: 3 }
},
completeness: '100%',
resources: [
{
url: 'https://web.archive.org/web/19961112181513im_/http://www.nytimes.com/index.gif',
type: 'image',
size: 45259
},
{
url: 'https://web.archive.org/web/19961112181513im_/http://www.nytimes.com/free-images/marker.gif',
type: 'image',
size: 967
}
]
}
```

## Supported Web Archives

Each supported web archive has a unique web archive ID (๐Ÿ†”) required for API calls. The table also indicates which functions each archive supports.

| Web Archive | Organisation | ๐Ÿ†” | [`getMementos`](#1-fetch-available-memento-datetimes-getmementos) | [`analyseMemento`](#2-analyse-an-archived-web-page-analysememento) |
|--------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------|---------------------------------------------|------------------------------------------------------------------ |--------------------------------------------------------------------|
| [Arquivo.pt](https://arquivo.pt) | ๐Ÿ‡ต๐Ÿ‡น FCCN/FCT | [arq](/src/archives/arq/arq.js) | โœ“ | โœ“ |
| [National Library and Archives of Quebec (BAnQ) Web Archiving](https://www2.banq.qc.ca/collections/collections_patrimoniales/archives_web) | ๐Ÿ‡จ๐Ÿ‡ฆ National Library and Archives of Quebec (BAnQ) | [banq](/src/archives/banq/banq.js) | โœ• | โœ“ |
| [Columbia University Libraries Web Archives](https://library.columbia.edu/collections/web-archives) | ๐Ÿ‡บ๐Ÿ‡ธ Columbia University Libraries | [cul](/src/archives/cul/cul.js) | โœ“ | โœ“ |
| [Webarchiv](https://webarchiv.cz) | ๐Ÿ‡จ๐Ÿ‡ฟ National Library of the Czech Republic | [cz](/src/archives/cz/cz.js) | โœ“ | โœ“ |
| [European Union Web Archive](https://op.europa.eu/en/web/euwebarchive) | ๐Ÿ‡ช๐Ÿ‡บ European Union | [euwa](/src/archives/euwa/euwa.js) | โœ“ | โœ“ |
| [Estonian Web Archive](https://veebiarhiiv.digar.ee) | ๐Ÿ‡ช๐Ÿ‡ช National Library of Estonia | [ewa](/src/archives/ewa/ewa.js) | โœ“ | โœ“ |
| [Government of Canada Web Archive](https://webarchiveweb.bac-lac.canada.ca) | ๐Ÿ‡จ๐Ÿ‡ฆ Library and Archives Canada | [gcwa](/src/archives/gcwa/gcwa.js) | โœ“ | โœ“ |
| [Croatian Web Archives (HAW)](https://haw.nsk.hr) | ๐Ÿ‡ญ๐Ÿ‡ท National and University Library in Zagreb | [haw](/src/archives/haw/haw.js) | โœ“ | โœ“ |
| [Internet Archive (Wayback Machine)](https://web.archive.org) | ๐Ÿ‡บ๐Ÿ‡ธ Internet Archive | [ia](/src/archives/ia/ia.js) | โœ“ | โœ“ |
| [Icelandic Web Archive (Vefsafn.is)](https://vefsafn.is) | ๐Ÿ‡ฎ๐Ÿ‡ธ National and University Library of Iceland | [iwa](/src/archives/iwa/iwa.js) | โœ“ | โœ“ |
| [Library of Congress Web Archive](https://loc.gov/web-archives) | ๐Ÿ‡บ๐Ÿ‡ธ Library of Congress | [loc](/src/archives/loc/loc.js) | โœ• | โœ“ |
| [National Library of Ireland Web Archive](https://nli.ie/collections/our-collections/web-archive) | ๐Ÿ‡ฎ๐Ÿ‡ช National Library of Ireland | [nliwa](/src/archives/nliwa/nliwa.js) | โœ“ | โœ“ |
| [National Library of Medicine](https://archive-it.org/organizations/350) | ๐Ÿ‡บ๐Ÿ‡ธ National Library of Medicine | [nlm](/src/archives/nlm/nlm.js) | โœ“ | โœ“ |
| [National Records of Scotland Web Archive](https://webarchive.nrscotland.gov.uk) | ๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ National Records of Scotland | [nrs](/src/archives/nrs/nrs.js) | โœ“ | โœ“ |
| [Norwegian Web Archive](https://nb.no/en/collection/web-archive) | ๐Ÿ‡ณ๐Ÿ‡ด National Library of Norway | [nwa](/src/archives/nwa/nwa.js) | โœ“ | โœ“ |
| [New Zealand Web Archive](https://webarchive.natlib.govt.nz) | ๐Ÿ‡ณ๐Ÿ‡ฟ National Library of New Zealand | [nzwa](/src/archives/nzwa/nzwa.js) | โœ“ | โœ“ |
| [The Web Archive of Catalonia (Padicat)](https://padicat.cat) | ๐Ÿ‡ช๐Ÿ‡ธ Library of Catalonia | [padicat](/src/archives/padicat/padicat.js) | โœ“ | โœ“ |
| [PRONI Web Archive](https://webarchive.proni.gov.uk) | ๐Ÿ‡ฌ๐Ÿ‡ง The Public Record Office of Northern Ireland | [proni](/src/archives/proni/proni.js) | โœ“ | โœ“ |
| [Smithsonian Institution Archives](https://siarchives.si.edu) | ๐Ÿ‡บ๐Ÿ‡ธ Smithsonian Libraries and Archives | [sia](/src/archives/sia/sia.js) | โœ“ | โœ“ |
| [Spletni Arhiv](https://arhiv.nuk.uni-lj.si) | ๐Ÿ‡ธ๐Ÿ‡ฎ National and University Library of Slovenia | [slo](/src/archives/slo/slo.js) | โœ• | โœ“ |
| [Australia Web Archive (Trove)](https://webarchive.nla.gov.au) | ๐Ÿ‡ฆ๐Ÿ‡บ National Library of Australia | [trove](/src/archives/trove/trove.js) | โœ• | โœ“ |
| [UK Government Web Archive (UKGWA)](https://nationalarchives.gov.uk/webarchive) | ๐Ÿ‡ฌ๐Ÿ‡ง The National Archives | [ukgwa](/src/archives/ukgwa/ukgwa.js) | โœ“ | โœ“ |
| [University of North Texas Web Archives](https://digital.library.unt.edu/explore/collections/untweb) | ๐Ÿ‡บ๐Ÿ‡ธ University of North Texas University Libraries | [untwa](/src/archives/untwa/untwa.js) | โœ“ | โœ“ |
| [York University Digital Library](https://digital.library.yorku.ca) | ๐Ÿ‡จ๐Ÿ‡ฆ York University Libraries | [yudl](/src/archives/yudl/yudl.js) | โœ“ | โœ“ |

### Adding Web Archives

Wasteback Machine can support additional web archives if they meet the following criteria:

1. Provide a CDX server API (required for [`getMementos`](#1-fetch-available-memento-datetimes-getmementos)).
2. Support the [Memento Protocol (RFC7089)](https://datatracker.ietf.org/doc/html/rfc7089) (required for [`analyseMemento`](#2-analyse-an-archived-web-page-analysememento)).
3. Support replay state modifiers ([URL Rewrite Type Modifier](https://pywb.readthedocs.io/en/master/manual/rewriter.html?highlight=modifiers#url-rewrite-type-modifier)) endpoints for both:
- Raw content ([see example](https://web.archive.org/web/20131001001332id_/https://www.bbc.co.uk)).
- Navigational toolbars suppressed ([see example](https://web.archive.org/web/20131001001332if_/https://www.bbc.co.uk)).

To request support for an archive that meets these criteria, [submit an issue](https://github.com/overbrowsing/wasteback-machine/issues/new?template=add-new-web-archive.md) using the template.

## CLI

Wasteback Machine CLI lets you analyse an archived web page to view its size, composition, and estimated emissions using [CO2.js](https://developers.thegreenwebfoundation.org/co2js/overview) and the [Sustainable Web Design Model](https://sustainablewebdesign.org/estimating-digital-emissions).

### Quick Start

After [installation](#installation), start the CLI:

```sh
npx cli
```

### CLI Prompts

```sh
1. Enter web archive ID ('help' to list archives or [Enter โ†ต] = Internet Archive):
2. Enter URL to analyse:
3. Enter target year (YYYY):
4. Enter target month (MM or [Enter โ†ต] = 01):
5. Enter target day (DD or [Enter โ†ต] = 01):
```

#### Example Output

```sh
________________________________________________________

MEMENTO INFO

Memento URL: https://web.archive.org/web/19961112181513if_/https://nytimes.com
Web Archive: Internet Archive (Wayback Machine)
Organisation: Internet Archive
Website: https://web.archive.org

________________________________________________________

PAGE SIZE

Data: 46.76 KB
Emissions: 0.014 g COโ‚‚e
Completeness: 100%

________________________________________________________

PAGE COMPOSITION

HTML
Count: 1
Data: 1653 bytes (3.5%)
Emissions: 0.000 g COโ‚‚e

IMAGE
Count: 2
Data: 46226 bytes (96.5%)
Emissions: 0.013 g COโ‚‚e

________________________________________________________
```

## Credits

Developed by the [Overbrowsing Research Group](https://overbrowsing.com) at the [Institute for Designย Informatics, The University of Edinburgh](https://designinformatics.org/portfolio-item/wasteback-machine), with support in part from the [European Association for Digital Humanities (EADH)](https://eadh.org).

## Citing

Results generated with Wasteback Machine may be freely cited, quoted, analysed, or republished with attribution to 'Wasteback Machine'. No special permission is required for academic, journalistic, or personal use.

A publication related to this project appeared in the Proceedings of iConference 2026 ([view PDF](https://publicera.kb.se/ir/article/view/64185/51902)). Please cite as:

> Mahoney, D. (2026). Wasteback Machine: a method for quantitative measurement of the archived web. Information Research an International Electronic Journal, 31 (iConf), 448โ€“464. https://doi.org/10.47989/ir31iConf64185

```bib
@article{Mahoney_2026,
author = {Mahoney, David},
title = {Wasteback Machine: a method for quantitative measurement of the archived web},
journal = {Information Research: An International Electronic Journal},
volume = {31},
number = {iConf},
pages = {448-464},
year = {2026},
month = {Mar},
url = {https://publicera.kb.se/ir/article/view/64185},
doi = {10.47989/ir31iConf64185}
}
```

## Licenses

Wasteback Machine is licensed under [Apache 2.0](https://tldrlegal.com/license/apache-license-2.0-(apache-2.0)). For full licensing details, see the [LICENSE](/LICENSE) file.

Use of Wasteback Machine is subject to the terms, policies and licenses of each respective [supported web archive](#supported-web-archives).

## Terms

All results generated by Wasteback Machine are provided "as-is" without warranties of any kind, express or implied, including but not limited to accuracy, completeness, or reliability. The authors and contributors accept no liability for any errors, omissions, or consequences arising from the use of this software or the results it produces.