Source: https://seerepo.com/r/ampproject/amphtml/built
Markdown source: https://seerepo.com/r/ampproject/amphtml/built.md
Description: amphtml is a JavaScript repo built with Express and Preact. It connects to GitHub and makes its content with posthtml, dompurify, and markdown-toc.

# What is amphtml built with?

amphtml is a JavaScript repo built with Express and Preact. It connects to GitHub, makes its content with posthtml, dompurify, and markdown-toc, validates its data with Ajv and ajv-formats, is tested with @sinonjs/fake-timers, Chai, enzyme, ava, sinon, and 9 more, and deploys with morgan. It has 703,086 written lines, with 2,103 test files.

Read on November 8, 2026, at commit 3961d2e.

Repository: https://github.com/ampproject/amphtml

## Frontend (/)

### Styles

- **react-jss**: 22 files
- **[PostCSS](https://seerepo.com/uses/postcss)**: 2 files
- **[Autoprefixer](https://seerepo.com/uses/autoprefixer)**: 1 file
- **css-what**: 1 file
- **cssnano**: 1 file
- **JSS**: 1 file
- **postcss-import**: 1 file

### Interface

- **[react-day-picker](https://seerepo.com/uses/react-day-picker)**: 3 files
- **@use-gesture/react**: 1 file

## Backend (/)

### The base

- **[Express](https://seerepo.com/uses/express)**: 9 files

### Services

- **[GitHub](https://seerepo.com/uses/github)**: 3 files · [build-system/release-tagger/utils.js, line 7](https://github.com/ampproject/amphtml/blob/3961d2e011e1ce875554d3fd091870f21474d58e/build-system/release-tagger/utils.js#L7)

## Support (/)

### The base

- **[Preact](https://seerepo.com/uses/preact)**: 11 files

### Content

- **posthtml**: 8 files
- **[dompurify](https://seerepo.com/uses/dompurify)**: 1 file
- **markdown-toc**: 1 file

### Validation

- **[Ajv](https://seerepo.com/uses/ajv)**: 2 files
- **[ajv-formats](https://seerepo.com/uses/ajv-formats)**: 2 files

### Testing

- **@sinonjs/fake-timers**: 46 files
- **Chai**: 26 files
- **enzyme**: 25 files
- **ava**: 13 files
- **sinon**: 9 files
- **chai-as-promised**: 3 files
- **Mocha**: 3 files
- **fetch-mock**: 2 files
- **jsdom**: 2 files
- **sinon-chai**: 2 files
- **enzyme-adapter-preact-pure**: 1 file
- **karma**: 1 file
- **mocha-junit-reporter**: 1 file

### Deploy

- **[morgan](https://seerepo.com/uses/morgan)**: 1 file

### Tools

- **fast-glob**: 24 files
- **Babel**: 7 files
- **chokidar**: 7 files
- **esbuild**: 4 files
- **Prettier**: 4 files
- **tempy**: 4 files
- **@ampproject/remapping**: 2 files
- **del**: 2 files
- **@jridgewell/sourcemap-codec**: 1 file
- **babel-plugin-module-resolver**: 1 file
- **commander**: 1 file
- **ESLint**: 1 file
- **esprima**: 1 file
- **gulp-connect**: 1 file
- **html-minifier**: 1 file
- **ignore**: 1 file
- **jison**: 1 file
- **markdown-link-check**: 1 file
- **terser**: 1 file

### Other

- **kleur**: 56 files
- **minimist**: 56 files
- **fs-extra**: 39 files
- **date-fns**: 10 files
- **json5**: 6 files
- **dedent**: 3 files
- **multer**: 3 files
- **body-parser**: 2 files
- **klaw**: 2 files
- **minimatch**: 2 files
- **open**: 2 files
- **rrule**: 2 files
- **timeago.js**: 2 files
- **@babel/runtime**: 1 file
- **formidable**: 1 file
- **intersection-observer**: 1 file
- **json-stable-stringify**: 1 file
- **Lodash**: 1 file
- **SemVer**: 1 file
- **tar**: 1 file
- **traverse**: 1 file
- **util**: 1 file

## Support (validator/js/nodejs)

### Testing

- **Jasmine**: 1 file

### Tools

- **commander**: 1 file

### Other

- **colors**: 1 file
- **promise**: 1 file
- **util**: 1 file

## Other repos with a similar stack

- [TryGhost/Ghost](https://seerepo.com/r/TryGhost/Ghost/built): Express, Preact, react-day-picker, dompurify, Ajv, ajv-formats · [Compare](https://seerepo.com/compare/ampproject/amphtml/vs/TryGhost/Ghost)
- [RocketChat/Rocket.Chat](https://seerepo.com/r/RocketChat/Rocket.Chat/built): Express, GitHub, Preact, dompurify, Ajv, ajv-formats · [Compare](https://seerepo.com/compare/ampproject/amphtml/vs/RocketChat/Rocket.Chat)
- [novuhq/novu](https://seerepo.com/r/novuhq/novu/built): Express, PostCSS, react-day-picker, Ajv, ajv-formats · [Compare](https://seerepo.com/compare/ampproject/amphtml/vs/novuhq/novu)
- [langfuse/langfuse](https://seerepo.com/r/langfuse/langfuse/built): Express, react-day-picker, dompurify, Ajv, ajv-formats · [Compare](https://seerepo.com/compare/ampproject/amphtml/vs/langfuse/langfuse)
- [nrwl/nx](https://seerepo.com/r/nrwl/nx/built): Preact, PostCSS, Autoprefixer, postcss-import, Ajv · [Compare](https://seerepo.com/compare/ampproject/amphtml/vs/nrwl/nx)
- [paperclipai/paperclip](https://seerepo.com/r/paperclipai/paperclip/built): Express, dompurify, Ajv, ajv-formats · [Compare](https://seerepo.com/compare/ampproject/amphtml/vs/paperclipai/paperclip)

## Frequently asked questions

### What language is amphtml written in?

amphtml is written in JavaScript, with 703,086 written lines.

### What framework does amphtml use?

amphtml is built with Express and Preact.

### What services does amphtml use?

amphtml connects to GitHub.

The proof: [build-system/release-tagger/utils.js, line 7](https://github.com/ampproject/amphtml/blob/3961d2e011e1ce875554d3fd091870f21474d58e/build-system/release-tagger/utils.js#L7)

### Does amphtml have tests?

Yes. amphtml has 2,103 test files and is tested with @sinonjs/fake-timers, Chai, enzyme, ava, sinon, chai-as-promised, Mocha, fetch-mock, jsdom, sinon-chai, enzyme-adapter-preact-pure, karma, mocha-junit-reporter, and Jasmine.

### Which repos have a stack like amphtml's?

The ones that share most of its stack: TryGhost/Ghost, RocketChat/Rocket.Chat, and novuhq/novu.

## What is your repo built with?

Any public repo, with no account: https://seerepo.com/r/owner/repo/built, with the owner and name it has on GitHub.
