Overview
The Jan Data Folder is where all application data is stored locally on your computer. This includes models, conversations, settings, and extensions.
Default Locations
Jan stores data in different locations based on your operating system:
~/Library/Application Support/jan
C:\Users\[YourUsername]\AppData\Roaming\jan
You can view and change the data folder location in Settings > Advanced > Jan Data Folder.
Folder Structure
The Jan data folder is organized into several subdirectories:
jan/
├── models/ # Downloaded AI models
├── threads/ # Conversation threads
├── assistants/ # Custom assistants
├── projects/ # Project configurations
├── extensions/ # MCP servers and plugins
├── embeddings/ # Vector databases for RAG
├── uploads/ # Attached files and images
├── settings.json # App configuration
└── providers.json # Model provider settings
Detailed Structure
Models Directory
Stores all downloaded model files:
models/
├── [provider]/
│ ├── [model-name]/
│ │ ├── model.gguf # Model weights
│ │ ├── model.json # Model metadata
│ │ └── mmproj.gguf # Vision projection weights (if applicable)
│ └── ...
Example:
models/
├── llamacpp/
│ ├── llama-3-8b-instruct/
│ │ ├── llama-3-8b-instruct-q5_k_m.gguf
│ │ └── model.json
│ ├── llava-1.6-vicuna-7b/
│ │ ├── llava-v1.6-vicuna-7b-q5_k_m.gguf
│ │ ├── mmproj-vicuna-7b-f16.gguf
│ │ └── model.json
Model files are typically large (2GB-40GB+). Ensure adequate storage space before downloading.
Threads Directory
Stores conversation history:
threads/
├── [thread-id]/
│ ├── thread.json # Thread metadata
│ └── messages.jsonl # Message history (JSONL format)
thread.json example:
{
"id": "thread_abc123",
"title": "Python debugging help",
"created_at": 1234567890,
"updated_at": 1234567890,
"model": {
"id": "llama-3-8b-instruct",
"provider": "llamacpp"
},
"assistants": [{
"id": "asst_xyz789",
"name": "Code Assistant"
}],
"metadata": {
"hasDocuments": false,
"project": null
}
}
messages.jsonl example:
{"id":"msg_1","role":"user","content":[{"type":"text","text":{"value":"Hello"}}],"created_at":1234567890}
{"id":"msg_2","role":"assistant","content":[{"type":"text","text":{"value":"Hi there!"}}],"created_at":1234567891}
Assistants Directory
Stores custom assistant configurations:
assistants/
├── [assistant-id].json
Assistant file example:
{
"id": "asst_abc123",
"name": "Code Reviewer",
"avatar": "🤖",
"description": "Reviews code for best practices",
"instructions": "You are an expert code reviewer...",
"created_at": 1234567890,
"parameters": {
"temperature": 0.3,
"max_tokens": 2000,
"presence_penalty": 0.1
}
}
Projects Directory
Stores project configurations and metadata:
projects/
├── [project-id]/
│ ├── project.json # Project settings
│ └── files/ # Project-specific files
project.json example:
{
"id": "proj_xyz789",
"name": "Documentation Project",
"assistantId": "asst_abc123",
"created_at": 1234567890,
"updated_at": 1234567890,
"metadata": {
"color": "blue",
"icon": "📁"
}
}
Embeddings Directory
Stores vector databases for RAG (Retrieval Augmented Generation):
embeddings/
├── threads/
│ └── [thread-id]/ # Thread-specific embeddings
│ ├── index.faiss # Vector index
│ └── metadata.json # Document metadata
├── projects/
│ └── [project-id]/ # Project-wide embeddings
│ ├── index.faiss
│ └── metadata.json
Embeddings are created when you attach documents with RAG mode enabled. They allow semantic search across your documents.
Uploads Directory
Stores attached files and images:
uploads/
├── [thread-id]/
│ ├── [file-id].pdf
│ ├── [file-id].png
│ └── ...
Files are named using unique identifiers and organized by thread.
Extensions Directory
Stores MCP servers and plugin configurations:
extensions/
├── mcp/
│ ├── servers.json # MCP server configurations
│ └── logs/ # Server logs
└── plugins/ # Future plugin support
servers.json example:
{
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"],
"env": {},
"enabled": true
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "***"
},
"enabled": false
}
}
Configuration Files
settings.json
Main application settings:
{
"appearance": {
"theme": "dark",
"fontSize": "medium",
"language": "en"
},
"chat": {
"spellCheck": true,
"tokenCounterCompact": false
},
"rag": {
"enabled": true,
"parseMode": "auto",
"maxFileSizeMB": 10,
"autoInlineContextRatio": 0.75
},
"server": {
"host": "127.0.0.1",
"port": 0
},
"updates": {
"autoCheck": true,
"autoDownload": true
}
}
providers.json
Model provider configurations:
{
"llamacpp": {
"provider": "llamacpp",
"enabled": true,
"models": [
{
"id": "llama-3-8b-instruct",
"name": "Llama 3 8B Instruct",
"settings": {
"ctx_len": 8192,
"ngl": 35,
"n_parallel": 1
},
"capabilities": ["text", "tools"]
}
]
},
"openai": {
"provider": "openai",
"enabled": false,
"apiKey": "***",
"baseUrl": "https://api.openai.com/v1",
"models": []
}
}
Storage Management
Checking Storage Usage
- Go to Settings > Advanced
- View Jan Data Folder section
- See total storage used
Cleaning Up Storage
Delete Unused Models
models/[provider]/[unused-model]/
Remove model directories you no longer need.
Clear Old Threads
Delete conversation directories you don’t need to keep.
Remove Embeddings
embeddings/threads/[thread-id]/
Delete vector databases for old threads.
Deleting threads and embeddings is permanent. Export conversations you want to keep before deletion.
Moving the Data Folder
To relocate your Jan data:
- Close Jan completely
- Copy the entire Jan folder to the new location
- Open Jan and go to Settings > Advanced
- Click Change next to Jan Data Folder
- Select the new location
- Restart Jan
Alternatively:
- In Jan, go to Settings > Advanced
- Click Change next to Jan Data Folder
- Select new location
- Choose to Move or Copy existing data
- Wait for the transfer to complete
- Restart Jan
When moving to a new drive, ensure it has sufficient space for all your models and data.
Backup and Restore
Creating Backups
Manual backup:
- Close Jan
- Copy the entire Jan data folder to your backup location
- Include all subdirectories
Automated backup:
# macOS/Linux
cp -r ~/Library/Application\ Support/jan /path/to/backup/jan-backup-$(date +%Y%m%d)
# Windows (PowerShell)
Copy-Item -Path "$env:APPDATA\jan" -Destination "C:\Backups\jan-backup-$(Get-Date -Format 'yyyyMMdd')" -Recurse
Restoring from Backup
- Close Jan
- Delete or rename the current Jan data folder
- Copy your backup to the Jan data folder location
- Restart Jan
Selective restore: You can restore individual components (threads, assistants, models) by copying only specific subdirectories.
Troubleshooting
Corrupted Data Folder
If Jan fails to start:
- Rename the current data folder (e.g.,
jan-old)
- Start Jan (creates a fresh folder)
- Selectively copy back data from
jan-old:
- Start with
settings.json
- Then
assistants/
- Then
threads/
- Finally
models/ (if not corrupted)
Missing Models After Update
If models disappear after an update:
- Check Settings > Advanced > Jan Data Folder
- Verify the path is correct
- Open the folder and check
models/ directory
- If models exist but aren’t showing, restart Jan
- If still missing, re-import from the folder
Large Storage Usage
If the data folder is too large:
- Check which models are installed (models are the largest files)
- Delete unused models in Settings > Models
- Clean up old threads and embeddings
- Consider moving to a larger drive
A typical Jan installation with 2-3 models uses 10-50GB of storage. Large models (70B parameters) can exceed 40GB each.
Security Considerations
Data Encryption
- Jan data is stored unencrypted by default
- Use full-disk encryption (FileVault, BitLocker) for protection
- Sensitive conversations should be stored on encrypted volumes
File Permissions
Jan data folder permissions:
# macOS/Linux - should be user-only
chmod 700 ~/Library/Application\ Support/jan
# Windows - ensure only your user has access
API Keys and Tokens
Stored in providers.json and extensions/mcp/servers.json:
- Never commit these files to version control
- Use environment variables for sensitive values
- Rotate keys regularly
If sharing backups, remove sensitive files (providers.json, MCP configs) or redact API keys.