···53535454## Features
55555656+### File Filtering and `.wispignore`
5757+5858+Wisp automatically excludes common files that shouldn't be uploaded to your site (like `.git`, `node_modules`, `.env` files, etc.). You can customize this behavior by creating a `.wispignore` file in your site root.
5959+6060+The `.wispignore` file uses the same syntax as `.gitignore`:
6161+```
6262+# Custom ignore patterns
6363+*.log
6464+temp/
6565+build/
6666+.secret
6767+```
6868+6969+Default patterns include: `.git`, `.github`, `.gitlab`, `.DS_Store`, `node_modules`, `.env`, cache directories, Python virtual environments, editor swap files, `.tangled`, and more.
7070+7171+See [File Filtering Documentation](./docs/src/content/docs/file-filtering.md) for details.
7272+5673### URL Redirects and Rewrites
57745875The hosting service supports Netlify-style `_redirects` files for managing URLs. Place a `_redirects` file in your site root to enable:
+2
docs/src/content/docs/cli.md
···204204205205The CLI handles all file processing automatically to ensure reliable storage and delivery. Files are compressed with gzip at level 9 for optimal size reduction, then base64 encoded to bypass PDS content sniffing restrictions. Everything is uploaded as `application/octet-stream` blobs while preserving the original MIME type as metadata. When serving your site, the hosting service automatically decompresses non-HTML/CSS/JS files, ensuring your content is delivered correctly to visitors.
206206207207+**File Filtering**: The CLI automatically excludes common files like `.git`, `node_modules`, `.env`, and other development artifacts. Customize this with a [`.wispignore` file](/file-filtering).
208208+207209## Incremental Updates
208210209211The CLI tracks file changes using CID-based content addressing to minimize upload times and bandwidth usage. On your first deploy, all files are uploaded to establish the initial site. For subsequent deploys, the CLI compares content-addressed CIDs to detect which files have actually changed, uploading only those that differ from the previous version. This makes fast iterations possible even for large sites, with deploys completing in seconds when only a few files have changed.
+58
docs/src/content/docs/file-filtering.md
···11+---
22+title: File Filtering & .wispignore
33+description: Control which files are uploaded to your Wisp site
44+---
55+66+# File Filtering & .wispignore
77+88+Wisp automatically excludes common files that shouldn't be deployed (`.git`, `node_modules`, `.env`, etc.).
99+1010+## Default Exclusions
1111+1212+- Version control: `.git`, `.github`, `.gitlab`
1313+- Dependencies: `node_modules`, `__pycache__`, `*.pyc`
1414+- Secrets: `.env`, `.env.*`
1515+- OS files: `.DS_Store`, `Thumbs.db`, `._*`
1616+- Cache: `.cache`, `.temp`, `.tmp`
1717+- Dev tools: `.vscode`, `*.swp`, `*~`, `.tangled`
1818+- Virtual envs: `.venv`, `venv`, `env`
1919+2020+## Custom Patterns
2121+2222+Create a `.wispignore` file in your site root using gitignore syntax:
2323+2424+```
2525+# Build outputs
2626+dist/
2727+*.map
2828+2929+# Logs and temp files
3030+*.log
3131+temp/
3232+3333+# Keep one exception
3434+!important.log
3535+```
3636+3737+### Pattern Syntax
3838+3939+- `file.txt` - exact match
4040+- `*.log` - wildcard
4141+- `logs/` - directory
4242+- `src/**/*.test.js` - glob pattern
4343+- `!keep.txt` - exception (don't ignore)
4444+4545+## Usage
4646+4747+**CLI**: Place `.wispignore` in your upload directory
4848+```bash
4949+wisp-cli handle.bsky.social --path ./my-site --site my-site
5050+```
5151+5252+**Web**: Include `.wispignore` when uploading files
5353+5454+## Notes
5555+5656+- Custom patterns add to (not replace) default patterns
5757+- Works in both CLI and web uploads
5858+- The CLI logs which files are skipped