-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path_index.html
More file actions
970 lines (891 loc) · 49.9 KB
/
Copy path_index.html
File metadata and controls
970 lines (891 loc) · 49.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
+++
title = "JSON Schema Standard Library"
description = "A standard library of all the foundational schemas you'll ever need so you never have to bother with JSON Schema again"
github = "sourcemeta/std"
price = "€2,110"
[[navigation]]
title = "Browse Schemas"
link = "https://schemas.sourcemeta.com/sourcemeta/std"
[[navigation]]
title = "Pricing"
link = "#pricing"
[[navigation]]
title = "FAQ"
link = "#faq"
[[navigation]]
title = "Open Source"
link = "#opensource"
+++
{{< blueprint color="white" class="border-top pt-4 pt-md-5 pb-5" >}}
<div class="text-center mb-5">
<h1 class="display-3 d-none d-lg-block fw-bold text-dark mb-4 mx-auto" style="max-width: 1200px;">
Design OpenAPI Specs <br><span class="text-gradient-metal"><span id="typewriter" data-variants='["That Actually Validate Correctly","Your Docs Generator Will Love","That Actually Pass Industry Audits","That LLMs Will Actually Understand"]'>That Actually Validate Correctly</span><span id="cursor" class="fw-normal">_</span></span>
</h1>
<h1 class="display-6 d-lg-none fw-bold text-dark mb-4">
Design OpenAPI Specs <br><span class="text-gradient-metal"><span id="typewriter-mobile">That Actually Validate Correctly</span><span id="cursor-mobile" class="fw-normal">_</span></span>
</h1>
<script>
(function() {
const typewriterElement = document.getElementById('typewriter');
const typewriterMobileElement = document.getElementById('typewriter-mobile');
const cursorElement = document.getElementById('cursor');
const cursorMobileElement = document.getElementById('cursor-mobile');
const phrases = JSON.parse(typewriterElement.getAttribute('data-variants'));
let currentPhraseIndex = 0;
let currentCharIndex = phrases[0].length;
let isDeleting = false;
let isPaused = true;
function type() {
if (isPaused) {
return;
}
const currentPhrase = phrases[currentPhraseIndex];
if (isDeleting) {
currentCharIndex--;
const text = currentPhrase.substring(0, currentCharIndex);
typewriterElement.textContent = text;
typewriterMobileElement.textContent = text;
if (currentCharIndex === 0) {
isDeleting = false;
currentPhraseIndex = (currentPhraseIndex + 1) % phrases.length;
isPaused = true;
setTimeout(() => {
isPaused = false;
type();
}, 500);
return;
}
} else {
currentCharIndex++;
const text = currentPhrase.substring(0, currentCharIndex);
typewriterElement.textContent = text;
typewriterMobileElement.textContent = text;
if (currentCharIndex === currentPhrase.length) {
isPaused = true;
setTimeout(() => {
isPaused = false;
isDeleting = true;
type();
}, 2500);
return;
}
}
const typingSpeed = isDeleting ? 30 : 60;
setTimeout(type, typingSpeed);
}
setInterval(() => {
cursorElement.style.opacity = cursorElement.style.opacity === '0' ? '1' : '0';
cursorMobileElement.style.opacity = cursorMobileElement.style.opacity === '0' ? '1' : '0';
}, 500);
setTimeout(() => {
isPaused = false;
isDeleting = true;
type();
}, 2500);
})();
</script>
<p class="lead text-muted mb-4 mx-auto" style="max-width: 800px;">A growing collection of over +300 battle-tested schemas (ISO, IETF, IEC, W3C, etc) to power your next API spec, so you never have to bother with JSON Schema again</i></p>
<div class="mt-4">
<a class="btn btn-lg btn-primary me-2" href="#pricing" role="button">
<i class="bi bi-infinity me-2"></i>Get Lifetime Access
</a>
<a class="btn btn-lg btn-light border" href="https://schemas.sourcemeta.com/sourcemeta/std" role="button">
<i class="bi bi-box-arrow-up-right me-1"></i> Browse Schemas
</a>
</div>
<a href="#pricing" class="text-decoration-none d-inline-block mt-5">
<div class="p-3 border border-primary bg-light rounded hover-lift">
<p class="mb-0 fw-semibold text-dark">
Commercial library with <span class="fw-bold fst-italic">perpetual pricing</span>. Pay once, use forever. <span class="fw-light">No subscription hell</span>
</p>
</div>
</a>
<div class="mt-3">
<small class="text-muted fw-light"><i class="bi bi-shield-check me-1"></i> Maintained by a member of the JSON Schema Technical Steering Committee</small>
</div>
</div>
<div class="mt-5">
<h3 class="h4 fw-bold text-center mb-2">What's Inside: Some Sample Schemas from the Library</h3>
<p class="text-center text-muted mb-4">
<small>Hint: Your OpenAPI specs in YAML format can directly reference these schemas in JSON format using <a href="https://www.learnjsonschema.com/2020-12/core/ref"><code>$ref</code></a></small>
</p>
<style>
.schema-editor-window {
border-radius: 12px;
overflow: hidden;
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
}
.schema-tab {
background: #1e1e1e;
color: #858585;
border: none;
border-right: 1px solid #3c3c3c;
border-bottom: 2px solid transparent;
padding: 0.75rem 1.5rem;
font-size: 0.875rem;
cursor: pointer;
transition: background 0.2s, color 0.2s;
}
.schema-tab:hover {
background: #2d2d2d;
color: #ffffff;
}
.schema-tab.active {
background: #2d2d2d;
color: #ffffff;
border-bottom-color: #007acc;
}
.line-numbers {
color: #858585;
user-select: none;
text-align: right;
padding-right: 1rem;
border-right: 1px solid #3c3c3c;
min-width: 3.5rem;
width: 3.5rem;
}
.tab-line-count {
font-size: 0.75rem;
color: #666;
font-weight: normal;
}
.browse-link {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: #ffffff;
font-weight: 600;
border-right: none;
text-decoration: none;
display: inline-block;
}
.browse-link:hover {
background: linear-gradient(135deg, #5568d3 0%, #6a4193 100%);
color: #ffffff;
transform: translateY(-1px);
}
</style>
<div class="schema-editor-window">
<!-- Window Controls -->
<div class="d-flex align-items-center px-3 py-2" style="background: #2d2d2d;">
<div class="d-flex gap-1 me-3">
<div class="rounded-circle" style="width: 12px; height: 12px; background: #ff5f56;"></div>
<div class="rounded-circle" style="width: 12px; height: 12px; background: #ffbd2e;"></div>
<div class="rounded-circle" style="width: 12px; height: 12px; background: #27c93f;"></div>
</div>
<span class="small text-white-50" id="schema-filename">jsonrpc/v2.0/request.json</span>
</div>
<!-- Tabs -->
<div class="d-flex" style="background: #1e1e1e;">
<button class="schema-tab active" data-schema="jsonrpc">
JSON-RPC Request <span class="tab-line-count" id="tab-jsonrpc"></span>
</button>
<button class="schema-tab" data-schema="currency">
ISO Currency <span class="tab-line-count" id="tab-currency"></span>
</button>
<button class="schema-tab" data-schema="xbrl">
XBRL Monetary <span class="tab-line-count" id="tab-xbrl"></span>
</button>
<button class="schema-tab" data-schema="uri">
URI Reference <span class="tab-line-count" id="tab-uri"></span>
</button>
<a href="https://schemas.sourcemeta.com/sourcemeta/std" class="schema-tab browse-link" target="_blank" rel="noopener noreferrer">
<i class="bi bi-box-arrow-up-right me-1"></i> Browse All 300+ Schemas
</a>
</div>
<!-- Editor Content -->
<div style="max-height: 600px; background: #1e1e1e; overflow-y: auto;">
<div class="d-flex" style="font-size: 0.875rem; line-height: 1.6;">
<pre class="m-0 p-3 line-numbers" id="line-numbers">1</pre>
<pre class="m-0 p-3 flex-grow-1"><code id="schema-content" class="language-json text-white-50">Loading schema...</code></pre>
</div>
</div>
<!-- Footer -->
<div style="background: #252526; border-top: 1px solid #3c3c3c;">
<div class="px-3 py-2" style="background: #2d2d30; border-bottom: 1px solid #3c3c3c;">
<small class="text-white-50 text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">
<i class="bi bi-info-circle-fill text-info me-2"></i>About This Schema
</small>
</div>
<div class="p-3" id="schema-description">
<div class="d-flex align-items-start mb-2">
<i class="bi bi-check-circle-fill text-success me-2" style="font-size: 0.85rem; margin-top: 2px;"></i>
<span class="small text-white-50">Implements the official JSON-RPC 2.0 specification for remote procedure calls</span>
</div>
<div class="d-flex align-items-start mb-2">
<i class="bi bi-check-circle-fill text-success me-2" style="font-size: 0.85rem; margin-top: 2px;"></i>
<span class="small text-white-50">Validates request structure, method names, and parameter formats</span>
</div>
<div class="d-flex align-items-start">
<i class="bi bi-check-circle-fill text-success me-2" style="font-size: 0.85rem; margin-top: 2px;"></i>
<span class="small text-white-50">Used by thousands of APIs for standardized RPC communication</span>
</div>
</div>
</div>
</div>
<script>
(function() {
const schemas = {
jsonrpc: {
url: 'https://schemas.sourcemeta.com/sourcemeta/std/v0/jsonrpc/v2.0/request.json?bundle=1',
filename: 'jsonrpc/v2.0/request.json',
description: `
<div class="d-flex align-items-start mb-2">
<i class="bi bi-check-circle-fill text-success me-2" style="font-size: 0.85rem; margin-top: 2px;"></i>
<span class="small text-white-50">Implements the official JSON-RPC 2.0 specification for remote procedure calls</span>
</div>
<div class="d-flex align-items-start mb-2">
<i class="bi bi-check-circle-fill text-success me-2" style="font-size: 0.85rem; margin-top: 2px;"></i>
<span class="small text-white-50">Validates request structure, method names, and parameter formats</span>
</div>
<div class="d-flex align-items-start">
<i class="bi bi-check-circle-fill text-success me-2" style="font-size: 0.85rem; margin-top: 2px;"></i>
<span class="small text-white-50">Critical for JSON-RPC based APIs like MCP (Model Context Protocol)</span>
</div>
`,
data: null
},
currency: {
url: 'https://schemas.sourcemeta.com/sourcemeta/std/v0/iso/currency/2015/alpha-code.json?bundle=1',
filename: 'iso/currency/2015/alpha-code.json',
description: `
<div class="d-flex align-items-start mb-2">
<i class="bi bi-check-circle-fill text-success me-2" style="font-size: 0.85rem; margin-top: 2px;"></i>
<span class="small text-white-50">Based on ISO 4217 standard for currency codes</span>
</div>
<div class="d-flex align-items-start mb-2">
<i class="bi bi-check-circle-fill text-success me-2" style="font-size: 0.85rem; margin-top: 2px;"></i>
<span class="small text-white-50">Covers currencies, funds, and precious metals like gold and silver</span>
</div>
<div class="d-flex align-items-start">
<i class="bi bi-check-circle-fill text-success me-2" style="font-size: 0.85rem; margin-top: 2px;"></i>
<span class="small text-white-50">Essential for financial APIs and e-commerce platforms</span>
</div>
`,
data: null
},
xbrl: {
url: 'https://schemas.sourcemeta.com/sourcemeta/std/v0/xbrl/instance/2003/monetary-item-type.json?bundle=1',
filename: 'xbrl/instance/2003/monetary-item-type.json',
description: `
<div class="d-flex align-items-start mb-2">
<i class="bi bi-check-circle-fill text-success me-2" style="font-size: 0.85rem; margin-top: 2px;"></i>
<span class="small text-white-50">Implements the XBRL financial reporting standard</span>
</div>
<div class="d-flex align-items-start mb-2">
<i class="bi bi-check-circle-fill text-success me-2" style="font-size: 0.85rem; margin-top: 2px;"></i>
<span class="small text-white-50">Commonly used for accountancy and financial disclosures</span>
</div>
<div class="d-flex align-items-start">
<i class="bi bi-check-circle-fill text-success me-2" style="font-size: 0.85rem; margin-top: 2px;"></i>
<span class="small text-white-50">Widely adopted by regulatory bodies and financial authorities worldwide</span>
</div>
`,
data: null
},
uri: {
url: 'https://schemas.sourcemeta.com/sourcemeta/std/v0/ietf/uri/uri-reference.json?bundle=1',
filename: 'ietf/uri/uri-reference.json',
description: `
<div class="d-flex align-items-start mb-2">
<i class="bi bi-check-circle-fill text-success me-2" style="font-size: 0.85rem; margin-top: 2px;"></i>
<span class="small text-white-50">Implements IETF RFC 3986 for URI validation</span>
</div>
<div class="d-flex align-items-start mb-2">
<i class="bi bi-check-circle-fill text-success me-2" style="font-size: 0.85rem; margin-top: 2px;"></i>
<span class="small text-white-50">Validates URLs, URNs, and all URI formats correctly</span>
</div>
<div class="d-flex align-items-start">
<i class="bi bi-check-circle-fill text-success me-2" style="font-size: 0.85rem; margin-top: 2px;"></i>
<span class="small text-white-50">Fully supports both relative and absolute URIs</span>
</div>
`,
data: null
}
};
const contentElement = document.getElementById('schema-content');
const lineNumbersElement = document.getElementById('line-numbers');
const filenameElement = document.getElementById('schema-filename');
const descriptionElement = document.getElementById('schema-description');
const tabs = document.querySelectorAll('.schema-tab[data-schema]');
function syntaxHighlight(json) {
json = json.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) {
let cls = 'text-warning';
if (/^"/.test(match)) {
if (/:$/.test(match)) {
cls = 'text-info';
} else {
cls = 'text-success';
}
} else if (/true|false/.test(match)) {
cls = 'text-primary';
} else if (/null/.test(match)) {
cls = 'text-secondary';
}
return '<span class="' + cls + '">' + match + '</span>';
});
}
function updateLineNumbers(text) {
const lineCount = text.split('\n').length;
lineNumbersElement.textContent = Array.from({length: lineCount}, (_, i) => i + 1).join('\n');
}
function updateTabLineCount(schemaKey, lineCount) {
const tabElement = document.getElementById('tab-' + schemaKey);
if (tabElement) {
tabElement.textContent = '(' + lineCount + ' lines)';
}
}
function loadSchema(schemaKey) {
const schema = schemas[schemaKey];
if (schema.data) {
contentElement.innerHTML = schema.data.highlighted;
updateLineNumbers(schema.data.formatted);
filenameElement.textContent = schema.filename;
descriptionElement.innerHTML = schema.description;
} else {
contentElement.textContent = 'Loading schema...';
lineNumbersElement.textContent = '1';
fetch(schema.url)
.then(response => response.json())
.then(data => {
const formatted = JSON.stringify(data, null, 2);
const highlighted = syntaxHighlight(formatted);
const lineCount = formatted.split('\n').length;
schema.data = { formatted, highlighted, lineCount };
contentElement.innerHTML = highlighted;
updateLineNumbers(formatted);
updateTabLineCount(schemaKey, lineCount);
filenameElement.textContent = schema.filename;
descriptionElement.innerHTML = schema.description;
})
.catch(error => {
contentElement.textContent = 'Error loading schema: ' + error.message;
contentElement.classList.add('text-danger');
lineNumbersElement.textContent = '1';
});
}
}
tabs.forEach(tab => {
tab.addEventListener('click', function() {
const schemaKey = this.getAttribute('data-schema');
tabs.forEach(t => t.classList.remove('active'));
this.classList.add('active');
loadSchema(schemaKey);
});
});
// Preload all schemas
Object.keys(schemas).forEach(schemaKey => {
const schema = schemas[schemaKey];
fetch(schema.url)
.then(response => response.json())
.then(data => {
const formatted = JSON.stringify(data, null, 2);
const highlighted = syntaxHighlight(formatted);
const lineCount = formatted.split('\n').length;
schema.data = { formatted, highlighted, lineCount };
updateTabLineCount(schemaKey, lineCount);
// If this is the first schema, display it
if (schemaKey === 'jsonrpc') {
contentElement.innerHTML = highlighted;
updateLineNumbers(formatted);
filenameElement.textContent = schema.filename;
descriptionElement.innerHTML = schema.description;
}
})
.catch(error => {
console.error('Error preloading schema ' + schemaKey + ':', error);
});
});
})();
</script>
</div>
{{< /blueprint >}}
<section class="bg-light-subtle border-top border-bottom py-5 shadow-sm">
<div class="container">
<div class="row align-items-center">
<div class="col-12 col-lg-6 mb-4 mb-lg-0">
<h2 class="h3 fw-bold mb-3">Built on the foundations of our digital world</h2>
<p class="lead text-muted mb-0">Every schema in this library represents careful implementation of the standards that power the modern internet (many behind expensive paywalls), ensuring your APIs are built on proven, battle-tested, and compliant foundations.</p>
</div>
<div class="col-12 col-lg-6 mt-4 mt-lg-0">
<div class="d-flex flex-column justify-content-center align-items-center gap-4 h-100">
<div class="d-flex flex-wrap justify-content-center align-items-center gap-4 gap-lg-5">
<a href="https://www.ietf.org" target="_blank" rel="noopener noreferrer">
<img src="/products/std/ietf.svg" alt="IETF" height="75" class="opacity-75">
</a>
<a href="https://www.iso.org" target="_blank" rel="noopener noreferrer">
<img src="/products/std/iso.svg" alt="ISO" height="75" class="opacity-75">
</a>
<a href="https://www.ieee.org" target="_blank" rel="noopener noreferrer">
<img src="/products/std/ieee.svg" alt="IEEE" height="60" class="opacity-75">
</a>
</div>
<div class="d-flex flex-wrap justify-content-center align-items-center gap-4 gap-lg-5">
<a href="https://www.iec.ch" target="_blank" rel="noopener noreferrer">
<img src="/products/std/iec.svg" alt="IEC" height="75" class="opacity-75">
</a>
<a href="https://www.w3.org" target="_blank" rel="noopener noreferrer">
<img src="/products/std/w3c.svg" alt="W3C" height="75" class="opacity-75">
</a>
<a href="https://www.xbrl.org" target="_blank" rel="noopener noreferrer">
<img src="/products/std/xbrl.svg" alt="XBRL" height="75" class="opacity-75">
</a>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="py-5 bg-light bg-gradient">
<div class="container">
<div class="text-center mb-5 mx-auto" style="max-width: 900px;">
<h2 class="display-6 fw-bold mb-3">Most API companies waste years reinventing the wheel, <span class="fw-bolder">and still doing it wrong</span></h2>
<p class="h4 text-muted fw-light">Your company is smarter than that</p>
</div>
<div class="row g-5 mb-3">
<div class="col-12 col-xl-4">
{{< box header="Correctness" icon="bi-arrow-repeat" title="Your schemas are broken and you don't know it" >}}
We worked with dozens of API companies, and less than 4% of developers unit tests their OpenAPI schemas. Unsurprisingly, they had subtle schema bugs that you can avoid.
{{< /box >}}
</div>
<div class="col-12 col-xl-4">
{{< box header="Compliance" icon="bi-toggles" title="All of those standards exist for a reason" >}}
Take country codes. Too strict? You reject less-known countries. Too loose? You introduce compliance issues, and accept SQL injection attacks and other vulnerabilities. We take the risk out.
{{< /box >}}
</div>
<div class="col-12 col-xl-4">
{{< box header="Productivity" icon="bi-hourglass-split" title="Writing schemas yourself is expensive" >}}
Just the <a href="https://www.iso.org/iso-8601-date-and-time-format.html">ISO 8601</a> date and time specification is 50+ pages long and costs around $500 USD. We implemented it in 115 variants covered by 6000 edge cases. And that's a single data type.
{{< /box >}}
</div>
</div>
</div>
</section>
<section class="py-5 border-top">
<div class="container">
<div class="text-center mb-5">
<h2 class="display-6 fw-bold mb-3">Use the schemas your way</h2>
<p class="lead text-muted">We don't lock you in. Choose the method that works best for your workflow</p>
</div>
<div class="row g-5">
<div class="col-12 col-md-6 col-lg-4">
<div class="text-center">
<div class="mb-3">
<img src="from-https.png" alt="HTTPS URLs" class="img-fluid rounded shadow-sm border border-dark">
</div>
<h4 class="h5 fw-bold mb-2">HTTPS URLs</h4>
<p class="text-muted small mb-0">Directly reference schemas from <a href="https://schemas.sourcemeta.com/sourcemeta/std">schemas.sourcemeta.com</a> using the <a href="https://www.learnjsonschema.com/2020-12/core/ref"><code>$ref</code></a> JSON Schema keyword and de-reference them with well known OpenAPI tools like <a href="https://redocly.com/docs/cli/commands/bundle"><code>redocly bundle</code></a></p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-4">
<div class="text-center">
<div class="mb-3">
<img src="from-editors.png" alt="OpenAPI Editors" class="img-fluid rounded shadow-sm border border-dark">
</div>
<h4 class="h5 fw-bold mb-2">OpenAPI Editors</h4>
<p class="text-muted small mb-0">Most popular OpenAPI editors, such as <a href="https://scalar.com">Scalar</a>, can de-reference external HTTPS requests to schemas hosted in public schema registries like <a href="https://schemas.sourcemeta.com/sourcemeta/std">schemas.sourcemeta.com</a></p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-4">
<div class="text-center">
<div class="mb-3">
<img src="from-submodule.png" alt="Git Submodule" class="img-fluid rounded shadow-sm border border-dark">
</div>
<h4 class="h5 fw-bold mb-2">Git Submodule</h4>
<p class="text-muted small mb-0">Our schemas are publicly available on <a href="https://github.com/sourcemeta/std">GitHub</a>. Pull them as a submodule like any other dependency and reference them from your OpenAPI specs using relative file paths</p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-4">
<div class="text-center">
<div class="mb-3">
<img src="from-registry.png" alt="Schema Registries" class="img-fluid rounded shadow-sm border border-dark">
</div>
<h4 class="h5 fw-bold mb-2">Schema Registries</h4>
<p class="text-muted small mb-0">For extra power and organisation-wide API Governance programs, ingest the schemas in JSON Schema 2020-12 compatible registries like the <a href="/">Sourcemeta Registry</a></p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-4">
<div class="text-center">
<div class="mb-3">
<img src="from-zip.png" alt="Download Archive" class="img-fluid rounded shadow-sm border border-dark">
</div>
<h4 class="h5 fw-bold mb-2">Download Archive</h4>
<p class="text-muted small mb-0">Often useful in scripting environments. Fetch the latest ZIP or tarball from <a href="https://github.com/sourcemeta/std/releases">GitHub Releases</a> and use the JSON files that come with it as you wish</p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-4">
<div class="text-center">
<div class="mb-3">
<img src="from-copypaste.png" alt="Copy & Paste" class="img-fluid rounded shadow-sm border border-dark">
</div>
<h4 class="h5 fw-bold mb-2">Copy & Paste</h4>
<p class="text-muted small mb-0">Sometimes you don't need to get fancy. You can always browse the schemas in <a href="https://schemas.sourcemeta.com/sourcemeta/std">schemas.sourcemeta.com</a> and just copy-paste the ones you need</p>
</div>
</div>
</div>
</div>
</section>
<section id="pricing" class="bg-light border-top border-bottom py-5">
<div class="container">
<h3 class="display-6 fw-bold mb-3">Pricing</h3>
<p class="lead mb-5"><b>Pay Once, Use Forever</b>. Not per API. Not per developer. Not per revenue milestone. One payment for your company, unlimited use, for all your current and future APIs and JSON Schema projects, forever. No SaaS subscription hell.</p>
<div class="row g-4 mb-4">
<div class="col-12 col-lg-4">
<div class="d-flex flex-column gap-4 h-100">
<div class="card shadow-sm flex-grow-1">
<div class="card-body text-center p-4">
<h3 class="h4 fw-bold mb-2">Community</h3>
<h2 class="display-6 mb-3">€0</h2>
<p class="text-muted mb-2">Free forever for non-commercial projects such as personal projects, open specifications, research, and open-source organisations.</p>
<p class="text-muted fw-light small mb-3">Note: Requires attribution</p>
<a href="https://github.com/sourcemeta/std" class="btn btn-outline-primary">View on GitHub</a>
</div>
</div>
<div class="card shadow-sm flex-grow-1">
<div class="card-body text-center p-4">
<h3 class="h4 fw-bold mb-2">OEM</h3>
<h2 class="display-6 mb-3">Custom</h2>
<p class="text-muted mb-3">Offer our schemas to your end users as part of your own product (i.e. OpenAPI editors and API management platforms) in a white-labelling manner and without attribution</p>
<a href="mailto:hello@sourcemeta.com" class="btn btn-outline-primary">Let's Talk!</a>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-8 mt-5 mt-lg-4">
<div class="position-relative h-100">
<div class="position-absolute top-0 start-50 translate-middle" style="z-index: 10;">
<span class="badge bg-primary px-3 py-2">Most Popular</span>
</div>
<div class="card border-primary shadow-lg h-100">
<div class="card-header py-3 text-bg-primary border-primary text-center">
<h3 class="h2 my-0 fw-bold">Commercial</h3>
</div>
<div class="card-body d-flex flex-column text-center">
<h1 class="display-3 fw-bold mb-1">{{< price >}}</h1>
<p class="lead text-muted mb-4">One-time payment (no subscription)</p>
<ul class="list-unstyled mb-4 text-start mx-auto">
<li class="mb-3"><i class="bi bi-check-circle-fill text-success me-2"></i>Commercial use (for a single company)</li>
<li class="mb-3"><i class="bi bi-check-circle-fill text-success me-2"></i>Lifetime access to power all your APIs</li>
<li class="mb-3"><i class="bi bi-check-circle-fill text-success me-2"></i>Free updates forever</li>
<li class="mb-3"><i class="bi bi-check-circle-fill text-success me-2"></i>All future schemas included</li>
<li class="mb-3"><i class="bi bi-check-circle-fill text-success me-2"></i>Premium support (Slack Connect or Discord)</li>
<li class="mb-3"><i class="bi bi-check-circle-fill text-success me-2"></i>Publish public OpenAPI specs that use the schemas</li>
<li class="mb-3"><i class="bi bi-check-circle-fill text-success me-2"></i>Request any new schemas you need</li>
</ul>
<div class="mt-auto">
<a href="https://store.sourcemeta.com/checkout/buy/670d6aac-d746-4dd7-aa82-f61f160ceb5b" class="btn btn-primary btn-lg px-5 mb-3">Purchase License</a>
<p class="small text-muted mb-0"><a href="mailto:hello@sourcemeta.com">Contact us</a> for a full refund within 30-days of purchase. No questions asked</p>
</div>
</div>
</div>
</div>
</div>
</div>
<p class="mb-5 small text-muted">Read the <a href="https://github.com/sourcemeta/std/blob/main/LICENSE">license</a> document for more details. If you have questions , don't hesitate to <a href="mailto:hello@sourcemeta.com">reach out</a>!</p>
<div class="alert alert-light border mt-5 mb-0">
<p class="mb-0"><i class="bi bi-info-circle me-2"></i>This library is maintained by a <a href="https://www.linkedin.com/in/jviotti/" class="fw-semibold">member of the JSON Schema Technical Steering Committee</a>. Your purchase directly supports our open-source contributions and continuous involvement in the JSON Schema ecosystem. Thanks for your help making the JSON Schema standard thrive!</p>
</div>
</div>
</section>
<section class="py-5 bg-white">
<div class="container">
<div class="text-center mb-5">
<h2 class="display-5 fw-bold mb-3">What's the Alternative?</h2>
<p class="lead text-muted mx-auto" style="max-width: 1100px;">This is not about <a href="https://www.learnjsonschema.com/2020-12/core/ref"><code>$ref</code></a>. It's about having the in-house talent and correctly implementing <strong>dozens of specifications</strong>, reading paywalled standards, handling edge cases, keeping up with updates, and obsessively guaranteeing compliance.</p>
</div>
<div class="table-responsive">
<table class="table table-bordered">
<thead>
<tr>
<th class="bg-light p-3" style="width: 20%;"></th>
<th class="text-center p-3" style="width: 20%;">
<span class="fw-bold">Do it yourself</span>
</th>
<th class="text-center p-3" style="width: 20%;">
<span class="fw-bold">With ChatGPT</span>
</th>
<th class="text-center p-3" style="width: 20%;">
<span class="fw-bold">Ignore the problem</span>
</th>
<th class="text-center bg-success bg-opacity-10 border-top border-start border-end border-dark border-2 p-3" style="width: 20%;">
<span class="fw-bold">With <img src="/logo.svg" alt="Sourcemeta" height="20" class="align-text-bottom mx-1"> Sourcemeta</span>
</th>
</tr>
</thead>
<tbody>
<tr>
<td class="bg-light fw-semibold p-3">Reading Specifications</td>
<td class="p-3">€30,000<br><small class="text-muted">(375 hours)</small></td>
<td class="p-3"><span class="text-muted">Hope ChatGPT was illegaly trained with the potentially copyrighted standards</span></td>
<td class="p-3"><span class="text-muted">Not needed</span></td>
<td class="bg-success bg-opacity-10 border-start border-end border-dark border-2 p-3"><i class="bi bi-check-circle-fill text-success"></i> <span class="fw-semibold">Done for you</span></td>
</tr>
<tr>
<td class="bg-light fw-semibold p-3">Implementation & Testing</td>
<td class="p-3">€60,000<br><small class="text-muted">(750 hours)</small></td>
<td class="p-3"><span class="text-muted">Ask ChatGPT</span></td>
<td class="p-3"><span class="text-muted">Basic type checks everywhere</span></td>
<td class="bg-success bg-opacity-10 border-start border-end border-dark border-2 p-3"><i class="bi bi-check-circle-fill text-success"></i> <span class="fw-semibold">Hundreds of schemas ready and more coming</span></td>
</tr>
<tr>
<td class="bg-light fw-semibold p-3">Annual Maintenance</td>
<td class="p-3">€20,000/year<br><small class="text-muted">(250 hours)</small></td>
<td class="p-3"><span class="text-muted">Ask ChatGPT again</span></td>
<td class="p-3"><span class="text-muted">None (as you are barely validating)</span></td>
<td class="bg-success bg-opacity-10 border-start border-end border-dark border-2 p-3"><i class="bi bi-check-circle-fill text-success"></i> <span class="fw-semibold">Free updates forever</span></td>
</tr>
<tr>
<td class="bg-light fw-semibold p-3">Standards Compliance</td>
<td class="p-3 text-warning"><i class="bi bi-exclamation-triangle-fill"></i> If done correctly</td>
<td class="p-3 text-danger"><i class="bi bi-x-circle-fill"></i> No guarantees</td>
<td class="p-3 text-danger"><i class="bi bi-x-circle-fill text-danger"></i> No compliance at all</td>
<td class="bg-success bg-opacity-10 border-start border-end border-dark border-2 p-3"><i class="bi bi-check-circle-fill text-success"></i> <span class="fw-semibold">Guaranteed</span></td>
</tr>
<tr>
<td class="bg-light fw-semibold p-3">Security Risks</td>
<td class="p-3 text-warning"><i class="bi bi-exclamation-triangle-fill"></i> Low (if done correctly)</td>
<td class="text-danger p-3">Data breach: <span class="fw-bold">€50K-500K+</span><br><small>GDPR: €20M or 4% revenue</small></td>
<td class="text-danger p-3">Security incident: <span class="fw-bold">€100K+</span></td>
<td class="bg-success bg-opacity-10 border-start border-end border-dark border-2 p-3"><i class="bi bi-check-circle-fill text-success"></i> <span class="fw-semibold">Battle-tested</span></td>
</tr>
<tr>
<td class="bg-light fw-semibold p-3">Support</td>
<td class="p-3">Your team's problem</td>
<td class="p-3">Your team's problem</td>
<td class="p-3">Your team's problem</td>
<td class="bg-success bg-opacity-10 border-start border-end border-dark border-2 p-3"><i class="bi bi-check-circle-fill text-success"></i> <span class="fw-bold">Premium support by a member of the JSON Schema Technical Steering Committee</span></td>
</tr>
<tr class="border-top border-dark border-2">
<td class="bg-light fw-bold p-3">Total First Year</td>
<td class="bg-danger bg-opacity-25 fw-bold p-3 text-danger">€110,000+<br><small class="text-dark fw-normal">Assuming you managed to hire a JSON Schema expert</small></td>
<td class="bg-danger bg-opacity-25 fw-bold p-3 text-danger">€0 → Catastrophic Risk<br><small class="text-dark fw-normal">Worth saving {{< price >}}?</small></td>
<td class="bg-danger bg-opacity-25 fw-bold p-3 text-danger">€0 → High Risk<br><small class="text-dark fw-normal">Worth saving {{< price >}}?</small></td>
<td class="bg-success text-white fw-bold fs-5 border-bottom border-start border-end border-dark border-2 p-3">{{< price >}}<br><small class="text-white">ROI in the first week</small></td>
</tr>
</tbody>
</table>
</div>
<p class="text-muted text-center mt-1"><small>Cost calculations assume a mid-level developer at €80/hour (conservative industry average)</small></p>
</div>
</section>
<section class="py-5 bg-gradient" style="background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);">
<div class="container">
<div class="text-center mb-5">
<h2 class="display-5 fw-bold mb-3">An investment that quickly pays for itself</h2>
<p class="lead text-muted w-lg-75 mx-auto">Solve the OpenAPI authoring problem for your company forever</p>
</div>
<div class="row g-4 text-center mb-5">
<div class="col-12 col-md-6 col-lg-3">
<div class="p-4 bg-white rounded h-100 border border-dark border-2">
<div class="display-1 text-primary mb-3"><i class="bi bi-coin"></i></div>
<h3 class="h6 fw-bold mb-2">A week of developer salary</h3>
<p class="text-muted small mb-0">A fraction of the time and cost to produce these schemas yourself</p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-3">
<div class="p-4 bg-white rounded h-100 border border-dark border-2">
<div class="display-1 text-primary mb-3"><i class="bi bi-infinity"></i></div>
<h3 class="h6 fw-bold mb-2">Perpetual ownership</h3>
<p class="text-muted small mb-0">Every project, every team, forever. Including all new schemas</p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-3">
<div class="p-4 bg-white rounded h-100 border border-dark border-2">
<div class="display-1 text-primary mb-3"><i class="bi bi-slack"></i></div>
<h3 class="h6 fw-bold mb-2">World-class support included</h3>
<p class="text-muted small mb-0">Have an API and JSON Schema expert on your speed dial for help</p>
</div>
</div>
<div class="col-12 col-md-6 col-lg-3">
<div class="p-4 bg-white rounded h-100 border border-dark border-2">
<div class="display-1 text-primary mb-3">6+</div>
<h3 class="h6 fw-bold mb-2">Months of work saved per API</h3>
<p class="text-muted small mb-0">Avoid a whole class of input/output correctness and security bugs</p>
</div>
</div>
</div>
{{< talk-to-us >}}
</div>
</section>
<section class="py-5 position-relative overflow-hidden">
<div class="container position-relative">
<div class="text-center mb-5">
<h2 class="display-5 fw-bold mb-3">Trusted by elite API architects</h2>
<p class="lead text-muted">See what the world's leading specification experts are saying</p>
</div>
<div class="row g-4">
<div class="col-12 col-md-6 col-lg-4">
{{< testimonial github="ronitelman" name="Ron Itelman" role="Founder at TrustLoop.ai" >}}This is definitely going to become an incredibly important reference library for defining concepts using best in class standards{{< /testimonial >}}
</div>
<div class="col-12 col-md-6 col-lg-4">
{{< testimonial github="mwadams" name="Matthew Adams" role="Founder at Endjin Limited" >}}This is a terrific project and should be a standard subscription for any enterprise working with JSON Schema{{< /testimonial >}}
</div>
<div class="col-12 col-md-6 col-lg-4">
{{< testimonial github="paraskakis" name="Emmanuel Paraskakis" role="Founder at Level 250" >}}This aligns exactly with my thinking! OpenAPI should not include schemas but should reference them externally from a source of truth like this one{{< /testimonial >}}
</div>
<div class="col-12 col-md-6 col-lg-6">
{{< testimonial github="ikenna" name="Ikenna Nwaiwu" role="API Governance Consultant at Ikenna Consulting" >}}Before this library, defining foundational schemas in an enterprise was a time-consuming, error-prone task that could result in inconsistencies. This library is a game-changer, delivering huge time savings while ensuring improved API consistency and strong governance of API definition files{{< /testimonial >}}
</div>
<div class="col-12 col-md-6 col-lg-6">
{{< testimonial github="egekorkan" name="Ege Korkan" role="W3C Web of Things Expert" >}}Right now there is a big disconnect between ontology work and API work. This project has the potential to bridge that gap by making widely used ontologies available on JSON Schema{{< /testimonial >}}
</div>
</div>
</div>
</section>
<section class="py-5 bg-light border-top">
<div class="container">
<h3 class="display-6 fw-bold mb-3">Frequently Asked Questions</h3>
<p class="mb-5 small text-muted">Do you have any other questions regarding the schemas? Don't hesitate to <a href="mailto:hello@sourcemeta.com">reach out</a>!</p>
<div class="accordion" id="faqAccordion">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed fw-semibold" type="button" data-bs-toggle="collapse" data-bs-target="#faq1">
Can I publicly publish OpenAPI specs that use these schemas?
</button>
</h2>
<div id="faq1" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p>Yes. However, if your API is for-profit, you'll need a commercial license. Your end users can freely consume your published OpenAPI specification without needing their own license, as they're using your specification rather than directly consuming our schemas.</p>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed fw-semibold" type="button" data-bs-toggle="collapse" data-bs-target="#faq2">
Can I use this with existing schemas?
</button>
</h2>
<div id="faq2" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p>Absolutely. These schemas are designed as composable building blocks. Reference them, extend them, or add additional constraints as you wish.</p>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed fw-semibold" type="button" data-bs-toggle="collapse" data-bs-target="#faq3">
What JSON Schema version do these schemas use?
</button>
</h2>
<div id="faq3" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p class="mb-0">All schemas target <strong>JSON Schema 2020-12</strong>, which is the dialect used by OpenAPI v3.1 and later. Support for earlier JSON Schema dialects will be added in future releases.</p>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed fw-semibold" type="button" data-bs-toggle="collapse" data-bs-target="#faq4">
How often are schemas updated?
</button>
</h2>
<div id="faq4" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p>We regularly update schemas to reflect new standards, fix bugs, and expand coverage for additional specifications. We follow semantic versioning, so you can upgrade at your own pace without breaking existing specifications.</p>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed fw-semibold" type="button" data-bs-toggle="collapse" data-bs-target="#faq5">
Can I contribute schemas to the repository?
</button>
</h2>
<div id="faq5" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p>Yes. We welcome contributions via pull requests on <a href="https://github.com/sourcemeta/std">GitHub</a>.</p>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed fw-semibold" type="button" data-bs-toggle="collapse" data-bs-target="#faq6">
Can I modify the schemas?
</button>
</h2>
<div id="faq6" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p>Yes, as long as you preserve the license-related metadata keywords that identify the schema origin and licensing terms for downstream consumers.</p>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed fw-semibold" type="button" data-bs-toggle="collapse" data-bs-target="#faq7">
Can I use these schemas on open specifications from a body such as the IETF or W3C?
</button>
</h2>
<div id="faq7" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p>Yes. This qualifies under the Community license. Users of your specification can freely use the schemas as they are consuming your specification rather than our schemas directly.</p>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed fw-semibold" type="button" data-bs-toggle="collapse" data-bs-target="#faq8">
Should I get a commercial license if my company is for-profit but all of it is open-source?
</button>
</h2>
<div id="faq8" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p>Yes. A commercial license is required for any for-profit venture, regardless of whether your code is open-source.</p>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed fw-semibold" type="button" data-bs-toggle="collapse" data-bs-target="#faq9">
How do I correctly attribute these schemas?
</button>
</h2>
<div id="faq9" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p>If you use the schemas unmodified, the embedded metadata provides automatic attribution. No additional action is required.</p>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed fw-semibold" type="button" data-bs-toggle="collapse" data-bs-target="#faq10">
Do I need to pay every time I use this on an API?
</button>
</h2>
<div id="faq10" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p>We charge a one time fee per company. Once you bought it for your company, you can use it to design as many APIs as you wish, forever.</p>
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed fw-semibold" type="button" data-bs-toggle="collapse" data-bs-target="#faq11">
Can't I just generate my API specifications with Swagger/OpenAPI generators?
</button>
</h2>
<div id="faq11" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">
<p>Generators help you scaffold OpenAPI structure, but the schemas they generate are very simple and loose, barely documenting the details of your API for compliance, security, and correctness purposes. In comparison, we did the work of defining correct and highly detailed schemas for hundreds of foundational types.</p>
</div>
</div>
</div>
</div>
</div>
</section>
{{< blueprint color="dark" class="border-top py-5" >}}
<div class="text-center py-4">
<h2 class="display-3 fw-bold mb-4 text-white">Ready to solve OpenAPI design<br><span class="text-gradient-metal">at your company forever?</span></h2>
<p class="lead mb-4 mx-auto text-white-50" style="max-width: 700px;">One payment. Perpetual access. Never write schemas from scratch again.</p>
<div class="d-flex flex-column flex-sm-row justify-content-center align-items-center gap-3 mb-4">
<a href="#pricing" class="btn btn-light btn-lg px-5 shadow">
<i class="bi bi-infinity me-2"></i>Get Lifetime Access
</a>
<a href="https://schemas.sourcemeta.com/sourcemeta/std" class="btn btn-outline-light btn-lg">
Browse Schemas First
</a>
</div>
<small class="text-white-50 d-block mt-3">
<i class="bi bi-shield-check me-1"></i>
30-day money-back guarantee • Maintained by a JSON Schema TSC member
</small>
</div>
{{< /blueprint >}}