Packages

Unified schema definition, validation, and JSON generation for Elixir. Sinter is a focused, high-performance schema validation library designed specifically for dynamic frameworks like DSPy. It distills complex validation APIs into a single, powerful, and unified engine.

Current section

Files

Jump to
sinter assets sinter.svg
Raw

assets/sinter.svg

<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="title desc">
<title id="title">Sinter</title>
<desc id="desc">Hexagonal emblem with a fused sinter core.</desc>
<defs>
<linearGradient id="bg" x1="0" y1="0" x2="200" y2="200" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#0f141b"/>
<stop offset="0.55" stop-color="#1b2430"/>
<stop offset="1" stop-color="#0b0f14"/>
</linearGradient>
<radialGradient id="coreGlow" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(102 88) rotate(90) scale(80)">
<stop offset="0" stop-color="#ffdfb0" stop-opacity="0.9"/>
<stop offset="0.45" stop-color="#f5a248" stop-opacity="0.45"/>
<stop offset="1" stop-color="#8b3212" stop-opacity="0"/>
</radialGradient>
<linearGradient id="hexFill" x1="26" y1="28" x2="176" y2="176" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#151c24"/>
<stop offset="0.52" stop-color="#1f2b36"/>
<stop offset="1" stop-color="#0f151b"/>
</linearGradient>
<linearGradient id="hexStroke" x1="24" y1="56" x2="176" y2="144" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#ffe0a8"/>
<stop offset="0.4" stop-color="#f5a248"/>
<stop offset="0.7" stop-color="#e06a24"/>
<stop offset="1" stop-color="#b53412"/>
</linearGradient>
<linearGradient id="innerStroke" x1="40" y1="40" x2="160" y2="160" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#fff2cf" stop-opacity="0.7"/>
<stop offset="1" stop-color="#f5a248" stop-opacity="0.15"/>
</linearGradient>
<linearGradient id="core" x1="70" y1="60" x2="130" y2="140" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#ffe7bf"/>
<stop offset="0.52" stop-color="#f5a248"/>
<stop offset="1" stop-color="#cf4c1b"/>
</linearGradient>
<radialGradient id="coreHotspot" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(96 82) rotate(90) scale(44)">
<stop offset="0" stop-color="#fff7e4"/>
<stop offset="0.5" stop-color="#ffd39a" stop-opacity="0.9"/>
<stop offset="1" stop-color="#e06a24" stop-opacity="0.2"/>
</radialGradient>
<pattern id="hexGrid" width="18" height="15.588" patternUnits="userSpaceOnUse">
<path d="M9 0 L18 5.196 L18 15.588 L9 20.784 L0 15.588 L0 5.196 Z" fill="none" stroke="#f5a248" stroke-opacity="0.08" stroke-width="0.8"/>
</pattern>
<filter id="softShadow" x="-30%" y="-30%" width="160%" height="160%" color-interpolation-filters="sRGB">
<feDropShadow dx="0" dy="6" stdDeviation="6" flood-color="#05070a" flood-opacity="0.7"/>
</filter>
<filter id="innerGlow" x="-30%" y="-30%" width="160%" height="160%" color-interpolation-filters="sRGB">
<feGaussianBlur stdDeviation="3" result="blur"/>
<feColorMatrix in="blur" type="matrix" values="
1 0 0 0 0.6
0 1 0 0 0.35
0 0 1 0 0.12
0 0 0 0.75 0" result="colored"/>
<feBlend in="SourceGraphic" in2="colored" mode="screen"/>
</filter>
<filter id="noise" x="0" y="0" width="100%" height="100%" color-interpolation-filters="sRGB">
<feTurbulence type="fractalNoise" baseFrequency="0.9" numOctaves="2" stitchTiles="stitch" result="noise"/>
<feColorMatrix type="saturate" values="0"/>
<feComponentTransfer>
<feFuncA type="table" tableValues="0 0.1"/>
</feComponentTransfer>
</filter>
<clipPath id="hexClip">
<polygon points="100 18 170 58 170 142 100 182 30 142 30 58"/>
</clipPath>
</defs>
<rect width="200" height="200" fill="url(#bg)"/>
<g filter="url(#softShadow)">
<polygon points="100 8 180 52 180 148 100 192 20 148 20 52" fill="url(#hexFill)" stroke="url(#hexStroke)" stroke-width="6"/>
</g>
<polygon points="100 18 170 58 170 142 100 182 30 142 30 58" fill="none" stroke="url(#innerStroke)" stroke-width="2" opacity="0.8"/>
<g clip-path="url(#hexClip)">
<rect x="20" y="20" width="160" height="160" fill="url(#hexGrid)"/>
<rect x="20" y="20" width="160" height="160" fill="url(#coreGlow)" opacity="0.3"/>
<rect x="20" y="20" width="160" height="160" filter="url(#noise)" opacity="0.5"/>
</g>
<circle cx="100" cy="100" r="48" fill="none" stroke="#f5a248" stroke-opacity="0.25" stroke-width="2" stroke-dasharray="2 6"/>
<g filter="url(#innerGlow)">
<circle cx="80" cy="92" r="26" fill="url(#core)"/>
<circle cx="120" cy="112" r="26" fill="url(#core)"/>
<circle cx="118" cy="78" r="18" fill="url(#coreHotspot)"/>
<path d="M70 122 C78 102, 102 96, 122 104 C142 112, 146 132, 132 148 C116 166, 86 160, 70 142 C64 136, 64 128, 70 122 Z" fill="url(#coreHotspot)" opacity="0.9"/>
<path d="M72 88 C84 78, 100 76, 114 82 C124 86, 132 94, 136 104" fill="none" stroke="#fff2d0" stroke-opacity="0.6" stroke-width="3" stroke-linecap="round"/>
</g>
<g opacity="0.85">
<circle cx="60" cy="106" r="2" fill="#ffd9a3"/>
<circle cx="140" cy="96" r="2.5" fill="#f6a04a"/>
<circle cx="92" cy="130" r="1.8" fill="#ffe5b9"/>
<circle cx="112" cy="62" r="1.5" fill="#ffd08a"/>
<circle cx="128" cy="138" r="1.6" fill="#f0b26b"/>
</g>
</svg>