julie-extractors is the standalone extraction product for Julie's
Tree-sitter-based extraction work.
source tree -> versioned extraction artifact
The primary artifact is SQLite. JSONL is the secondary export and streaming
format. The primary integration surface is the julie-extract CLI, so tools
written in C#, Python, Go, JavaScript, Rust, or any other language can consume
extraction results by spawning a binary and reading a durable artifact.
- Current release:
v2.12.0 - Release URL: https://github.com/anortham/julie-extractors/releases/tag/v2.12.0
- Published:
2026-07-10T15:30:13Z - Release commit:
3f00c928d056919cc86dcce79b0751eedc9a3767 - Release workflow: https://github.com/anortham/julie-extractors/actions/runs/29103308762
- Release evidence: docs/release-evidence/2026-07-10-v2-12-0-release.md
| Platform | Asset | SHA-256 |
|---|---|---|
| Linux x86_64 | julie-extract-v2.12.0-x86_64-unknown-linux-gnu.tar.gz |
578946c36965e80407a26f774ea730c0bce9bd536b20ce7e46e96098ed3006a2 |
| macOS Apple Silicon | julie-extract-v2.12.0-aarch64-apple-darwin.tar.gz |
249ed102deece8841c2965d7ad370ef08e63a82d093315a21f374a4457e57812 |
| macOS Intel | julie-extract-v2.12.0-x86_64-apple-darwin.tar.gz |
29ce60fbfc96d636eb1500df3d563c8739dd7bf1ef8097f00bda531c6ca467b5 |
| Windows x86_64 | julie-extract-v2.12.0-x86_64-pc-windows-msvc.zip |
b4c428bc25638381e9ad46603cc3f30cd5ebb0065f0df83134afdda43b6df9ef |
The v2 line starts above the old in-tree Julie extractor crate line, which had reached v1.22.0 before this repo became the standalone product.
Download a published binary archive from the release page, extract it, and put
julie-extract on your PATH.
Linux example:
curl -L -o julie-extract-v2.12.0-x86_64-unknown-linux-gnu.tar.gz \
https://github.com/anortham/julie-extractors/releases/download/v2.12.0/julie-extract-v2.12.0-x86_64-unknown-linux-gnu.tar.gz
tar -xzf julie-extract-v2.12.0-x86_64-unknown-linux-gnu.tar.gz
./dist/x86_64-unknown-linux-gnu/julie-extract --versionBuild from source:
cargo build --release -p julie-extract-cli --bin julie-extract
./target/release/julie-extract --versionCreate a SQLite artifact for this repo:
mkdir -p target/example
julie-extract scan --root . --db target/example/artifact.sqlite --jsonInspect the artifact:
julie-extract info --db target/example/artifact.sqlite --jsonExport the artifact to JSONL:
julie-extract export \
--db target/example/artifact.sqlite \
--format jsonl \
--out target/example/artifact.jsonl \
--jsonList language capability metadata:
julie-extract languages --jsonRead the SQLite artifact from Python with only the standard library:
python3 examples/python/sqlite_consumer.py target/example/artifact.sqlite| Command | Purpose | Key options |
|---|---|---|
scan |
Create or refresh an artifact for a source root. | --root, --db, --force, repeated --ignore-file, --strict-schema, --json |
update |
Re-extract one file in an existing artifact. | --root, --db, --file, repeated --ignore-file, --strict-schema, --json |
delete |
Remove one file and its child rows from an artifact. | --root, --db, --file, --strict-schema, --json |
info |
Read artifact metadata and totals without mutating the database. | --db, --strict-schema, --json |
export |
Export a SQLite artifact to JSONL v3. | --db, --format jsonl, --out, --strict-schema, --json |
languages |
Emit parser inventory and capability snapshot metadata. | --json |
Every command accepts --json for a stable machine-readable report. Human output
is intentionally not part of the contract.
scan and update honor .gitignore files automatically (root, ancestors up
to the git root, and nested subdirectories), plus .julieignore files with the
same semantics for extraction-specific exclusions a repo owner wants to commit,
plus caller-supplied --ignore-file rules, which take precedence over the
in-tree ignore files. See
docs/contracts/cli.md for the full layering and
precedence contract.
SQLite schema v4 is the source of truth for durable output. It stores:
- artifact metadata and schema versions;
- parser inventory and language capability snapshots;
- extraction revisions and per-file change records;
- source file metadata, hashes, and line counts;
- symbols, symbol annotations, identifiers, relationships, pending relationships, type facts, generic type arguments, literals, source regions, structural facts, complexity metrics, and parse diagnostics.
The SQLite contract requires lookup indexes for common consumer paths: files by path/language, symbols by path/file/name-kind/parent/test-role flags, identifiers by path/file/name-kind/containing/target, relationships by source, target, and kind, pending relationships by terminal/file, source regions by file span/kind/symbol, structural facts by file span/pattern/symbol, complexity metrics by file scope/scope-language/symbol, and diagnostics by path.
Source file content_hash values use blake3:<hex>. Parser inventory and
capability snapshot fingerprints use sha256:<hex>, and release asset digests
are also SHA-256.
Artifacts do not store complete source file contents. Consumers that need full text should read the matching source tree directly.
The v2.3.0 release is a broad extraction-quality release. It raises the
supported language matrix from boolean "supported" claims to fixture-backed,
per-domain evidence. Every advertised language now has explicit coverage data
for each extraction domain, and the scorecard has no silent cells or quality-bar
debt.
Current quality scorecard:
- Languages:
36 - Silent capability cells:
0 - Quality-bar debts:
0 - Strict gate:
node scripts/language-data-quality-report.mjs --strict
| Domain | Fixture-proven native coverage | Applicable closure |
|---|---|---|
| Symbols | 36/36 | 36/36 |
| Relationships | 36/36 | 36/36 |
| Identifiers | 33/36 | 33/33 |
| Body spans | 35/36 | 35/35 |
| Structural facts | 36/36 | 36/36 |
| Complexity metrics | 30/36 | 30/30 |
| Annotations | 23/36 | 23/23 |
| Doc comments | 35/36 | 35/35 |
| Literals | 36/36 | 36/36 |
| Source regions | 35/36 | 35/35 |
| Pending relationships | 30/36 | 30/30 |
| Types | 29/36 | 29/29 |
| Type argument usages | 20/36 | 20/20 |
Test detection is role-aware rather than a single language-level capability.
Golden fixtures prove at least one emitted test role for all 28 code languages.
Across the 108 language-role cells, 60 are supported, 6 are source-backed
not_applicable, and 42 remain explicit open_gaps; there are no unclassified
cells.
"Applicable closure" means the language either has fixture-proven native
coverage for that domain or a recorded reason why the domain is not a real
language construct. Missing extractor work cannot be hidden behind
not_applicable; the capability matrix enforces that every positive claim has
golden fixture evidence.
Dogfood evidence compares v2.3.0 with the previous v2.2.1 binary across the
three dependent projects and representative real-world repositories. The release
branch scanned 12,893 files with 0 failed files, kept parse diagnostics
unchanged, and added 451,382 structural facts plus 33,687 complexity metrics
in that corpus.
JSONL v3 is derived from SQLite and is not a separate source of truth. A full
export writes deterministic snapshot records in this order:
artifactparser_inventorylanguage_capabilitylanguage_capability_fixturelanguage_capability_gaprevisionrevision_file_changefilesymbolsymbol_annotationidentifierrelationshippending_relationshiptype_facttype_argument_usagetype_argumentliteralsource_regioncomplexity_metricstructural_factparse_diagnostic
JSON text stored in SQLite is decoded into JSON values in JSONL payloads.
JSON reports use report_schema_version: 3 and include command status, input
paths, artifact metadata, tool version, revision IDs, row counts, warnings, and
typed errors.
Stable status values are:
okno_changeunsupportednot_foundpartialfailed
partial means the artifact is still consistent, but at least one supported file
failed extraction. Callers should treat it as an error status while preserving
usable rows from successful files.
The current languages --json capability snapshot reports 36 languages:
bash, c, cpp, csharp, css, dart, elixir, gdscript, go, html, java,
javascript, json, jsx, kotlin, lua, markdown, php, powershell, python, qml, r,
razor, regex, ruby, rust, scala, sql, swift, toml, tsx, typescript, vbnet, vue,
yaml, zig
Capability rows distinguish target support from actual fixture-backed evidence.
Use julie-extract languages --json for the current parser and capability
snapshot instead of hard-coding this list in consumers.
Contributor-facing language contracts:
docs/contracts/extracted-data-v3.md: definitive list of extracted data domains and support labels.docs/languages/new-language-checklist.md: checklist for adding a language or upgrading a language capability claim.
- Miller and other non-Rust code intelligence tools that want a stable CLI and SQLite artifact.
- Eros and Python tools that may choose CLI-first consumption.
- Rust callers that want the in-process extractor crate.
- Maintainers adding or improving extraction support across supported languages.
This repo does not ship or own:
- Julie MCP server behavior;
- daemon or session lifecycle;
- search ranking, search indexes, or embeddings;
- watcher services, dashboards, or workspace registry behavior;
- editing, refactoring, or code modification tools.
/Users/murphy/source/julie remains maintenance-only while this repo owns future
extractor product development.
Fast branch gates:
cargo fmt --all -- --check
cargo xtask test default
cargo xtask test contractUseful focused gates:
cargo test -p xtask
cargo test -p julie-extract-artifact --test schema_contract
cargo test -p julie-extract-artifact --test jsonl_contract
cargo test -p julie-extract-cli --test cli_contract
cargo xtask dogfood repo --root . --out-dir target/dogfood/julie-extractors
cargo xtask release package-listSlow gates such as parser certification and real-world release tests are kept out of the default suite by design.
Product and architecture:
- Product vision
- Product boundary
- CLI architecture contract
- Schema principles
- Continuous-testing evidence boundary
- Decision 0001
Public contracts:
Language support:
Release and testing:
- Testing strategy
- Release and certification
- v2.13.0 release notes
- v2.13.0 release evidence
- historical v2.12.1 release notes
- historical v2.12.0 release notes
- historical v2.12.0 release evidence
- historical v2.11.0 release notes
- historical v2.11.0 release evidence
- historical v2.10.0 release notes
- historical v2.10.0 release evidence
- historical v2.9.0 release notes
- historical v2.9.0 release evidence
- historical v2.8.1 release notes
- historical v2.8.1 release evidence
- historical v2.8.0 release notes
- historical v2.8.0 release evidence
- historical v2.7.0 release notes
- historical v2.7.0 release evidence
- historical v2.6.0 release notes
- historical v2.5.10 release notes
- historical v2.5.10 release evidence
- historical v2.5.9 release notes
- historical v2.5.9 release evidence
- historical v2.5.8 release notes
- historical v2.5.8 release evidence
- historical v2.5.7 release notes
- historical v2.5.7 release evidence
- historical v2.5.6 release notes
- historical v2.5.6 release evidence
- historical v2.5.5 release notes
- historical v2.5.5 release evidence
- historical v2.5.4 release notes
- historical v2.5.4 release evidence
- historical v2.5.3 release notes
- historical v2.5.3 release evidence
- historical v2.5.2 release notes
- historical v2.5.2 release evidence
- historical v2.5.1 release notes
- historical v2.5.1 release evidence
- historical v2.5.0 release notes
- historical v2.5.0 release evidence
- historical v2.4.0 release notes
- historical v2.4.0 release evidence
- historical v2.3.0 release notes
- historical v2.3.0 release evidence
- historical v2.2.1 release notes
- historical v2.2.1 release evidence
- historical v2.2.0 release notes
- historical v2.2.0 release evidence
- historical v2.1.3 release notes
- historical v2.1.3 release evidence
- historical v2.1.2 release notes
- historical v2.1.2 release evidence
- historical v2.1.1 release notes
- historical v2.1.1 release evidence
- historical v2.1.0 release notes
- historical v2.1.0 release evidence
- historical v2.0.3 release notes
- historical v2.0.3 release evidence
- historical v2.0.2 release notes
- historical v2.0.2 release evidence
- historical v2.0.1 release notes
- historical v2.0.1 release evidence
- historical v2.0.0 release notes
- historical v2.0.0 release evidence
- historical v0.1.0 dogfood evidence
- historical v0.1.0 release candidate audit
Plans and migration history: