CtrlK
BlogDocsLog inGet started
Tessl Logo

feature-flag-policy

Cargo feature flags for crates/xberg — ORT-incompatible targets (WASM, Android x86_64 emulator), type-only and tract inference companion features, WASM/Android-safe variants, PDF backend, mutually-exclusive ORT variants, platform-conditional deps, aggregate feature sets, and build profiles. Load when adding, wiring, or debugging a Cargo feature, or when reasoning about what compiles on WASM/Android/Windows/macOS-intel targets.

76

Quality

93%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Feature Flag Policy

All features in crates/xberg/Cargo.toml.

ORT-Incompatible Targets (WASM, Android x86_64 emulator)

Only ORT-dependent paths are incompatible. The same paths block both WASM (no native ORT linkage at all) and the x86_64-linux-android emulator triple (no pyke prebuilt; aarch64-linux-android does ship a prebuilt and gets full ORT):

  • paddle-ocr — ONNX Runtime + native C++ deps: not WASM-safe; no Android x86_64 prebuilt
  • layout-detection — depends on ONNX Runtime layout models: not WASM-safe; no Android x86_64 prebuilt (RT-DETR + table classifier are available off-ORT via the layout-tract sibling, below)
  • embeddings — depends on ONNX Runtime sentence-transformer models: not WASM-safe; no Android x86_64 prebuilt
  • auto-rotate — depends on ONNX Runtime orientation classifier: not WASM-safe; no Android x86_64 prebuilt (available off-ORT via the auto-rotate-tract sibling, below)

Pure-Rust type-only companion features expose the public config/result types for the above without pulling in ORT:

  • layout-typesLayoutDetectionConfig, TableModel, BBox, DetectionResult, LayoutClass, LayoutDetection, RecognizedTable. layout-detection implies layout-types.
  • auto-rotate-typesOrientationResult. auto-rotate implies auto-rotate-types.
  • embedding-presetsEmbeddingPreset (already existed; pure-Rust preset metadata).

Pure-Rust tract inference variants run select ONNX models where native ORT cannot link, loading the same .onnx artifacts through the tract engine (CPU-only, no native library):

  • layout-detection (ORT) → layout-tract (tract): RT-DETR layout detection + the PP-LCNet wired/wireless table classifier run on WASM and the Android x86_64 emulator. TATR, SLANeXT, PP-DocLayout-V3, and YOLO stay ONNX Runtime-only (tract 0.23.4 op-coverage gaps).
  • auto-rotate (ORT) → auto-rotate-tract (tract): PP-LCNet document-orientation on WASM and the Android x86_64 emulator.

WASM/Android-safe variants:

  • ocr (native) → ocr-wasm (uses tesseract-wasm + safe image deps) — Android keeps native ocr
  • excel (native) → excel-wasm (drops tokio-runtime) — Android keeps native excel
  • tree-sitter (native dlopen) → tree-sitter-wasm (statically-linked grammar pack). NOT in wasm-target: the 306-language grammar pack pushes the browser .wasm past jsDelivr's 50 MB per-file cap, breaking the CDN-hosted demo. WASM has no code intelligence; Android keeps native tree-sitter.
  • liter-llm — works on WASM via the upstream wasm-http feature; included in no-ort-target
  • stopwords — pure-Rust, included in no-ort-target
  • keywords — pure-Rust YAKE/RAKE, included in no-ort-target

The no-ort-target aggregate is the shared no-ORT base used by both wasm-target and android-target. wasm-target = no-ort-target + excel-wasm + ocr-wasm + layout-tract + auto-rotate-tract (NO tree-sitter — see above). android-target = no-ort-target + excel + tree-sitter + ocr + api + mcp + layout-tract + auto-rotate-tract.

PDF Backend

  • pdf — the canonical PDF feature, backed by the pure-Rust pdf_oxide crate. This is the primary/default PDF extraction pipeline; there is no separate pdf-oxide feature. Included in formats, full, no-ort-target, and wasm-target.

ORT Variants (Mutually Exclusive)

  • ort-bundled — downloads official Microsoft ORT binaries; default when OCR/ML features active
  • ort-dynamic — load ORT from system; only when system ORT is guaranteed present

Platform-Conditional

  • xberg-paddle-ocr, hf-hub, pprof — excluded on wasm32
  • ureq: rustls on non-Windows; native-tls on Windows
  • xberg-ffi and xberg-dart cargo dependencies are target-conditional: cfg(target_os = "android") (both ABIs — aarch64 and x86_64) and cfg(target_os = "ios") select android-target, the pure-Rust tract ML surface with no ONNX Runtime; cfg(target_os = "windows") selects windows-target (full ORT ML via ort-bundled); cfg(all(target_os = "macos", target_arch = "x86_64")) selects macos-intel-target. All other targets (Linux, macOS arm64) get the full ORT-enabled feature set. Android and iOS run inference through tract, not ORT, on every ABI — there is no arch split that gives arm64 Android phones a native ORT build.

Aggregate Sets

FeatureDescription
formatsAll document formats + api/mcp/otel/chunking; no OCR, no ML
fullformats + ocr + paddle-ocr + layout + embeddings + tree-sitter + liter-llm
no-ort-targetPure-Rust base: every capability that does not depend on ONNX Runtime
wasm-targetno-ort-target + excel-wasm + ocr-wasm + layout-tract + auto-rotate-tract (no tree-sitter — grammar pack exceeds CDN 50 MB cap)
android-targetno-ort-target + excel + tree-sitter + ocr + api + mcp + layout-tract + auto-rotate-tract (for x86_64-linux-android emulator)

Build Profiles

  • release — LTO thin, codegen-units=1, strip
  • profiling — inherits release, retains debug info
  • xberg-wasm override: opt-level="z" (size-optimized)
  • sevenz-rust2, zip override: opt-level=2 (prevents SIGBUS on macOS ARM64)
Repository
xberg-io/xberg
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.