Tree-shaking is a build optimization technique that eliminates unused code from your final bundle. ByteKit is designed from the ground up to maximize tree-shaking effectiveness.
ByteKit’s ESM-only design and granular exports ensure that you only bundle what you actually use.
// Core functionality from main exportimport { ApiClient } from 'bytekit';// Specific utilities from modular exportsimport { slugify } from 'bytekit/string-utils';import { chunk } from 'bytekit/array-utils';
import { ArrayUtils } from 'bytekit/array-utils';import { StringUtils } from 'bytekit/string-utils';import { DateUtils } from 'bytekit/date-utils';import { NumberUtils } from 'bytekit/number-utils';import { ObjectUtils } from 'bytekit/object-utils';import { TimeUtils } from 'bytekit/time-utils';import { ColorUtils } from 'bytekit/color-utils';import { Validator } from 'bytekit/validator';import { EnvManager } from 'bytekit/env-manager';import { StorageUtils } from 'bytekit/storage-utils';import { CacheManager } from 'bytekit/cache-manager';import { CompressionUtils } from 'bytekit/compression-utils';import { CryptoUtils } from 'bytekit/crypto-utils';import { DiffUtils } from 'bytekit/diff-utils';import { EventEmitter } from 'bytekit/event-emitter';import { FormUtils } from 'bytekit/form-utils';import { HttpStatusHelper } from 'bytekit/http-status';import { UrlBuilder } from 'bytekit/url-builder';import { PaginationHelper } from 'bytekit/pagination-helper';import { PollingHelper } from 'bytekit/polling-helper';import { FileUploadHelper } from 'bytekit/file-upload';import { StreamingHelper } from 'bytekit/streaming';import { WebSocketHelper } from 'bytekit/websocket';import { Signal } from 'bytekit/signal';import { useSignal } from 'bytekit/use-signal';
Always prefer modular imports over full library imports:
Copy
// ✅ Goodimport { ApiClient } from 'bytekit/api-client';// ❌ Avoidimport { ApiClient } from 'bytekit';
2
Import Only What You Need
Don’t import entire utilities if you only need specific functions:
Copy
// If StringUtils has many methods but you only need slugify,// the tree-shaker will still remove unused methodsimport { StringUtils } from 'bytekit/string-utils';const slug = StringUtils.slugify('test');
3
Use Code Splitting
Split large modules into separate chunks:
Copy
// Dynamic import for heavy modulesconst { QueryClient } = await import('bytekit/query-client');
# Build your projectnpm run build# Analyze bundle sizels -lh dist/# Check what's included (search for ByteKit modules)grep -r "bytekit" dist/# Use a bundle analyzernpx vite-bundle-visualizer
If done correctly, you should only see the modules you explicitly imported in your bundle.