Skip to the main text

Formats

Every format, and what you actually see

212 file extensions. Each row says what Foretaste puts on the screen and where it stops, because "supported" on its own is not a useful word.

This table is generated at build time from the extension's own detection table and its licence rules. It cannot say Foretaste opens something the code does not.

If you are working out whether any of this is for you, how the extension works is the shorter way in, and how to view a file without downloading it is the same thing without the table.

01

Documents

Format Opens What you see
PDF .pdf

The document, in your browser’s own PDF viewer, plus two things it cannot do: read the text out, and draw every page as a contact sheet so you can find the one you want.

Whatever your browser does. You cannot fill in a form or annotate a page here. Reading the text covers the first 20 pages a press: pages that carry text are read exactly, pages that are scans are recognised, and you are told which were which. A scanned page compressed as JPEG 2000 or JBIG2 draws too; those decoders are carried in the package rather than fetched.

Word document .docx

The document on its own paper. Foretaste reads the sheet size and margins the file states, lays the text out and measures where it actually falls, and draws numbered pages - with tables split between their rows and their header row repeated on each new page, and the page breaks the author asked for.

A .docx records no page breaks, only the paper, so the pages are where the text falls at this width and in these fonts - which is how a word processor decides too, and why another machine with other fonts may break a line differently. The running header and footer are part of Pro. Footnotes, endnotes and text boxes are not carried across. The old .doc format is named but not opened.

OpenDocument text .odt .ott

The same reading view a Word document gets: text, headings, lists, tables and images.

Content, not layout. No styles, fonts, column widths, pagination, headers or footers are read.

PowerPoint .pptx

The slides drawn, one at a time, from the deck’s own co-ordinates: text, pictures and shapes where the file puts them, in the theme’s colours, on the background the master draws, with the speaker notes underneath.

A likeness, not a copy. Solid and gradient fills, transparency, outlines, drop shadows, connectors and the styles a slide inherits from its layout and master all come from the file; animation and transitions do not, and a chart or a diagram is a labelled placeholder at the size and position the deck gave it. The old .ppt format is not opened.

OpenDocument presentation .odp .otp

The slides drawn, the same way a PowerPoint deck is and by the same renderer: shapes, pictures, colours and text where the file puts them, with the master page’s own background and furniture behind them.

A likeness, not a copy. Gradients, bitmap fills, shadows, connectors and the styles a slide inherits are read; animation is not, a custom shape is drawn as the box it occupies, and a chart is a labelled placeholder at the right size.

Word, Excel and PowerPoint in detail , or why a browser fetches a whole PDF first .

02

Spreadsheets and tables

Format Opens What you see
Excel workbook .xlsx .xls

Every sheet as a tab, with the real cell values in a scrollable grid, and any of them copied as a Markdown table. A large workbook is read off the main thread, so the tab stays answerable while it opens.

Values only. No charts, pivot tables, conditional formatting, and formulas are not recalculated.

OpenDocument spreadsheet .ods .ots

Every sheet as a tab, showing each cell as the author formatted it to appear.

Values only, and nothing is recalculated. No charts, and no styles.

CSV and TSV .csv .tsv

The same grid, with the delimiter and text encoding worked out for you, and a file of any size turns page by page, 200 rows at a time. Searching finds a row anywhere in the file, not only on the page in front of you, and goes to the page it is on. Any page copies as a Markdown table.

Paging costs one range request a page, so row 900,000 costs what row 1 costs. Finding where the pages begin reads the file once, because a CSV keeps no index. Searching the whole file reads it again, so it is a press with the size on it rather than something that runs as you type. A malformed quote can shift a row.

what an Excel workbook shows .

03

Archives

Format Opens What you see
ZIP archive .zip

Every file inside, as a folder tree with sizes, read from the archive’s index over byte ranges. You can open one file from inside it, or save just that file.

5,000 entries are listed, and it says when there are more. Archives inside archives go three levels deep.

TAR, GZIP and Zstandard .tar .gz .tgz .zst .tzst

The contents, listed and openable, the same way as a ZIP - including .zst and .tar.zst, which are decoded here rather than handed to anything.

These formats have no index, so the whole file is read, but none of it is held: it streams past and only the listing is kept. One file out of a plain .tar comes back in a single range request; inside gzip or Zstandard there is nothing to seek to, so a file is reached by reading from the start.

7z and RAR .7z .rar .bz2 .tbz2 .tbz .xz .txz .lzma .cab .iso .cpio .ar .lzh

The contents listed, and a single file extracted from inside.

Read whole, like TAR. A password-protected one asks for the password in the tab, before the listing, because these formats can encrypt the file names too; it stays in the tab and is sent nowhere. 7z has never been tested against a real archive, because nothing here can write one.

how a ZIP is listed without downloading it .

04

Text, code and data

Format Opens What you see
Text, data and code .txt .log .md .markdown .json .jsonl .ndjson .xml .yaml .yml .ini .conf .cfg .env .sql .toml .properties .editorconfig .js .mjs .cjs .ts .mts .cts .jsx .tsx .css .scss .sass .less .styl .html .htm .vue .svelte .astro .hbs .ejs .pug .coffee .map .py .pyi .pyw .rb .rake .gemspec .php .phtml .java .kt .kts .scala .sc .groovy .gradle .cs .csx .fs .fsx .vb .swift .m .mm .dart .go .rs .c .cpp .cxx .cc .h .hpp .hxx .ino .lua .pl .pm .r .jl .hs .lhs .ex .exs .erl .hrl .clj .cljs .cljc .edn .scm .lisp .el .ml .mli .elm .nim .zig .cr .d .pas .pp .f90 .f95 .asm .s .v .sv .vhd .sol .tcl .awk .vim .sh .bash .zsh .fish .ps1 .psm1 .psd1 .bat .cmd .mk .cmake .dockerfile .tf .tfvars .hcl .proto .graphql .gql .diff .patch .mdx .rst .adoc .asciidoc .org .tex .bib .lock

The file with syntax highlighting. Markdown renders, with a switch back to the source. JSON opens as a tree you can collapse, and copies either formatted or minified, whichever way it arrived. Show only the lines containing a word, and, on a log, only the levels you want, from a row of buttons carrying the count of each: INFO 312, WARN 12, ERROR 4.

The first 5,000,000 bytes and 20,000 lines, and it says when it stopped. The level buttons appear only on something shaped like a log, and read the first level word on each line, so an info line reporting a retry after an error stays an info line. Highlighting is not validation, and a .env file is shown as written.

Jupyter notebook .ipynb

The notebook as it was written, rather than as the JSON it is stored as: the prose, the code with highlighting, and what each cell printed, drew or failed with the last time somebody ran it - tables, plots and tracebacks in their place.

Nothing in it runs here. An output that would need a script to exist - a widget, an interactive chart - shows whatever plain text the notebook saved beside it, and a traceback is shown without its terminal colour codes. Maths is shown as written rather than typeset, and only the languages the highlighter carries are coloured. Notebooks saved in the format Jupyter used before 2015 are named and not drawn. It is one JSON document, so the whole file is read.

SQLite databases .sqlite .sqlite3 .db

Every table, its columns and its CREATE statement, out of the first 256 KB: the schema of a 500 MB database without downloading it.

Counting rows exactly walks every table, so it is a button rather than something that happens to you. No SQL engine is shipped, so nothing can be queried.

Parquet datasets .parquet

Row count, row groups, and every column with its type, read from the footer.

Schema only. No data page is ever read.

why a text or log link downloads instead of opening , or reading a SQLite schema from a link , or reading a Parquet footer .

05

Pictures and media

Format Opens What you see
Images .jpg .jpeg .png .gif .webp .avif .bmp .ico .svg .heic .heif

The picture, plus its dimensions, size, type and whether it has transparency. A JPEG’s Exif is read too: camera, lens, when it was taken, exposure. “Read the text” recognises any words in it, on your machine. HEIC photos are converted on your own machine and can be saved as JPG.

An SVG is drawn with scripting switched off, because an SVG can carry code. HEIC has not been tested against a real camera file.

Audio .mp3 .wav .m4a .ogg .flac

A player, streaming from the site it is already on.

Your browser decides which codecs play. There is no waveform.

Video .mp4 .webm .mov .m4v .mkv

A player. Only the part you actually watch is fetched.

Your browser decides which codecs play. An unusual one may not.

reading the text out of a picture , or what runs when you open an SVG, and what does not .

06

Books, fonts and subtitles

Format Opens What you see
EPUB books .epub

A contents list and one chapter at a time, with the images in place, and the chapter you are reading saved as plain text.

Images are capped at 40 per book and 8 MB. No reading position is remembered. A link from one part of a book to another is shown but cannot be followed, because the chapters are entries in a file rather than pages at an address, so Contents is the way between them. A link to a website opens in a new tab.

Fonts .ttf .otf .woff .woff2

A specimen in the actual typeface, a glyph grid, and the family name and licence.

The name and licence are read for TTF and OTF. A WOFF2 renders but stays anonymous, because its tables are Brotli-compressed.

Subtitles .srt .vtt .ass .ssa

The timed lines, in order.

ASS and SSA styling is stripped rather than reproduced.

07

Calendars and contacts

Format Opens What you see
Calendar invitations .ics .ifb

Every event in the file: what it is, when it is in your own time zone, where, who organised it and who else was asked.

A repeating event shows the rule it repeats by, not an expanded list of dates. An all-day date is never shifted into a time zone.

Contact cards .vcf .vcard

Name, organisation, phone numbers, emails, addresses and notes, each keeping the label the card gave it.

A photograph embedded in the card is not drawn.

reading an invitation without importing it .

08

Recognised, and deliberately not opened

Foretaste identifies these from their contents so it can tell you what the file really is, rather than shrugging at it. It will name the format and suggest what to do instead, and saving to disk still works:

  • The old binary Office formats: .doc, .xls and .ppt
  • Programs: Windows, Linux and macOS binaries, named rather than opened

Raw disc images (.img) and Avro files are not recognised at all. Foretaste will tell you it cannot open the file, without being able to say what it is. An .iso is opened: it is listed like any other archive.

09

How Foretaste works out what a file is

Not from the file name. Real download links look like download?id=18392, and servers mislabel files constantly. Foretaste reads four signals and trusts them in this order:

  1. The file's own leading bytes. One kilobyte is fetched and checked against the signatures formats begin with. Bytes do not lie the way names do.
  2. The Content-Type header, when the server sends a specific one. application/octet-stream counts as no answer.
  3. The filename in Content-Disposition, which is where the real name usually lives.
  4. The extension in the address, last, because it is the weakest of the four.

One deliberate exception: a container several formats share yields to the filename. A .docx genuinely is a ZIP, and telling you so would be true and useless.

A ZIP gets special treatment beyond detection, see how a ZIP is listed without downloading it, and where those requests go (to the file's own website, and nowhere else). The same four signals are what let Foretaste say what a file really is when its name disagrees.