Format de fichier Boardkit
Spécification complète du format .boardkit : structure ZIP, sérialisation, versioning et migrations de documents. Essentiel pour l'import/export et la persistance des données.
name: boardkit-file-format description: | .boardkit file format: ZIP structure, serialization, versioning, migrations. Use when working on import/export, persistence, or file format changes. allowed-tools: Read, Grep, Glob
Boardkit File Format
Structure
.boardkit = ZIP archive containing:
my-board.boardkit (ZIP)
├── package.json → Metadata
└── board.json → Document content
package.json
{
"name": "my-board",
"version": "1.0.0",
"boardkit": {
"formatVersion": 2
}
}
board.json
{
"version": 2,
"meta": {
"title": "My Board",
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-02T00:00:00Z"
},
"board": {
"viewport": { "x": 0, "y": 0, "zoom": 1 },
"widgets": [...],
"elements": [...],
"background": { "type": "dots", "color": "#f5f5f5" }
},
"modules": {},
"dataSharing": {
"permissions": [],
"links": []
}
}
Constraints
| Constraint | Value |
|------------|-------|
| Max file size | 50 MB |
| Compression | DEFLATE level 6 |
| Extension | .boardkit |
| JSON encoding | UTF-8 |
Document Versions
| Version | Changes |
|---------|---------|
| v0 | Initial: widgets only |
| v1 | Added: elements[], background |
| v2 | Added: dataSharing section |
Migration Functions
// packages/core/src/migrations/index.ts
function migrateV0ToV1(doc: V0Document): V1Document {
return {
...doc,
version: 1,
board: {
...doc.board,
elements: [],
background: { type: 'dots', color: '#f5f5f5' }
}
}
}
Serialization Rules
-
Deterministic - Same input = same output
- Sort object keys alphabetically
- No random IDs in output
-
Atomic writes (Desktop)
- Write to temp file first
- Rename to final path
-
Transactions (Web/IndexedDB)
- Use IDB transactions
- Rollback on error
Storage Implementations
Web (IndexedDB)
// packages/platform/src/storage/indexeddb.ts
Database: 'boardkit'
Stores: 'documents', 'history'
Autosave: 500ms debounce
History cap: 100 entries
Desktop (Tauri FS)
// apps/desktop/src/composables/usePersistence.ts
Autosave: 1000ms debounce
Atomic writes via temp file
Import Validation
// Required checks on import
1. File size < 50MB
2. Valid ZIP structure
3. package.json exists and valid
4. board.json exists and valid JSON
5. Version supported (migrate if needed)
6. Schema validation
Key Files
| Purpose | Path |
|---------|------|
| Document types | packages/core/src/types/document.ts |
| Migrations | packages/core/src/migrations/index.ts |
| Web import/export | apps/web/src/utils/boardkitFile.ts |
| Desktop import/export | apps/desktop/src/utils/boardkitFile.ts |
| IndexedDB storage | packages/platform/src/storage/indexeddb.ts |
| Migration tests | packages/core/__tests__/migrations.test.ts |
Skills similaires
Expert Next.js App Router
Un skill qui transforme Claude en expert Next.js App Router.
Générateur de README
Crée des README.md professionnels et complets pour vos projets.
Rédacteur de Documentation API
Génère de la documentation API complète au format OpenAPI/Swagger.