# BUPKIS > A TypeScript assertion library using natural language function calls instead of chainable methods. Write `expect(value, 'to be a string')` instead of `expect(value).toBeString()`. - Natural language phrases: `expect(user, 'to satisfy', { name: expect.it('to be a string') })` - Automatic negation: `expect(42, 'not to be a string')` - Concatenation: `expect(n, 'to be a number', 'and', 'to be greater than', 0)` - Embeddable assertions: `expect.it()` for nested validation - Custom assertions: `createAssertion(['to be even'], (n) => n % 2 === 0)` - Uses Zod v4 for validation and type inference ## Docs - [Basic Usage](https://bupkis.zip/documents/Basic_Usage/) - [Creating Custom Assertions](https://bupkis.zip/documents/Creating_Custom_Assertions/) - [Testing Custom Assertions](https://bupkis.zip/documents/Testing_Custom_Assertions/) ## Assertions - [All Assertions](https://bupkis.zip/documents/All_Assertions/) - [Collections Assertions](https://bupkis.zip/documents/Collections_Assertions/) - [Date & Time Assertions](https://bupkis.zip/documents/Date___Time_Assertions/) - [Equality & Comparison Assertions](https://bupkis.zip/documents/Equality___Comparison_Assertions/) - [Error Assertions](https://bupkis.zip/documents/Error_Assertions/) - [Function Assertions](https://bupkis.zip/documents/Function_Assertions/) - [Iterable Assertions](https://bupkis.zip/documents/Iterable_Assertions/) - [Numeric Assertions](https://bupkis.zip/documents/Numeric_Assertions/) - [Object Assertions](https://bupkis.zip/documents/Object_Assertions/) - [Other Assertions](https://bupkis.zip/documents/Other_Assertions/) - [Primitive Assertions](https://bupkis.zip/documents/Primitive_Assertions/) - [Promise Assertions](https://bupkis.zip/documents/Promise_Assertions/) - [Snapshot Assertions](https://bupkis.zip/documents/Snapshot_Assertions/) - [String & Pattern Assertions](https://bupkis.zip/documents/String___Pattern_Assertions/) ## Reference - [About Assertions](https://bupkis.zip/documents/About_Assertions/) - [Caveats & Errata](https://bupkis.zip/documents/Caveats___Errata/) - [Glossary of Terms](https://bupkis.zip/documents/Glossary_of_Terms/) ## Release Notes - [@bupkis/events](https://bupkis.zip/documents/_bupkis_events/) - [@bupkis/from-chai](https://bupkis.zip/documents/_bupkis_from-chai/) - [@bupkis/from-jest](https://bupkis.zip/documents/_bupkis_from-jest/) - [@bupkis/http](https://bupkis.zip/documents/_bupkis_http/) - [@bupkis/msw](https://bupkis.zip/documents/_bupkis_msw/) - [@bupkis/property-testing](https://bupkis.zip/documents/_bupkis_property-testing/) - [@bupkis/rxjs](https://bupkis.zip/documents/_bupkis_rxjs/) - [@bupkis/sinon](https://bupkis.zip/documents/_bupkis_sinon/) - [bupkis](https://bupkis.zip/documents/bupkis/) ## Plugins - [@bupkis/events](https://bupkis.zip/documents/_bupkis_events-1/) - [@bupkis/http](https://bupkis.zip/documents/_bupkis_http-1/) - [@bupkis/msw](https://bupkis.zip/documents/_bupkis_msw-1/) - [@bupkis/rxjs](https://bupkis.zip/documents/_bupkis_rxjs-1/) - [@bupkis/sinon](https://bupkis.zip/documents/_bupkis_sinon-1/) ## Migration Tools - [@bupkis/from-assert](https://bupkis.zip/documents/_bupkis_from-assert/) - [@bupkis/from-chai](https://bupkis.zip/documents/_bupkis_from-chai-1/) - [@bupkis/from-jest](https://bupkis.zip/documents/_bupkis_from-jest-1/) ## Testing Utilities - [@bupkis/property-testing](https://bupkis.zip/documents/_bupkis_property-testing-1/) ## API - [API Reference](https://bupkis.zip/modules/bupkis/): Full TypeScript API documentation - [expect()](https://bupkis.zip/functions/bupkis.expect/): Main assertion function - [expectAsync()](https://bupkis.zip/functions/bupkis.expectAsync/): Async assertion function - [createAssertion()](https://bupkis.zip/functions/bupkis.createAssertion/): Create custom assertions - [use()](https://bupkis.zip/functions/bupkis.use/): Register custom assertions ## Quick Reference ```javascript // Type assertions expect(value, 'to be a string'); expect(value, 'to be a number'); expect(value, 'to be an array'); // Equality expect(actual, 'to equal', expected); expect(obj, 'to deep equal', expected); expect(obj, 'to satisfy', { name: 'Alice' }); // Negation expect(42, 'not to be a string'); // Concatenation expect(n, 'to be a number', 'and', 'to be greater than', 0); // Embeddable assertions expect(user, 'to satisfy', { name: expect.it('to be a string'), age: expect.it('to be greater than', 18) }); ```