viewhack

Open any file in your browser. Nothing is uploaded.

Drop a file and viewhack reads its first bytes to work out what it really is, whatever its name says. SQLite and Microsoft Access (.mdb, .accdb) databases, CSV, Parquet and JSON files, SPSS and Stata datasets (.sav, .dta) with their value labels, MATLAB .mat files with every variable saved as CSV, notebooks, browser network logs (.har) with the cookies and tokens in them found and removed, network captures from Wireshark or tcpdump (.pcap, .pcapng) with every host, DNS lookup and conversation in them, Windows event logs (.evtx) with their logons and service installs, AI model files (.gguf, .safetensors, PyTorch .pt and .bin, pickles and NumPy arrays) with every tensor and every import loading them would run, PDF files with everything they hide (embedded files, JavaScript, form fields, edits made after the first save, who signed them), the document inside a signed .p7m file (an Italian FatturaPA e-invoice laid out as an invoice) and who signed it, Excel and Word files, PowerPoint decks, PSDs and GIMP .xcf images, fonts, 3D models, 3D printer G-code with its toolpath, print time and filament, e-mails and Outlook .pst and .ost data files, the winmail.dat attachments Outlook sends, calendar invitations, phone contacts (.vcf), Apple Wallet passes (.pkpass) with a barcode you can scan from the screen, EPUBs, FictionBook .fb2 and Kindle .mobi/.azw3 books, comic books (.cbz, .cbr, .cb7), photos with their EXIF and GPS data (camera RAW too), the DICOM scans from a hospital CD, ZIP, 7z and RAR archives, .torrent files (every file inside, before you download), video and audio files, programs, Windows installers (.msi) with every file and custom action, Windows shortcuts (.lnk) with what they really run, Android apps (.apk), Java .class and .jar files, certificates and keys, GPS tracks from a watch or bike computer (GPX, FIT, TCX, KML), map shapefiles (.shp with its .dbf, or zipped) from a government open-data portal, Apple .plist files and provisioning profiles, MIDI files (.mid, .kar, .rmi), subtitle files (.srt, .vtt, .ass), Apple Pages, Numbers and Keynote files, XPS and OXPS documents, Visio drawings (.vsdx), Adobe Illustrator .ai artwork, EPS files (their stored preview, size and fonts), whole mailboxes (.mbox) from Google Takeout or Thunderbird, mind maps from XMind, FreeMind, Freeplane and MindManager, and DXF drawings from CAD programs and laser cutters open right here in a full viewer. More than 50 other formats are named, with what usually opens them.

The file is read by this tab only. It is never sent anywhere.

Opens here today

SQLite databases

.db, .sqlite, .sqlite3 and app files that are SQLite inside (Lightroom .lrcat, Anki .anki2, GeoPackage .gpkg, MBTiles).

Every table with its row count and CREATE statement, rows you can scroll and sort, and a read-only SQL box.

Microsoft Access databases

An old .mdb (Access 97 to 2003) or .accdb (Access 2007 and later) opened with no Access installed: every table with its row count, rows you can sort and search, dates and currency as Access shows them.

Save one table or all of them as CSV, and the files kept in Attachment and OLE Object fields. A database encrypted with a password is named, not opened.

CSV, TSV and delimited text

Comma, tab, semicolon or pipe, detected for you, with the header row and each column's type.

Built for exports of hundreds of MB: it counts every row (Excel stops at 1,048,576) without freezing the tab.

Excel and OpenDocument spreadsheets

.xlsx, .xlsm, .xlsb, Excel 97–2003 .xls and LibreOffice .ods, without Excel: every sheet as a tab, hidden and very hidden sheets included and marked.

Tap a cell to see its value and its formula (=SUM(B2:B9)). Merged ranges and dates are shown, and any sheet saves as CSV. Macros never run.

SPSS and Stata data files (.sav, .zsav, .dta)

A survey or research dataset without an SPSS or Stata licence: the cases as a table, and every variable with its label, value labels (1 = Male, 2 = Female), missing-value codes and format.

Switch between codes and labels, and save the whole file as CSV either way. Compressed .sav, .zsav and Stata 10 to 18 files (formats 114 to 119) are read by viewhack's own code.

MATLAB .mat files

A .mat file opened without MATLAB: every variable with its class, size and bytes, matrices as a table (N-D arrays slice by slice), text, structs and cell arrays as a tree, sparse matrices as triplets.

Save any matrix as CSV at full precision, or the whole file as JSON. Level 4, v5, v6 and compressed v7 files; v7.3 is recognised and explained.

Bank statements (.ofx, .qfx, .qif)

The OFX, Quicken QFX or QIF file your bank exported, without Quicken: each account with its balances and statement period, and every transaction in a table you sort and filter, with money in, out and net for the rows shown.

Save those rows as CSV or Excel .xlsx. Account numbers stay masked to the last 4 digits; a QIF file's MM/DD or DD/MM date order is worked out and can be switched.

Word and OpenDocument documents

.docx, .docm, .dotx, old Word 97–2003 .doc, Rich Text .rtf and LibreOffice .odt, without Word: the text with its tables and pictures (headings and lists too, in all but .doc), each picture savable.

Every comment and tracked change with its author and date, who wrote and last saved the file, and its word and page counts. Remote pictures and template links are listed, never loaded.

PowerPoint and OpenDocument presentations

.pptx, .pptm, .potx and LibreOffice .odp, without PowerPoint: every slide in order with its title, bullets, tables and pictures, and the speaker notes under it. Hidden slides are flagged. Old PowerPoint 97–2003 .ppt and .pps files show their slide text, notes and pictures.

Save every picture, video and sound in the deck, all the text and notes as one file, and each chart's numbers as CSV. The fonts are listed as embedded or not.

Apple Pages, Numbers and Keynote files

A .pages, .numbers or .key file from a Mac or iPhone, on Windows, Android or Linux: the Pages text with copy and .txt export, every Keynote slide with its speaker notes, and each Numbers table as a grid you can save as CSV.

The preview picture Apple saves inside every file, and every picture and movie in it. From an older iWork '09 file, its thumbnail and embedded PDF.

XPS and OXPS documents

An .xps or .oxps file from “Microsoft XPS Document Writer” or a scanner, on a Mac, Chromebook, phone or a Windows PC without the XPS Viewer: every page drawn with the document's own fonts.

Search the text across all pages with hits highlighted, copy it or save it as .txt, and save any page as PNG.

Visio drawings (.vsdx)

A network diagram, floor plan or flowchart saved by Visio 2013 or later, without a Visio licence: every page drawn with its stencil shapes, connectors and arrows, text and pictures, with pan and pinch-zoom.

Search every shape's text across the pages, read its shape data fields, and save a page as SVG or PNG or all the text as .txt. An old .vsd is named, with a way to convert it.

Microsoft Publisher files (.pub)

A flyer, newsletter or brochure from Publisher 98 to 365, without Publisher: all its text story by story, to copy or save as .txt, and every picture stored in it, each to save.

The fonts it names, its title, author and dates, and the small first-page thumbnail Publisher saved. Pages are not laid out; a .pub that is an SSH key goes to the key viewer.

Parquet files

Schema with physical and logical types, every row group with its size and codec, and the rows.

Snappy, gzip, zstd, brotli and LZ4 are decoded; rows are read from the file only as you scroll.

Arrow, Feather and Avro files

Arrow IPC files and streams, Feather v2 (LZ4 or Zstandard compressed, as pandas writes it) and Avro containers (null, deflate or snappy) as a table, with the schema, row count and batch or block count.

Nested records split into dotted columns such as address.city, lists shown as JSON, and the whole file saved as CSV or JSON.

AI model files: GGUF, safetensors, PyTorch, pickle, NumPy

A model downloaded from a hub, opened without loading it: a GGUF's architecture, context length, quantisation, tokenizer and chat template, and every tensor with its shape and type in any of the formats.

A .pt, .bin, .ckpt or .pkl is a Python pickle that can run code when loaded: every import it would perform is listed, and anything like os.system is flagged in red. Nothing is run.

JSON, JSON Lines and Jupyter notebooks

A collapsible tree for JSON files of hundreds of MB, a copyable path for any value ($.items[42].name) and a search of every key and value.

.jsonl and .ndjson as a table of records with the malformed lines named, .ipynb notebooks with their saved outputs (nothing runs), and .har network logs as a tree.

Jupyter notebooks (.ipynb)

An .ipynb read as it was saved, without Jupyter: Markdown and maths rendered, highlighted code with each In [n], and its charts, pandas tables and coloured tracebacks. Nothing runs.

A summary with the kernel, cell counts and largest outputs, a warning when cells were run out of order, and Save as HTML, the code as a .py, and every chart as PNG.

Browser network logs (.har)

The HAR file a support desk asks for: every request with its status, size and a timing waterfall, the failures, the slowest five and every domain.

Lists the session cookies, Authorization headers, API keys, tokens, JWTs (decoded) and passwords in it, and saves a cleaned copy with them removed.

Network captures (.pcap, .pcapng)

A Wireshark or tcpdump capture without Wireshark: every packet in a table you can filter, with each one's layers and bytes, saved as CSV.

The DNS lookups and their answers, the web hosts named in TLS and HTTP, and every conversation and endpoint with its packet and byte counts.

Windows event logs (.evtx)

A System, Security or Application log copied off a Windows PC, read on a Mac, Linux or a phone: every record with its time, Event ID, level, provider and event data, filtered and saved as CSV.

The full XML of any record, and the logons, failed logons, new accounts, new processes, new services and cleared logs picked out.

Google Maps Timeline exports

The Timeline.json a phone exports, or Takeout's Records.json, Semantic Location History or the whole Takeout ZIP: every day's visits with arrival, departure and place, and its trips with activity and distance, the route drawn, top places by time and kilometres per activity per year.

Save the whole history or one day as GPX or KML, and the visits and trips as CSV. A 500 MB Records.json is read in a background worker, a piece at a time.

Spotify listening history

The ZIP from Spotify's “Download your data”, or its Streaming_History and StreamingHistory JSON files: hours listened, top 50 artists, songs, albums and podcasts by time or by plays, for all time or any year, and when in the day and week you listen.

Skip rate per song, first play of each artist, devices and countries; every stream and each list saved as CSV. A play counts at 30 seconds, and you can change that.

GPS tracks: GPX, FIT, TCX and KML

A run, ride or hike from a watch or bike computer: the route, an elevation profile, distance, moving time, climb, pace and per-km or per-mile splits, with heart rate, cadence and power where recorded.

Several files overlaid in different colours; points saved as CSV, and a Garmin .fit converted to GPX. No map is loaded: the route is drawn from its own coordinates.

Photoshop PSD and PSB

The flattened image at full size, width, height, colour mode and bit depth, and the layer tree with groups, hidden layers and opacity.

Click a layer to see its own pixels. Save the image or any layer as PNG, without Photoshop.

GIMP .xcf images

An .xcf from GIMP 1 to 3.2 (or .xcf.gz) without GIMP: the picture stacked from its visible layers, canvas size, bit depth and colour mode.

Every layer and group with a thumbnail and a show/hide switch, text layers' words, channel and path names, and the picture or any layer saved as PNG.

Adobe Illustrator files (.ai)

A logo or poster sent as .ai, without Illustrator: every artboard drawn sharply with zoom and pan, thumbnails, and the layers with on/off switches.

The fonts it uses and whether each is embedded, its colour mode, spot colours and swatches, and any artboard saved as PNG. Old PostScript .ai files are explained.

InDesign files (.indd, .idml)

An InDesign file without InDesign. From an .idml: page size in mm and inches, every story's text to copy or save as .txt, the fonts and swatches it uses, its styles, and a sketch of each spread.

Every linked image with the folder it was placed from, flagged when it is not in the file. From an .indd: the page previews it stores, the InDesign version that saved it, dates and edit history.

Sketch design files (.sketch)

A Sketch design without a Mac: the preview it stores, the Sketch version that saved it and the oldest that opens it, every page and artboard drawn as a wireframe, and the layer tree.

All the text to search and copy, the fonts and whether each is a system font, colours and shared styles with hex values, the embedded images to save, and its symbols and libraries.

Adobe XD files (.xd)

An XD design without XD: the preview picture it stores, every artboard with its size, and all the text per artboard with its font and size, ready to copy.

Colour swatches and character styles with hex values, which fonts this device is missing, every embedded image to save at full size, and where each prototype link leads.

Procreate artworks (.procreate)

A Procreate painting without an iPad: the full-size picture, canvas size and DPI, and every layer with its name, opacity, visibility and blend mode, each drawn on its own.

Save the picture and any layer as PNG, and play or save the recorded time-lapse video kept inside the file.

Krita and OpenRaster files (.kra, .ora)

A Krita painting without Krita: the full picture Krita stored, canvas size, DPI, colour model and bit depth, and the layer tree with groups, blend modes and opacity.

Show any paint layer on its own and save it, the picture or the thumbnail as PNG. Reads 8-bit, 16-bit and float layers.

EPS and PostScript files

An .eps logo or ad opened without Illustrator: the preview picture stored in the file (a TIFF, an EPSI bitmap or a WMF), clearly labelled as the stored preview, and saved as PNG.

Its size in millimetres, inches and points, the program and Illustrator version that made it, the PostScript level, the fonts it needs and whether each is embedded, and its spot colours.

Fonts: TTF, OTF, WOFF, WOFF2, TTC

Family, style, version, designer, licence and embedding rights, glyph count and the Unicode ranges it covers.

Every glyph drawn from its outline, and your own text typed in the font at six sizes. Save a WOFF2 web font as a desktop TTF or OTF, or any one font out of a .ttc/.otc collection.

AutoCAD drawings (.dwg)

A .dwg checked without AutoCAD: its version string (AC1015, AC1027, AC1032 …) with the AutoCAD releases that write it and the oldest AutoCAD and DWG TrueView that open it, the maintenance release and code page.

The preview AutoCAD stored when it saved the file, saved as PNG; for 2004-format files and later, the title, author, “last saved by”, dates, the AutoCAD build that saved it and the fonts and files it uses. It does not draw the drawing; it says how to get a DXF that the DXF viewer draws.

MicroStation drawings (.dgn)

A MicroStation V7 .dgn drawn without MicroStation: lines, shapes, arcs, circles, text and cells in the file's own colour table, zoom and pan, and a show/hide switch for each of its levels.

Its units (master, sub-units and UORs), global origin, extents, element counts by type, cell and reference file names; save the visible levels as SVG, or the drawing as PNG. A V8 file is recognised, with what opens it.

CorelDRAW files (.cdr)

A .cdr checked without CorelDRAW: the version that saved it (CorelDRAW 9, X3, X7, 2020 …) and the oldest CorelDRAW that opens it, from the file's own version number.

The preview CorelDRAW stored inside, saved as PNG; the fonts it names, its page count and embedded bitmaps; for X4 and later the title, author and dates and every part of the package. It does not draw the drawing; it names the free programs that do.

Windows pictures (.emf, .wmf)

An EMF, WMF or compressed .emz drawn without Office: the clip art, chart or diagram a Windows program saved, fitted to your screen and saved as PNG (1x or 2x) or as SVG paths.

Its size in millimetres and DPI, the fonts and text in it, every embedded bitmap (each savable) and a count of every record. EMF+ Dual files are drawn from their EMF copy; an EMF+-only file is named as such.

Blender files (.blend)

A .blend opened without Blender, plain or compressed: the Blender version and build that saved it, the thumbnail as a PNG, scenes with render engine and resolution, objects, collections, meshes with vertex and face counts, materials, cameras and lights.

Every texture marked packed inside or missing, packed images, fonts and sounds saved one by one or as a ZIP, and a warning for each other .blend file it links to.

SketchUp models (.skp)

A .skp or .skb checked without SketchUp: the version that saved it and the plain answer to “will my SketchUp open it?” (2020 and older need the same release or newer; since 2021 one format is shared).

The preview picture SketchUp stored, saved as PNG, the file size and any classification schemas such as IFC 2x3. The format is closed, so the 3D model itself is not drawn.

Minecraft schematics and NBT files

A .litematic, .schem, .schematic, structure .nbt or Bedrock .mcstructure read without the game: its size, Minecraft version, regions and author, and every block counted, with the counts in stacks of 64 and shulker boxes, saved as CSV.

Each layer from above in flat colours with the block named under your finger, saved as PNG, and the whole NBT tree with search. A level.dat shows the world's seed, game mode, spawn and last played.

3D models: STL, OBJ, GLB, glTF

Turn, zoom and pan the model with a mouse or a finger, switch to wireframe, and save the view as a PNG.

Triangle count, width × depth × height, surface area, open edges, and the volume of a watertight mesh, ready for a 3D print.

3D printer G-code (.gcode, .bgcode)

The toolpath of a sliced print, one layer at a time or all layers in 3D, coloured by wall, infill, support and the other features the slicer labelled. Prusa's binary .bgcode is unpacked too.

The slicer's print time estimate, filament in metres and grams, layer height and count, nozzle and bed temperatures, the embedded thumbnail and every setting, searchable.

E-mail: .eml files and pasted headers

Sender, recipients, subject and date in your time zone, the message with tracking pixels and every other remote image blocked, and attachments to download.

Each Received hop with its delay, and the SPF, DKIM and DMARC verdicts your provider recorded.

Outlook .msg e-mails

The message a Windows Outlook user forwarded to you, opened without Outlook: sender, recipients, date, and the text with tracking pixels blocked.

Every attachment saved byte for byte, attached e-mails opened in place, rich-text-only bodies saved as .rtf, and the Internet headers.

Mailboxes (.mbox, Google Takeout)

A whole Gmail Takeout export, a Thunderbird folder or an Apple Mail mailbox: every message listed with date, sender, subject, size and Gmail labels, read in slices so a 10 GB file works.

Search senders, subjects and bodies, sort, open any message with remote images blocked, save it as .eml, or save the list as CSV.

Outlook data files (.pst, .ost)

The .pst from an old job or an Outlook export, or the .ost cache from a dead PC, opened on a Mac, a Chromebook or Linux with no Outlook: the folder tree with item counts, each folder's items in a sortable list, and any e-mail's headers and text.

Read a few blocks at a time, so a 20 GB file opens as quickly as a small one. HTML bodies and attachments are the next slice.

winmail.dat and ATT00001.dat

The mystery attachment an Outlook user sends: the message text (its compressed RTF decompressed, or its HTML with remote images blocked), sender, date, and every file packed inside, each saved byte for byte or all at once as a .zip.

Attached messages open inside it, and meeting requests show their start, end and place.

Calendar files (.ics)

An invitation or a whole exported calendar from Google, Outlook or Apple, read without importing it into any account: every event in your own time zone, repeats expanded, the original zone beside each time.

Who was invited and who accepted, reminders, attachments listed, a searchable table, a CSV, and each event saved as its own .ics.

Contacts (.vcf vCard files)

An address book exported from a phone, Google, Outlook or iCloud as a searchable, sortable table, with each contact's full card and photo. Old vCard 2.1 files with accented names in ISO-8859-1 or quoted-printable decode correctly.

Contacts that share a phone number or e-mail address are flagged and merged if you ask; save as Google Contacts CSV, Outlook CSV, or one .vcf per contact.

WhatsApp chat exports

The .zip or .txt from WhatsApp's Export chat read as a conversation again, iPhone or Android, one person or a whole group: each sender in their own colour, notices as notes, photos, stickers, videos and voice notes where they were sent.

Search with a hit count, one person or a date range only, messages per person and the busiest day, and a copy saved as one offline HTML file or a CSV.

Anki decks

A shared .apkg deck or a .colpkg collection backup opened without Anki: its decks and subdecks, note types with their fields and card templates, and every note in a searchable table with its pictures and sounds.

The front and back of each card, study history when the file has it, a CSV per note type and all the media in one ZIP. The 2.1.50+ format is read past its “please update” placeholder.

Family trees (.ged)

A GEDCOM export from Ancestry, MyHeritage or any genealogy program, or an old one you inherited: every person in a searchable list, and each person with parents, spouses, marriages, children, events and the sources cited.

Ancestors and descendants up to ten generations, impossible dates and broken links in plain sentences, and a CSV of everyone. ANSEL accents, UTF-8, UTF-16 and GEDCOM 7 .gdz files read correctly.

Mind maps (XMind, FreeMind, MindManager)

A .xmind (XMind 8 or 2020 and later), a FreeMind or Freeplane .mm, or a MindManager .mmap opened without the program that made it: every sheet as a collapsible, searchable outline and a simple diagram, with notes, labels, markers in words, links, pictures and attached files.

Relationships and summaries listed, and the whole map saved as Markdown, OPML or indented text, so it opens in any outliner or mind-map app. A password-protected XMind file is recognised and said so.

What a PDF hides

Any PDF taken apart without opening it in a reader: its author, the programs that made it, the edit history some of them record, page sizes, encryption and permissions, and the first pages as thumbnails.

Embedded files to save, JavaScript shown as text and never run, actions that fire on opening, form fields with their values, every link, how many times it was changed after it was first saved, and who signed it and whether the signature still covers the whole file.

Signed .p7m files and FatturaPA invoices

The document inside a digitally signed .p7m (a PDF, an XML e-invoice, a Word file), saved under its own name or opened in its viewer here, also when the file came as base64 text or signed twice (.p7m.p7m).

Who signed it, with their tax code, the certificate's issuer and dates, the signing time and timestamp, and whether the content's hash still matches what was signed. An Italian e-invoice is laid out as an invoice, with its attachments.

Apple Wallet passes (.pkpass)

A boarding pass, concert ticket or coupon sent for Apple Wallet, opened on Windows, Android or a laptop: the card in its own colours with every field, the back of the pass, and the dates and places it is tied to.

The QR, PDF417, Aztec or Code 128 barcode is drawn large enough to scan from the screen, with its message as text and a PNG to save; the signing certificate is named.

Password-protected Office files

A locked .docx, .xlsx or .pptx, or a LibreOffice .odt, .ods or .odp, opened with the password you were given, on a Chromebook or phone with no Office. Decrypted in the tab, then shown in the Word, Excel or PowerPoint viewer.

Save a copy without the password. A wrong password gets one plain message; nothing is guessed, retried, stored or sent.

EPUB e-books

Title, author, language, publisher and cover, the nested table of contents, and each chapter with its own pictures and styles.

Previous and next chapter, a text-size control, and the book's scripts and remote images blocked. DRM-protected books are recognised and named.

FictionBook .fb2 and .fb2.zip books open there too, in windows-1251, KOI8-R, UTF-8 or UTF-16, with their series, footnotes and pictures.

Kindle books (.mobi, .azw3)

A DRM-free .mobi, .azw3, .azw or .prc file, from Project Gutenberg, an author's review copy or a Calibre export, read without a Kindle or Calibre: title, author, ISBN or ASIN, cover and the table of contents.

Every chapter with its pictures, a text-size control, search in the book, and the text or pictures saved as files. DRM-protected books are named, not opened.

Windows help files (.chm)

A program manual or e-book in Compiled HTML Help, read on a Mac, phone, Chromebook or Linux without a help viewer: its title, the contents tree, the index and a search over every page.

Each page with its pictures and working links, its scripts and ActiveX never run, nothing fetched from the internet. One page saved as HTML, or all pages as a ZIP.

Saved web pages (.webarchive, .warc)

A page saved by Safari on a Mac or iPhone, opened on Windows, Linux or Android: drawn from the file alone with its pictures and stylesheets, every file inside listed and savable, and saved as one .html any browser opens.

WARC and .warc.gz crawls too: every record with its headers and body, a filter, and archived pages drawn with the resources found in the same file. Scripts never run and nothing is fetched.

Comic books (.cbz, .cbr, .cb7)

A comic or manga read page by page without a comic reader app: pages in natural order (page2 before page10), fit to width or height, and two pages side by side with the cover and double pages on their own.

Swipe, tap or use the arrow keys, a thumbnail strip, right to left for manga, and the series, number and credits from ComicInfo.xml. A .cbr that is really a ZIP opens too.

HEIC and HEIF photos

iPhone photos shown upright and saved as JPEG or PNG, one or many at a time, without uploading them to a converter.

Capture time with its time zone, camera, and whether the photo gives away where it was taken. Uses the browser's own HEVC decoder, so it works in Safari and in Chrome or Edge on most recent computers.

JPEG XL, GIF frames and icon files

A .jxl photo that Chrome and Firefox will not show, decoded here and saved as PNG or JPEG. Every frame of a GIF with its delay and loop count, saved one by one or all at once as PNGs.

Every size and bit depth inside an .ico or .cur file (and a cursor's hotspot), each saved as PNG, and a BMP's header: DIB version, row order, depth, compression, palette.

Game textures (DDS, TGA, EXR, HDR)

A .dds from a game or mod with its DXGI format, every mip level and all six faces of a cube map, decoded from BC1 to BC7 and BC6H. A .tga with its RLE packets, origin and alpha.

OpenEXR and Radiance .hdr pictures with an exposure slider and the min, max and mean luminance. R, G, B and A on and off, a pixel probe, and Save as PNG of what you see.

Photo EXIF, GPS and camera RAW

JPEG, PNG, WebP, AVIF and TIFF: camera, lens, date taken with its time zone, exposure, and one plain line saying whether the photo carries a GPS location. Every Exif, XMP, IPTC and ICC tag in a searchable table.

A lossless JPEG copy without metadata, and for DNG, NEF, CR2, ARW and CR3 raw files the camera's embedded JPEG preview, shown and saved.

DICOM scans from a hospital CD

Drop the whole CD folder: CT, MRI, X-ray and ultrasound images are sorted into series by their own tags, with slice scrolling, drag for brightness and contrast, and every header tag in a searchable table.

Save one slice as a PNG, or a copy of the file with the patient's name, ID and birth date blanked. It shows the pictures; it does not read them.

FITS astronomy images and tables

A .fits, .fit or .fz frame from an astro camera or an archive: every HDU and header card, the image with an asinh, log or linear stretch and a histogram, colour from BAYERPAT raw frames, cube planes and the value of any pixel.

Save the stretched view as PNG and any table as CSV. RICE_1 and GZIP tile-compressed .fz files and .fits.gz open too.

ZIP, 7z, RAR and tar archives

The file tree of a .zip, .7z, .rar, .tar, .tar.gz, .tar.xz or .tar.bz2 (JAR and APK too) with each file's size, packed size, date and lock, without unpacking it. Also ISO disc images, Windows .cab files, and Linux .deb and .rpm packages with the scripts they run as root on install.

Tap one file to save it, or open it in place in the matching viewer. Archives inside archives open as folders; password ZIPs unlock in the page.

Mac disk images (.dmg)

A .dmg opened on Windows, Linux or a Chromebook: the files and folders of its HFS+ volume with sizes and dates, any one saved on its own, and each app inside with its name, bundle ID, version, minimum macOS and Intel or Apple silicon code.

Also its format (UDZO, UDBZ, ULFO …), compression per chunk, partitions, code signature and the licence text shown on mount. Encrypted and APFS images are named and refused.

Torrent files (.torrent)

Every file a .torrent will download, with sizes, before your client opens it: the folder tree, the v1 and v2 info hashes, a magnet link to copy, trackers, web seeds and the private flag.

Warnings for programs and scripts inside, double extensions such as .mp4.exe, and "1080p" releases with no video file. No tracker or peer is contacted.

Video and audio files

MP4, MOV, MKV, WebM, AVI, FLV, 3GP, MP3, M4A, AAC, WAV, AIFF, FLAC and Ogg: the codec of every track, and whether this browser can play it, measured, with the track that stops it named.

One line saying whether a phone video carries the place it was filmed, a frame saved as PNG, and MediaInfo's complete field list.

Flash games and animations (.swf)

An old .swf game, cartoon, e-learning module or banner played in the page by the Ruffle emulator, with networking switched off, and no Flash Player installed. ActionScript 1/2 plays best; some ActionScript 3 games do not run.

Before it plays: the Flash Player version it needs, stage size, frame rate, length, ActionScript 1/2 or 3, its fonts, sounds and video, and every web address written in it, as text.

Lottie and dotLottie animations (.json, .lottie)

A Lottie animation played in the page with play, pause, loop, 0.25× to 2× speed and a frame-by-frame scrubber, on a transparent, white or black background, and the current frame saved as a PNG at the animation’s own size.

Its size, frame rate, frames and duration, the Lottie version, every layer with its type and frames, images inside or missing, fonts and markers. Every animation in a .lottie, each savable as plain JSON. Expressions are not run.

Who signed an EXE or DLL

The name on a Windows program's signing certificate, its issuer, serial, validity and timestamp, and a real check that the file still matches what was signed. Works on a Mac, a Chromebook or a phone.

Architecture, compile date, imported DLLs and version details; for Linux ELF and macOS Mach-O files, every architecture and linked library. The file is never run.

Windows installers (.msi)

What an .msi would install before anyone runs it: product, version, publisher, ProductCode and who signed it, then every file with its install path, size and version, the registry values and the Windows services it adds.

Each custom action in words: runs a program, a DLL or a script, and whether as you or as SYSTEM. Every table saves as CSV; .msp patches and .mst transforms are identified.

Windows shortcuts (.lnk)

What a shortcut really launches: the resolved target, the full command line with hidden padding made visible, the working directory and icon, the volume, and the tracker block's machine name and MAC address.

Red flags for a disguise: a PowerShell -EncodedCommand (decoded), a document icon on a program, a hidden or minimised window, a network target. Everything exports as JSON.

Android apps (.apk)

Check an APK from outside Google Play before installing it: package name, version, minimum Android, and every permission it asks for with the dangerous ones first and a one-line meaning in Android's own words.

Exported components, the links it opens, native libraries by processor, and each signer certificate's SHA-256 fingerprint to compare with the developer's. .xapk, .apks and .apkm bundles too.

iPhone apps (.ipa)

Look inside an .ipa on Windows, Linux or a phone: name, bundle ID, version and build, minimum iOS, and every permission prompt in the app's own words with what it unlocks.

The provisioning profile's kind and expiry ("expires in 12 days"), its device count and entitlements, the signer certificate, whether the code is still App Store-encrypted, the icon and every file.

Browser extensions (.crx, .xpi)

Check a Chrome, Edge or Firefox extension before you install it: every permission in one plain sentence with a risk band, the sites it can read and change, and whether it updates from a store or from its developer's own server.

Its ID worked out from the .crx header's key, and its code searched for eval(, remote scripts and the outside hosts it names, each shown with the line it is on.

Java .class and .jar files

Which Java version a jar or class needs, read from every class file (multi-release jars included), so an UnsupportedClassVersionError gets a straight answer. The manifest's Main-Class, Maven libraries bundled inside, and the signer.

Each class: its fields and methods as Java signatures, annotations, searchable strings, and a javap-style bytecode listing. Nothing is decompiled or run.

WebAssembly modules (.wasm)

What a .wasm imports, grouped by module, with WASI flagged and its file, clock, random, socket and environment access listed; Emscripten, wasm-bindgen and Go glue named; and every export with its signature.

Also size by section, memories, the toolchain from the producers section, the strings in its data, and any function as WebAssembly text (WAT). The module is never run.

Certificates, CSRs and keys · GPS tracks (GPX, FIT, TCX, KML)

Who a certificate is for, who signed it and how many days it has left, with its names (SANs), key size, fingerprints and usages. A chain is checked link by link with real signature checks.

PEM, DER (.cer, .crt), CSRs, .p7b bundles and password-protected .p12/.pfx files, including the old 3DES and RC2 ones Windows and macOS export. A private key shows its type and size only.

Apple .plist files and provisioning profiles

A binary (bplist00) or XML plist as a searchable tree of typed keys and values: integers exact to 64 bits, dates in UTC and local time, data as hex and base64, key paths ready for PlistBuddy or plutil.

An iOS .mobileprovision's app ID, team, expiry with days left, entitlements, device count and developer certificates. Save any plist as JSON or as XML.

MIDI files (.mid, .kar, .rmi)

Every note on a zoomable piano roll, and each track's channel, General MIDI instrument, note count and lowest and highest note. The tempo map with every BPM change, time and key signatures, the length in seconds, and karaoke lyrics with their times.

Plays on a simple built-in synth (not the real instruments) and saves every note as CSV.

Subtitles (.srt, .vtt, .ass)

Every cue with its start, end, duration and text, searchable, with overlaps, zero-length cues, cues out of order and over-long lines flagged. UTF-8, UTF-16 and Windows-1252 files read correctly.

Shift every cue, or re-time them from two sync points to fix frame-rate drift, save as SRT or WebVTT, and watch the result on a video from your device.

CAD drawings (.dxf)

A DXF from AutoCAD, a laser or CNC job, an architect's floor plan or a parts supplier, drawn to fit the screen with pan and zoom: lines, polylines with their arcs, circles, splines, text, blocks, hatch outlines and dimensions.

Its layers with their colours and entity counts, each one switchable; the width and height in the file's own units; the AutoCAD version; and anything not drawn, listed by type. Saves the visible layers as SVG or PNG. A DWG goes to the DWG page, which says how to get a DXF.

Map shapefiles (.shp, .dbf, zipped)

Open-data map layers from a council, a mapping agency or Natural Earth, without installing QGIS: points, lines and polygons (holes included) drawn with pan and zoom, and the .dbf attribute table with its field types, searchable. Tap a shape to find its row, or a row to find its shape.

Text decoded in the table's own code page (from the .cpg or the header byte), the .prj checked for WGS 84 longitude and latitude, and the layer saved as GeoJSON or the table as CSV. A ZIP holding several shapefiles lists them to pick.

What happens to your file

JavaScript in this tab reads the file through the browser's File API, the same way a page shows you a photo before you post it. viewhack has no server that could receive it: the site is plain files, and none of the code that handles your file makes a network request with it. No copy is saved, not in storage and not in a cache, so closing the tab is the end of it.

The only network requests are the page itself, the viewer's own code the first time you open that kind of file (for SQLite, a 660 KB WebAssembly build of SQLite; for Photoshop files, an 810 KB PSD reader; for fonts, a 240 KB font parser; for 3D models, 2.3 MB of three.js; for Outlook messages, a 160 KB .msg reader; for spreadsheets, the 930 KB SheetJS reader; for Word and OpenDocument text, viewhack's own 110 KB document reader, plus for an old .doc the 150 KB compound-file reader from the .msg viewer and viewhack's own 36 KB .doc reader; for PowerPoint and OpenDocument presentations, viewhack's own 88 KB deck reader; for JSON, JSON Lines and notebooks, viewhack's own 63 KB reader; for photos, the 76 KB exifr tag reader and viewhack's own 61 KB photo reader, plus the 58 KB UTIF decoder for TIFF; for DICOM scans, the 32 KB dicom-parser and viewhack's own 60 KB scan reader; for 7z, RAR, CAB, .tar.xz and .tar.bz2 archives and password ZIPs, a 1 MB WebAssembly build of libarchive; for video and audio files, a 2.6 MB WebAssembly build of MediaInfo; for programs, viewhack's own 53 KB program reader; for Android apps, viewhack's own 52 KB APK reader and 23 KB page code, a 162 KB table of Android's permissions, the 73 KB certificate reader and the 31 KB ZIP reader from the e-book viewer; for GPS tracks, viewhack's own 68 KB track reader; for Apple property lists, viewhack's own 66 KB plist reader plus the 73 KB certificate reader for a profile's certificates; for MIDI files, viewhack's own 58 KB MIDI reader, piano roll and synth; for subtitles, viewhack's own 39 KB subtitle reader; for DXF drawings, viewhack's own 72 KB DXF reader and drawing view; for map shapefiles, viewhack's own 39 KB shapefile and dBASE reader and 30 KB map view, plus the 91 KB fflate unzipper (MIT) for a zipped one; for SPSS and Stata files, viewhack's own 50 KB readers and table view, plus fflate for a zlib-compressed .zsav; for PDF files, viewhack's own 80 KB PDF structure reader and report, the certificate page's 73 KB certificate reader, fflate and the 1.8 MB PDF.js (Apache-2.0); for Apple Wallet passes, viewhack's own 55 KB pass reader and card drawing with the certificate page's 73 KB certificate reader, fflate to unzip the pass and the 2.3 MB bwip-js barcode library (MIT); for iPhone apps, fflate to unzip the .ipa; for browser extensions, fflate to unzip the .crx or .xpi; for WhatsApp chat exports, fflate to unzip the export; for Anki decks, fflate, the 24 KB fzstd decoder and the same WebAssembly SQLite build, with viewhack's own 28 KB deck reader and 21 KB page code; for family trees, viewhack's own 39 KB GEDCOM reader and 23 KB page code, plus fflate for a .gdz or .zip; for mind maps, viewhack's own 40 KB mind-map reader and 17 KB page code, plus fflate for .xmind and .mmap files; for Blender files, viewhack's own 28 KB .blend reader and 16 KB page code, plus fflate for a gzip-compressed file or the packed-files ZIP and the 24 KB fzstd for a Zstandard-compressed one; for AutoCAD DWG files, viewhack's own 30 KB DWG reader and 14 KB page code; for Visio drawings, viewhack's own 53 KB Visio reader and 25 KB drawing view with the e-book viewer's ZIP and XML reader; for Pages, Numbers and Keynote files, viewhack's own 33 KB iWork reader and 18 KB page code with the 31 KB ZIP reader from the e-book viewer, plus the SheetJS reader for a Numbers file; for mailboxes, viewhack's own 36 KB mailbox reader and index worker with the e-mail viewer's 45 KB code; for Outlook .pst and .ost files, viewhack's own 44 KB PST reader and 18 KB page code with the 9 KB list grid; for XPS and OXPS documents, viewhack's own 59 KB XPS reader and 36 KB page drawing code with the ZIP readers from the archive and e-book viewers, plus for a TIFF picture the 58 KB UTIF decoder; for Kindle books, viewhack's own 35 KB Kindle-format reader and 26 KB reading code; for Windows help files, viewhack's own 44 KB CHM and LZX reader and 31 KB page code, plus fflate when you save a ZIP; for GIMP .xcf images, viewhack's own 43 KB XCF reader and 16 KB page code, plus fflate for a file with zlib tiles; for EPS and PostScript files, viewhack's own 17 KB EPS reader, 15 KB page code and the 20 KB header reader shared with the Illustrator page, plus for a TIFF preview the 58 KB UTIF decoder; for WebAssembly modules, viewhack's own 56 KB module reader and text printer and 24 KB page code; for Flash files, viewhack's own 30 KB SWF reader and 15 KB page code, then the Ruffle player's 0.5 MB of JavaScript and, when you press Play, its 14 MB WebAssembly emulator; all fetched from viewhack.com), and one anonymous page-view count when the page loads. That count records the page address, never a file name or its contents.

Check it yourself: open your browser's developer tools (F12, or ⌥⌘I on a Mac), go to the Network tab, clear it, then drop a file. Every request you see is a GET for one of viewhack's own /js/ or /vendor/ files, and none of them carries a body. The site's automated test checks the same thing in a real browser.

Why the bytes and not the file name

An extension is just part of the name, and anyone can change it. The bytes are harder to fake: most formats begin with a fixed signature. Every PNG starts with the eight bytes 89 50 4E 47 0D 0A 1A 0A. Every SQLite database starts with the text SQLite format 3 and a zero byte. A Parquet file starts and ends with PAR1. A .docx, .xlsx, .epub or .apk is really a ZIP archive, starting PK, and the names of the files inside tell them apart.

Cases where the name lies are common:

Plain-text formats have no signature, so CSV is recognised by its shape: the same number of delimiters on line after line.

Recognised but not opened yet

For these, viewhack gives you the real format, the bytes that prove it and what usually opens it. It says plainly that it cannot open them itself yet.

A file matching none of them is reported as unrecognised, with its first 16 bytes in hex, so you have something to search for.

Made with AI tools.