Supported File Types

Captain indexes the 184 file types below, sent through a direct upload, the dashboard, raw text, or a cloud storage connector. Each one is parsed, chunked, and embedded for search.

CategoryCountExtensions
Documents3pdf, docx, doc
Sheets4xlsx, xls, csv, tsv
Images7png, jpg, jpeg, gif, bmp, tiff, webp
Audio7mp3, wav, m4a, ogg, flac, aac, wma
Video7mp4, mov, avi, mkv, webm, flv, wmv
Text and code156txt, md, json, yaml, and 151 source, markup, and config extensions listed under Text and code

Documents

ExtensionTypeWhat you get
.pdfPDFText chunks labeled by layout role (body, table, heading, figure, and more), each with a page range. See Advanced Search & Relations.
.docx, .docWordText chunks with a page range (metadata.pageStart/pageEnd).

Sheets

ExtensionTypeWhat you get
.xlsx, .xlsExcelStructure-aware chunks with row/column provenance (sheetName, rowStart/rowEnd, colStart/colEnd, columns). See Multimodal Search.
.csv, .tsvTabular textSame row/column provenance as Excel.

Text and code

Every extension in this section is read as plain text and split into text chunks with a page range. There is no syntax-aware parsing: a .py file and a .txt file go through the same lane. For .json files, pass a parsing_script to control chunking.

FamilyExtensions
Plain text and data.txt, .md, .json, .yaml, .yml
Python.py, .pyi, .pyw, .ipynb
JavaScript and TypeScript.js, .mjs, .cjs, .jsx, .ts, .tsx, .mts, .cts, .coffee
JVM.java, .kt, .kts, .scala, .sbt, .groovy, .gradle, .clj, .cljs, .edn
C family.c, .h, .cpp, .cc, .cxx, .hpp, .hxx, .hh, .m, .mm
.NET.cs, .csx, .fs, .fsx, .razor, .cshtml
Other languages.go, .rs, .rb, .erb, .rake, .gemspec, .php, .phtml, .swift, .pl, .pm, .lua, .r, .rmd, .dart, .jl, .nim, .zig, .ex, .exs, .erl, .hrl, .hs, .elm, .ml, .mli, .s, .asm, .vbs, .applescript
SQL.sql, .ddl
Shell and scripts.sh, .bash, .zsh, .fish, .ksh, .csh, .tcsh, .ps1, .psm1, .psd1, .bat, .cmd
Web, markup, and templates.html, .htm, .xhtml, .shtml, .css, .scss, .sass, .less, .styl, .vue, .svelte, .astro, .hbs, .ejs, .pug, .twig, .liquid, .njk, .mustache
Markdown and docs.markdown, .mdown, .mdx, .rst, .adoc, .asciidoc, .org, .tex, .bib, .textile, .text, .diff, .patch
Config and infra.toml, .ini, .cfg, .conf, .properties, .lock, .tf, .tfvars, .hcl, .nix, .cmake, .mk, .bzl, .bazel, .dockerfile, .log
JSON variants and data text.json5, .jsonc, .jsonl, .ndjson, .geojson, .graphql, .gql, .proto
XML family.xml, .xsl, .xslt, .xsd, .dtd, .rss, .atom, .xaml, .svg, .drawio, .csproj, .sln

Not indexed, by design: compiled or binary variants (.pyc, .pyo, .class, .o, .so, .dll, .wasm, .jar, .svgz), .plist (often binary), and secret-bearing files (.env, .pem, .key, .crt).

Files with no extension arriving through a cloud storage connector are not rejected up front. The indexer sniffs their content type (HTTP content type plus magic bytes) and indexes them when the content is a supported type.

Images

ExtensionTypeWhat you get
.png, .jpg, .jpeg, .gif, .bmp, .tiff, .webpRaster imagesOne chunk per image, dual-embedded (visual and a VLM-generated text description), so a query matches what the image shows, not just its filename.

Images are supported up to 200 megapixels decoded, and can run through mask_pii for OCR-based redaction. See PII Masking.

Video

ExtensionTypeWhat you get
.mp4, .mov, .avi, .mkv, .webm, .flv, .wmvVideoSegmented into clips up to 120s, each dual-embedded with a spoken-word transcript and a VLM-generated visual description. Segment time range in metadata.startSec/endSec.

Audio

ExtensionTypeWhat you get
.mp3, .wav, .aac, .flac, .m4a, .ogg, .wmaAudioSegmented into clips up to 80s, each dual-embedded with an automatic-language transcript. Segment time range in metadata.startSec/endSec.

Video and audio detail, including transcript language control, lives on Multimodal Search.

Size limits by type

Each type has its own per-file and per-request ceiling, and the ceiling also depends on how the file reaches Captain (dashboard, API, or a connector). See File Size Limits for the full breakdown.

© 2026 Captain