Compression Utilities Skill
Work with the URL-based storage and compression system.
When to Use
- Debugging URL encoding issues
- Optimizing compression performance
- Extending the storage format
- Handling special characters
Compression Pipeline
blocks → serializeBlocks (binary + compact props) → CompressionStream (deflate or brotli) → format byte + Base85 → URL hash
Format Versions
| Format byte |
Encoding |
Compression |
| (legacy) |
base64url |
deflate-raw |
| 0x01 |
base64url |
deflate-raw |
| 0x02 |
base85 |
deflate-raw |
| 0x03 |
base85 |
encrypted (AES-GCM) |
| 0x04 |
base85 |
brotli |
Format detection: if hash contains chars outside base64url (A-Za-z0-9_-), it's base85. Otherwise legacy base64url.
Compact Property Keys
Block properties use short keys when serialized:
lang → l
checked → c
start → s
emoji → e
depth → d
Encryption (Format 0x03)
AES-GCM-256 with PBKDF2 key derivation (120k iterations). Payload: salt(12) + IV(12) + ciphertext+tag(16). Triggered via "Lock with password" in Share menu.
URL Structure
https://example.com/?theme=dark#base85EncodedContent
Limitations
- URL length limits (~2000 chars safe, ~8000 max in modern browsers)
- Base85 adds ~25% overhead (vs base64 ~33%)
- Brotli supported in Safari 18.4+, Firefox 147+; deflate used as fallback
Debugging Tips
- Check browser console for compression errors
- Test with content containing special characters
- Verify URL doesn't exceed limits
- Use DevTools Network tab to check actual URL
- For encrypted content: ensure Web Crypto API is available