files.placeholder.com
Dummy files
Real files to test uploads, downloads, previews and parsers: documents, data, archives, images, audio and video, files of exact sizes, broken and mislabelled files, and every text encoding that breaks importers. All generated, all synthetic, the same bytes forever.
https://files.placeholder.com/<category>/<file>
https://files.placeholder.com/index.json every file with size, type and sha256
https://files.placeholder.com/documents/sample.pdfPDF 1.4, 3 pages: text, a table and an embedded JPEGhttps://files.placeholder.com/documents/sample.docxWord: headings, list, table, image, page breakhttps://files.placeholder.com/data/sample-10000-rows.csvCSV, 10,000 rowshttps://files.placeholder.com/sizes/10mb.binexactly 10,485,760 byteshttps://files.placeholder.com/edge/truncated.pdfa PDF cut off at 60%https://files.placeholder.com/index.jsonthe machine-readable cataloghttps://files.placeholder.com/browse them all
What's there
107 files in nine folders. This is a summary; index.json is the full list.
| Folder | Files |
|---|---|
documents/ | sample.pdf, .docx, .xlsx (2 sheets, formulas with cached values), .pptx (3 slides, speaker notes), .odt, .ods, .rtf, .txt, .md, .html |
data/ | sample.csv (quoted fields with commas, quotes and newlines), sample-semicolon.csv, sample-10000-rows.csv, .tsv, .json, .ndjson, .xml (namespace, CDATA), .yaml |
archives/ | sample.zip, .tar, .tar.gz, .tar.bz2, .tar.xz (the same five files in nested folders), sample.txt.gz |
images/ | PNG (also transparent, 100 × 100, 1920 × 1080), JPEG (baseline, progressive, 1920 × 1080), animated GIF, WebP (lossy, lossless), AVIF, SVG, BMP, TIFF, ICO |
audio/ | 2-second tone as WAV, MP3, Ogg Vorbis, Opus, FLAC and M4A; silence-1s.wav |
video/ | sample.mp4 (H.264 + AAC) and sample.webm (VP9 + Opus), 320 × 240, 2 s |
sizes/ | Exact byte counts: .bin from 1 KB to 100 MB; .zip 1 to 25 MB; .pdf, .png, .jpg at 1, 5 and 10 MB. 1 MB = 1,048,576 bytes. |
edge/ | Empty files, odd names, wrong extensions, truncated and corrupted files, invalid JSON/XML/CSV, password-protected ZIP and PDF |
encodings/ | The same text and the same CSV as UTF-8, UTF-8 with BOM, UTF-16 LE and BE, Latin-1, CRLF and CR line endings; mixed line endings; no final newline |
Edge cases
https://files.placeholder.com/edge/empty.txt0 bytes (alsoempty.csv, andempty.zip: a valid ZIP with no entries)https://files.placeholder.com/edge/file%20with%20spaces.txta space in the namehttps://files.placeholder.com/edge/%C3%BCn%C3%AFc%C3%B6d%C3%A9-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB-%E6%96%87%E4%BB%B6-%F0%9F%98%80.txtünïcödé-ファイル-文件-😀.txt; there is also a 240-byte file namehttps://files.placeholder.com/edge/png-named.jpgPNG bytes with a .jpg extension (andjpeg-named.png,pdf-without-extension)https://files.placeholder.com/edge/text-named.pdfplain text pretending to be a PDFhttps://files.placeholder.com/edge/truncated.zipno central directory (also truncated PDF, PNG and JPEG)https://files.placeholder.com/edge/corrupted-crc.zipdata doesn't match the CRC-32 (alsocorrupted.png)https://files.placeholder.com/edge/invalid.jsontrailing commas (alsoinvalid.xml,malformed.csv)https://files.placeholder.com/edge/password-protected.zipZipCrypto, passwordplaceholderhttps://files.placeholder.com/edge/password-protected.pdfRC4-128, user passwordplaceholder, owner passwordplaceholder-owner
In index.json, deliberately broken files have "broken": true, files whose bytes don't match their extension have actual_type, and the protected files list their password.
index.json
{"name": "files.placeholder.com", "count": 107, "total_size": 296038390,
"units": "Size labels use binary units: 1 KB = 1,024 bytes, 1 MB = 1,048,576 bytes.",
"files": [
{"path": "documents/sample.pdf", "url": "https://files.placeholder.com/documents/sample.pdf",
"size": 28462, "sha256": "c488dcf5…", "media_type": "application/pdf",
"category": "documents", "description": "PDF 1.4, 3 pages: text, table and an embedded JPEG."},
{"path": "edge/png-named.jpg", …, "media_type": "image/jpeg", "actual_type": "image/png"},
{"path": "edge/truncated.pdf", …, "broken": true},
…]}
# Download a file and check it is the one you expect
curl -fsSLO https://files.placeholder.com/sizes/5mb.zip
sha256sum 5mb.zip # compare with index.json
Behaviour
Content-Typefollows the file extension, which is the point of the mislabelled files:png-named.jpgis served asimage/jpeg.- Range requests work (
206 Partial Content), so resumable downloads can be tested. - Files are cached for a year (
immutable,no-transform, so proxies don't recompress them);index.jsonfor five minutes. - CORS is open (
Access-Control-Allow-Origin: *) and every response hasX-Placeholder: files.placeholder.com. - The text inside the files is synthetic. These are files for testing, not content to ship. placeholder-check flags links to
files.placeholder.comin a build.