Export channels from Are.na and import them into Linkwarden with preserved timestamps and uploaded files.
npm install
cp .env.example .env
# Edit .env with your API tokens
npm start export <arena-username>
npm start import export-<username>-*.jsonGet API Tokens:
- Are.na: dev.are.na → Create application → Copy token
- Linkwarden: Settings → Access Tokens → Create new
Configure .env:
ARENA_ACCESS_TOKEN=your_arena_token
LINKWARDEN_URL=https://your-linkwarden.com
LINKWARDEN_API_TOKEN=your_linkwarden_token
npm start export <username> # Export all Are.na channels
npm start import <file.json> # Import to Linkwarden (preserves dates & uploads files)
npm start verify <file.json> # Verify import completeness
npm start clean # Delete all Linkwarden collections| Type | Imported | Files Uploaded |
|---|---|---|
| PNG/JPEG images | ✅ | ✅ |
| PDF files | ✅ | ✅ |
| GIF images | ✅ Link only | ❌ Not supported by Linkwarden |
| Videos | ✅ Link only | ❌ Not supported |
| Text blocks | ❌ | - |
Note: GIFs and videos create links pointing to Are.na's CDN but files aren't uploaded (Linkwarden limitation).
Two-step import process:
- Migration - Uses Linkwarden's migration API to preserve Are.na timestamps
- File Upload - Fetches created links and uploads PNG/JPEG/PDF files
This workaround is necessary because Linkwarden's API can either preserve dates OR upload files, but not both at once.
Are.na → Linkwarden mapping:
- Channel → Collection
- Block (with URL) → Link
created_at→createdAtconnected_at→importDate
Import is slow - Normal for large collections (30-60min for 100 collections/3000 links)
Missing files - Run npm start verify <file.json> to check what's missing
Private channels - Requires ARENA_ACCESS_TOKEN in .env
MIT