← Back to Validation

Sinter vs exdantic comparison

Documentation for sinter_vs_exdantic_comparison from the Pipeline ex repository.

Sinter vs Exdantic: Schema Validation Library Comparison for Pipeline_ex

Executive Summary

Both Sinter and Exdantic are modern Elixir validation libraries designed for AI/LLM applications, but they serve different use cases:

  • Sinter: Minimalist, runtime-focused, “one true way” philosophy - ideal for simple, dynamic validation needs
  • Exdantic: Feature-rich, Pydantic-inspired, enterprise-grade - ideal for complex schemas and production systems

Recommendation for Pipeline_ex: Use Exdantic for its comprehensive feature set, better alignment with pipeline complexity, and superior JSON Schema generation capabilities.

Detailed Comparison

1. Philosophy & Design

AspectSinterExdantic
Philosophy“Distillation” - single unified APIPydantic-style comprehensive toolkit
ComplexitySimple, focusedFeature-rich, comprehensive
Learning CurveLowMedium
API StyleFunctionalDSL + Functional

2. Schema Definition

Sinter

schema = Sinter.Schema.define([
  {:name, :string, [required: true]},
  {:steps, {:array, :map}, [required: true, min_items: 1]}
])

Exdantic

defmodule PipelineSchema do
  use Exdantic, define_struct: true
  
  schema "Pipeline Configuration" do
    field :name, :string do
      required()
      description("Pipeline name")
    end
    
    field :steps, {:array, StepSchema} do
      required()
      min_items(1)
      description("Pipeline steps")
    end
    
    model_validator :validate_step_dependencies
  end
end

3. Feature Comparison

FeatureSinterExdantic
Runtime Validation✅ Primary focus✅ Excellent support
Compile-time Schemas❌ Not emphasized✅ First-class support
JSON Schema Generation✅ Basic✅ Advanced with provider optimization
Type Coercion✅ Built-in✅ Comprehensive
Cross-field Validation✅ Post-validation hooks✅ Model validators
Computed Fields
Nested Schemas✅ Advanced with references
Error Messages✅ Good✅ Excellent with paths
Performance✅ Fast✅ Optimized
Documentation✅ Good✅ Extensive

4. JSON Schema Capabilities

Sinter

  • Basic JSON Schema generation
  • Provider-specific optimizations (OpenAI, Anthropic)
  • Schema validation

Exdantic

  • Full JSON Schema draft support
  • Advanced provider optimizations
  • Reference resolution and flattening
  • DSPy-style optimization
  • Computed fields as readOnly
  • Comprehensive metadata support

5. Pipeline_ex Specific Considerations

Why Exdantic is Better for Pipeline_ex:

  1. Complex Nested Structures

    • Pipeline YAML has deeply nested structures (workflow → steps → prompts → parts)
    • Exdantic’s reference resolution and nested schema support is superior
  2. Compile-time + Runtime Needs

    • Base pipeline schemas can be compile-time for performance
    • Dynamic schemas for LLM-generated pipelines can use runtime features
  3. Cross-field Validation Requirements

    • Step dependencies validation
    • Condition expression validation
    • Function reference validation
    • Exdantic’s model validators are perfect for this
  4. JSON Schema Generation

    • Need high-quality JSON Schemas for IDE support
    • Provider-specific optimizations for Claude/Gemini integration
    • Exdantic’s JSON Schema generation is production-ready
  5. Future-proofing

    • DSPy integration potential
    • LLM output validation
    • Schema evolution and migration
    • Exdantic is built for these AI-first use cases

6. Integration Example with Exdantic

defmodule Pipeline.Validation.Schemas.WorkflowSchema do
  use Exdantic, define_struct: true
  
  schema "Pipeline Workflow Configuration" do
    field :name, :string do
      required()
      min_length(1)
      description("Unique workflow identifier")
    end
    
    field :description, :string do
      optional()
      description("Human-readable workflow description")
    end
    
    field :steps, {:array, Pipeline.Validation.Schemas.StepSchema} do
      required()
      min_items(1)
      description("Ordered list of pipeline steps")
    end
    
    field :global_vars, {:map, :string, :any} do
      optional()
      description("Global variables available to all steps")
    end
    
    field :claude_auth, Pipeline.Validation.Schemas.ClaudeAuthSchema do
      optional()
      description("Claude authentication configuration")
    end
    
    model_validator :validate_step_references
    model_validator :validate_function_references
  end
  
  def validate_step_references(data) do
    # Validate all previous_response references exist
    # ...implementation...
  end
end

7. Migration Strategy

  1. Phase 1: Define Exdantic schemas for all pipeline components
  2. Phase 2: Generate JSON Schema and integrate with VS Code
  3. Phase 3: Replace current validation with Exdantic validators
  4. Phase 4: Add runtime schema generation for dynamic pipelines

8. Decision Matrix

CriteriaWeightSinterExdanticWinner
Feature Completeness25%7/1010/10Exdantic
JSON Schema Quality20%6/1010/10Exdantic
Learning Curve10%10/107/10Sinter
Production Readiness20%8/1010/10Exdantic
LLM Integration15%8/1010/10Exdantic
Performance10%9/109/10Tie
Total Score7.659.55Exdantic

Conclusion

While Sinter is an excellent library with a clean API and focused approach, Exdantic is the clear choice for Pipeline_ex due to:

  1. Comprehensive feature set matching pipeline complexity
  2. Superior JSON Schema generation for tooling integration
  3. Production-grade maturity with extensive documentation
  4. Better suited for complex, nested validation requirements
  5. Future-proof design for AI/LLM applications

The additional complexity of Exdantic is justified by the requirements of validating pipeline YAML structures and the need for high-quality JSON Schema generation for external tooling.