{"record":{"id":"7ff4296a9add5ff5","repo":"quickwit-oss/quickwit","slug":"vrl-is-not-enabled-please-recompile-with-the-vrl","errorCode":null,"errorMessage":"VRL is not enabled: please recompile with the `vrl` feature","messagePattern":"VRL is not enabled: please recompile with the `vrl` feature","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"quickwit/quickwit-indexing/src/actors/doc_processor.rs","lineNumber":430,"sourceCode":"    publish_lock: PublishLock,\n    #[cfg(feature = \"vrl\")]\n    transform_opt: Option<VrlProgram>,\n    input_format: SourceInputFormat,\n}\n\nimpl DocProcessor {\n    pub fn try_new(\n        index_id: IndexId,\n        source_id: SourceId,\n        doc_mapper: Arc<DocMapper>,\n        indexer_mailbox: Mailbox<Indexer>,\n        transform_config_opt: Option<TransformConfig>,\n        input_format: SourceInputFormat,\n        fingerprinter_opt: Option<Fingerprinter>,\n    ) -> anyhow::Result<Self> {\n        let timestamp_field_opt = extract_timestamp_field(&doc_mapper)?;\n        if cfg!(not(feature = \"vrl\")) && transform_config_opt.is_some() {\n            bail!(\"VRL is not enabled: please recompile with the `vrl` feature\")\n        }\n        Ok(DocProcessor {\n            doc_mapper,\n            indexer_mailbox,\n            timestamp_field_opt,\n            fingerprinter_opt,\n            counters: Arc::new(DocProcessorCounters::new(index_id, source_id)),\n            publish_lock: PublishLock::default(),\n            #[cfg(feature = \"vrl\")]\n            transform_opt: transform_config_opt\n                .map(VrlProgram::try_from_transform_config)\n                .transpose()?,\n            input_format,\n        })\n    }\n\n    // Extract a timestamp from a tantivy document.\n    //","sourceCodeStart":412,"sourceCodeEnd":448,"githubUrl":"https://github.com/quickwit-oss/quickwit/blob/a39730c5cdcd1a4fe798403737ae293999ea21f8/quickwit/quickwit-indexing/src/actors/doc_processor.rs#L412-L448","documentation":"`DocProcessor::try_new` checks at construction time whether a VRL transform was configured. The binary was compiled without the `vrl` feature flag, so any non-None `TransformConfig` is rejected with this message, since VRL transforms cannot run in that build.","triggerScenarios":"Starting an indexer with an index config containing a `transform.vrl` section while running a Quickwit build compiled without the `vrl` cargo feature.","commonSituations":"Using a minimal/distro binary or a build with default features stripped, then deploying an index config authored against a full build with VRL support.","solutions":["Rebuild/reinstall Quickwit with the `vrl` feature enabled (e.g. `cargo build --features vrl`).","Remove the `transform.vrl` section from the index config if VRL processing is not needed.","Switch to an official release binary that includes the `vrl` feature."],"exampleFix":"// before (Cargo/build)\ncargo build --release\n// after\ncargo build --release --features vrl","handlingStrategy":"fallback","validationCode":"// check feature support before deploying a config with a transform\n// (outside the binary: verify your build's feature set)\n// cargo metadata / build script: ensure --features vrl when transforms are used\nlet uses_vrl = index_config.doc_mapping.transform.as_ref().is_some();\nif uses_vrl && !build_has_vrl_feature() {\n    plan_err(\"this build lacks the vrl feature; rebuild or drop the transform\");\n}","typeGuard":null,"tryCatchPattern":"match DocProcessor::try_new(...) {\n    Ok(dp) => dp,\n    Err(e) if e.to_string().contains(\"VRL is not enabled\") => {\n        // fall back to a build with the vrl feature or strip the transform config\n        ...\n    }\n    Err(e) => return Err(e.into()),\n}","preventionTips":["Use release binaries built with the vrl feature when index configs use VRL transforms.","Gate configs containing transform.vrl to builds that support it via deployment checks.","Document feature flags alongside index config schema so operators know the requirements."],"tags":["vrl","feature-flag","compile-time","transform"],"backgroundTag":"feature-not-enabled","analyzedSha":"a39730c5cdcd1a4fe798403737ae293999ea21f8","analyzedAt":"2026-09-08T13:19:37.784Z","contentChangedAt":"2026-09-08T13:19:37.784Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}