Token counts
How many tokens an agent reads to write VibeLang, and how many a VibeLang program takes beside the Effect TypeScript it replaces.
An agent that writes VibeLang loads the skill first: its forms, rules and idioms, with a link to the page that owns each one. The vibelang npm package ships it at node_modules/vibelang/skills/vibelang/SKILL.md.
Method
Tokenizer: OpenAI's o200k_base encoding, through js-tiktoken 1.0.21. No Anthropic count is published: no verified offline tokenizer exists for current Claude models, and these docs do not estimate one.
Pages: each file's exact, complete Markdown source, nothing stripped. This page is not counted.
Cheat-sheet pairs: each entry's code blocks as the cheat sheet writes them, without the docs checker's // run: and // Output: lines. The sides are not normalized, and the table understates the difference: each VibeLang snippet is a complete, runnable function, while many Effect TypeScript snippets are fragments, with yield* outside the Effect.gen it needs, and none imports effect.
Script: docs/tools/token-counts.ts in the VibeLang repository measures every number below. bun docs/tools/token-counts.ts --check fails when this page drifts from what it measures, and --write updates it.
What an agent loads
Load Tokens The VibeLang skill, packages/compiler/skills/vibelang/SKILL.md 4,578 The skill and the cheat sheet 13,218 The skill and the user guide (130 pages) 195,592 The user guide alone 191,014 The specification (33 chapters) 102,246 The decision log, docs/design/DECISIONS.md 52,740
Effect TypeScript beside VibeLang
Each row is one cheat sheet entry: its Effect TypeScript blocks against its VibeLang blocks. A negative saving means the VibeLang snippet is longer.
Entry Effect TypeScript VibeLang Saved Effect types 81 58 28.4% Errors 28 9 67.9% Errors are classes 89 60 32.6% Errors that encode 29 12 58.6% Services 37 20 45.9% Services of any shape 47 23 51.1% Layers 45 41 8.9% Schemas 44 24 45.5% Schema aliases 18 10 44.4% Readonly by default 14 14 0.0% Statements instead of generators 48 44 8.3% Programs passed by name 28 27 3.6% Providing layers 36 19 47.2% Providing one service 51 49 3.9% Catching by tag 50 49 2.0% Falling back in an expression 40 21 47.5% Catching in an expression 47 41 12.8% Entry point 22 11 50.0% Catch every cause 49 48 2.0% Rethrow a cause 35 45 -28.6% Run on every exit 29 33 -13.8% Exit, yield, and interrupt 33 34 -3.0% Interruption 65 58 10.8% No imports from effect 16 11 31.3% Common functions without the Effect. prefix 43 31 27.9% Methods on Effect's data types 46 42 8.7% The pipe operator 29 31 -6.9% Throw in an expression 41 30 26.8% Blocks as values 34 46 -35.3% Blocks after calls 77 78 -1.3% Match a value 53 40 24.5% Match errors by class 59 44 25.4% Option, Exit, and Result 60 62 -3.3% Test and bind 44 45 -2.3% Plain, self-contained TypeScript inside sync, try, and callback 120 164 -36.7% TypeScript modules inline 99 94 5.1% Fork and join 43 34 20.9% Wait for several 62 57 8.1% First success, expected outcomes 53 48 9.4% Fork a block 52 37 28.8% Detached and scoped fibers 35 45 -28.6% Wait for a Deferred 30 28 6.7% Race 43 56 -30.2% A concurrent loop 40 28 30.0% All 44 entries 2,044 1,801 11.9%
Every page
Onboarding
Page Tokens Start Here 2,097 Welcome 1,497 Why VibeLang? 600 Learning Path 8,108 The Effect Type 1,587 Installation 1,827 Creating Effects 2,607 Two Types of Errors 646 Basic Concurrency 1,441 Core Concepts 13,271 Effect's Modules 1,087 Running Effects 1,511 Sequencing Effects 1,184 Building Pipelines 1,807 Devtools 7,682 All 12 pages 23,476
Setup
Page Tokens Set up VibeLang 1,062 Start a project 1,211 New project 480 Existing project 731 Build and test 2,483 vibelang CLI 1,498 Vite and Vitest 985 Format and lint 1,305 Format with dprint 1,305 Frameworks 6,996 React 1,931 Vue 2,687 Svelte 2,378 Editors 2,164 VS Code and Cursor 407 Neovim 999 Zed 431 Other editors 327 Upgrade 1,887 Release notes 1,887 All 14 pages 17,108
Guides
Page Tokens Getting Started 919 Error Management 13,126 Expected Errors 4,044 Unexpected Errors 1,293 Fallback 989 Matching 741 Retrying 764 Timing Out 844 Sandboxing 698 Error Accumulation 605 Error Channel Operations 1,334 Parallel and Sequential Errors 729 Custom Error Classes 1,085 Requirements Management 5,967 Managing Services 1,786 Default Services 965 Managing Layers 2,305 Layer Memoization 911 Resource Management 3,451 Introduction 1,545 Scope 1,906 Observability 6,462 Logging 1,945 Metrics 1,331 Tracing 2,453 Tracking Fibers 733 Configuration 2,689 Runtime 1,416 Scheduling 4,948 Using schedules 924 Choosing and combining schedules 1,591 Scheduling work with cron 1,208 Schedule cookbook 1,225 State Management 2,343 Ref 893 SynchronizedRef 711 SubscriptionRef 739 Batching 2,335 Caching 1,839 Caching Effects 859 Cache 980 Concurrency 6,808 Fibers 2,218 Deferred 886 Queue 1,266 PubSub 1,132 Semaphore 707 Latch 599 Stream 10,083 Introduction 1,076 Creating Streams 2,337 Consuming Streams 775 Error Handling 1,428 Operations 3,809 Resourceful Streams 658 Sink 3,980 Introduction 581 Creating Sinks 2,041 Operations 742 Leftovers 616 Testing 1,274 TestClock 1,274 Code Style 7,226 Guidelines 818 Dual APIs 1,043 Branded Types 1,138 Pattern Matching 1,595 Excessive Nesting 916 Control Flow Operators 1,716 Data Types 15,628 BigDecimal 1,308 Cause 1,107 Chunk 870 Data 1,470 DateTime 2,808 Duration 1,171 Result 1,480 Exit 1,010 HashSet 1,445 Option 2,273 Redacted 686 Trait 1,611 Equal 1,009 Hash 602 Behaviour 2,027 Equivalence 646 Order 1,381 Schema 30,939 Introduction 1,291 Getting Started 2,202 Basic Usage 2,610 Filters 1,469 Advanced Usage 2,818 Projections 676 Transformations 2,196 Annotations 1,100 Canonical Codecs 1,231 Error Messages 1,442 Error Formatters 1,088 Class APIs 1,800 Default Constructors 1,318 Effect Data Types 1,685 Standard Schema 843 Arbitrary 1,788 JSON Schema 1,860 Equivalence 822 Formatter 567 Schema Compilers 2,133 Platform 6,493 Introduction 993 FileSystem 1,164 Path 848 PlatformLogger 758 Runtime 1,219 Terminal 1,511 All 98 pages 131,564
VibeLang features
Specification
Page Tokens Introduction 1,605 Part I. The language by example 28,923 1. A first look 1,681 2. Functions and calls 1,470 3. Errors: the E channel 2,579 4. Dependency injection: the R channel 4,788 5. Programs as values: retry, timeout, and pipe 2,447 6. Resources 1,550 7. Concurrency 2,281 8. Producers: streams of values 979 9. Handlers: defining your own effects 2,414 10. Working with TypeScript 3,278 11. The standard library 2,171 12. Questions Effect users ask 3,285 Part II. The rules 12,384 13. What a call means 4,669 14. Contracts and inference 2,468 15. Which functions compile to plain JavaScript 2,175 16. Callbacks and higher-order functions 1,272 17. Failures, defects, interruption, and cleanup 1,800 Part III. The runtime 20,738 18. Why a continuation runtime 2,127 19. The checkout trace, step by step 1,582 20. The machine 3,284 21. One-shot ownership and races 1,885 22. What resume restores 1,478 23. Boundaries and finalization 1,663 24. What Effect provides and what the kernel adds 3,816 25. Implementation strategies and costs 1,933 26. What compiled code must guarantee 2,970 Part IV. The compiler 10,884 27. Compiler architecture 1,662 28. Tooling 9,222 Part V. Decisions 14,639 29. Decisions 11,993 30. Risks and experiments 2,646 Appendices 13,073 A. Evidence index and B. Prior art 4,883 C. Every Effect feature in VibeLang 8,190 All 33 pages 102,246