Xcode 27's Developer Documentation component (Xcode → Settings → Components) is not
a bundle of .doccarchives. It's an on-device vector-search SQLite database, the RAG
index behind Xcode's AI documentation search. You can read it directly.
Why this is interesting for agentic / AI-assisted coding:
- It's a local, queryable corpus of the installed Xcode Developer Documentation, so you can ground a coding agent on it with no scraping and no network.
- It carries the current beta-SDK frameworks (FoundationModels, CoreAI, Evaluations, MediaIntelligence, etc.) as soon as you install the Xcode beta, already chunked and local, so you can ground agents on new-API docs offline.
- The chunk text is stored as plaintext in
attributes.content, so you can run your own retrieval; you do not need Apple's embeddings.
/System/Library/AssetsV2/com_apple_MobileAsset_AppleDeveloperDocumentation/<uuid>.asset/AssetData/documentation-db/index.sql
Each installed Xcode (and each beta) drops its own <uuid>.asset, keyed by
MobileAssetProperties.XcodeVersion in the sibling Info.plist. The folder names are UUIDs,
so do not sort them lexicographically. List versions and pick the newest:
for d in /System/Library/AssetsV2/com_apple_MobileAsset_AppleDeveloperDocumentation/*.asset; do
v=$(/usr/libexec/PlistBuddy -c "Print :MobileAssetProperties:XcodeVersion" "$d/Info.plist" 2>/dev/null)
echo "$v $d/AssetData/documentation-db/index.sql"
done | sort -V- GRDB-managed SQLite, ~1 GB.
AssetData/config.json:databaseType: vectorSearch,embeddingModelName: md7v2(typeuem), 512-dim, cosine, 1700-char chunks, FTS disabled. - 264,773 chunks across 372 frameworks (Xcode 27.0 / iOS 26.2 snapshot).
- Key tables:
attributes:framework,title,content(the full chunk text, plaintext),type,asset_id(= doc URI)observations: the embedding BLOBspartitions: ANN cluster centroidsdocuments,metadata
# resolve the newest-XcodeVersion asset (NOT `ls | tail`, which sorts by UUID)
DB=$(for d in /System/Library/AssetsV2/com_apple_MobileAsset_AppleDeveloperDocumentation/*.asset; do
v=$(/usr/libexec/PlistBuddy -c "Print :MobileAssetProperties:XcodeVersion" "$d/Info.plist" 2>/dev/null)
[ -n "$v" ] && echo "$v $d/AssetData/documentation-db/index.sql"
done | sort -V | tail -1 | cut -d' ' -f2)
# what frameworks are indexed
sqlite3 "file:$DB?mode=ro" "select framework, count(*) from attributes group by framework order by 2 desc limit 20;"
# read doc text (lexical)
sqlite3 "file:$DB?mode=ro" "select framework, title, content from attributes where content like '%PrivateCloudCompute%' limit 5;"A small ranked lexical search helper is in appledoc-search.sh in this gist.
The stored vectors come from Apple's md7v2 / uem model (named in config.json). It
appears to be served by the private EmbeddingService.framework (its binary lives in the
dyld shared cache, which is why it never shows up in a file grep), though I haven't confirmed
that by reverse-engineering. Either way, Apple does not expose a public query-embedding API
compatible with these stored vectors, so you can't embed a query into the same space to
search them directly.
You don't need to. The chunk text is plaintext in attributes.content, so re-embed it with
any sentence-embedding model you control (e.g. mxbai-embed-large / bge-large /
nomic-embed-text via Ollama) and put the vectors in pgvector / sqlite-vec / FAISS. In a
quick 15-query test over one framework, mxbai-embed-large gave recall@5 = 1.0; pure dense
beat lexical handily on natural-language queries.
- It's a beta snapshot tied to the installed Xcode version, refreshed when Xcode updates. Not authoritative for shipping behaviour.
- Read-only curiosity. Don't write to it.
- cupertino: an MCP server for Apple docs / Swift Evolution / packages. It indexes the shipping docs (great for agents); this on-disk DB is complementary: it's Apple's own index and carries the beta SDK before cupertino re-fetches.
Unrelated but it is annoying that this 2GB+ asset cannot be easily deleted, afaik.