+17
README.md
+17
README.md
···
53
54
## Features
55
56
+
### File Filtering and `.wispignore`
57
+
58
+
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.
59
+
60
+
The `.wispignore` file uses the same syntax as `.gitignore`:
61
+
```
62
+
# Custom ignore patterns
63
+
*.log
64
+
temp/
65
+
build/
66
+
.secret
67
+
```
68
+
69
+
Default patterns include: `.git`, `.github`, `.gitlab`, `.DS_Store`, `node_modules`, `.env`, cache directories, Python virtual environments, editor swap files, `.tangled`, and more.
70
+
71
+
See [File Filtering Documentation](./docs/src/content/docs/file-filtering.md) for details.
72
+
73
### URL Redirects and Rewrites
74
75
The 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
+2
docs/src/content/docs/cli.md
···
204
205
The 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.
206
207
## Incremental Updates
208
209
The 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.
···
204
205
The 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.
206
207
+
**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).
208
+
209
## Incremental Updates
210
211
The 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
+58
docs/src/content/docs/file-filtering.md
···
···
1
+
---
2
+
title: File Filtering & .wispignore
3
+
description: Control which files are uploaded to your Wisp site
4
+
---
5
+
6
+
# File Filtering & .wispignore
7
+
8
+
Wisp automatically excludes common files that shouldn't be deployed (`.git`, `node_modules`, `.env`, etc.).
9
+
10
+
## Default Exclusions
11
+
12
+
- Version control: `.git`, `.github`, `.gitlab`
13
+
- Dependencies: `node_modules`, `__pycache__`, `*.pyc`
14
+
- Secrets: `.env`, `.env.*`
15
+
- OS files: `.DS_Store`, `Thumbs.db`, `._*`
16
+
- Cache: `.cache`, `.temp`, `.tmp`
17
+
- Dev tools: `.vscode`, `*.swp`, `*~`, `.tangled`
18
+
- Virtual envs: `.venv`, `venv`, `env`
19
+
20
+
## Custom Patterns
21
+
22
+
Create a `.wispignore` file in your site root using gitignore syntax:
23
+
24
+
```
25
+
# Build outputs
26
+
dist/
27
+
*.map
28
+
29
+
# Logs and temp files
30
+
*.log
31
+
temp/
32
+
33
+
# Keep one exception
34
+
!important.log
35
+
```
36
+
37
+
### Pattern Syntax
38
+
39
+
- `file.txt` - exact match
40
+
- `*.log` - wildcard
41
+
- `logs/` - directory
42
+
- `src/**/*.test.js` - glob pattern
43
+
- `!keep.txt` - exception (don't ignore)
44
+
45
+
## Usage
46
+
47
+
**CLI**: Place `.wispignore` in your upload directory
48
+
```bash
49
+
wisp-cli handle.bsky.social --path ./my-site --site my-site
50
+
```
51
+
52
+
**Web**: Include `.wispignore` when uploading files
53
+
54
+
## Notes
55
+
56
+
- Custom patterns add to (not replace) default patterns
57
+
- Works in both CLI and web uploads
58
+
- The CLI logs which files are skipped