Complete OST/PST Management Toolkit
Convert, extract, and manage Microsoft Outlook OST files with ease
Created by SkyLostTR (@Keeftraum)
Version 2.1.0 - A unified Node.js application for converting, extracting, and managing Microsoft Outlook OST and PST files with UTF-8 support.
# Install globally from npm
npm install -g ost2go
# Verify installation
ost2go --versionDownload pre-built binaries from Releases:
- Windows:
ost2go-win.exe - Linux:
ost2go-linux - macOS:
ost2go-macos
# Windows
.\ost2go-win.exe --version
# Linux/macOS
chmod +x ost2go-linux
./ost2go-linux --version# Clone repository
git clone https://github.com/SkyLostTR/OST2GO.git
cd OST2GO
# Install dependencies
npm install
# Install globally
npm install -g .# Configure registry
echo "@skylosttr:registry=https://npm.pkg.github.com" >> .npmrc
# Install
npm install -g @skylosttr/ost2goAll functionality is now accessible through a single ost2go command with intuitive subcommands:
ost2go convert- Convert OST to PST (real & legacy modes)ost2go extract- Extract emails to EML, MBOX, and JSONost2go validate- Validate PST file integrityost2go info- Display file information
npm install -g .
ost2go --helpProblem: Previous versions created PST files that crashed Outlook and Thunderbird during import.
Root Cause: The original implementation was too simplistic and didn't properly handle:
- PST header structure and format identifiers
- Block alignment and data structure compliance
- CRC checksums and file integrity validation
Solution: Completely rewritten converter with:
- β Proper PST header generation with correct format identifiers
- β Block-level data processing for PST compliance
- β CRC32 checksum calculation for file integrity
- β Advanced error handling and validation
- β UTF-8 encoding preservation for international content
This is an educational/research proof-of-concept with MAJOR limitations:
- Generated PST files are NOT readable by standard PST readers (Outlook, XstReader, etc.)
- Internal structure conversion is incomplete - only header is modified
- OST database structures remain unchanged causing parse errors in PST readers
- This tool performs surface-level conversion only
OST files use proprietary Microsoft Exchange-locked database structures that are fundamentally different from PST format. True conversion requires:
- Complete B-tree database restructuring
- Node reference table rebuilding
- Block allocation table conversion
- Encryption/compression handling
- Exchange-specific metadata removal
Our tool currently only:
- β Changes file header from OST to PST format
- β Processes data in chunks with basic block alignment
- β Does NOT convert internal database structures
- β Does NOT rebuild B-tree indexes
- β Does NOT handle Exchange-specific encryption
-
Microsoft Outlook Built-in Tools (RECOMMENDED):
File β Open & Export β Import/Export β Export to a file β Outlook Data File (.pst) -
Microsoft Official Utilities:
- PST Capture tool
- Exchange Admin Center export features
- PowerShell Export-Mailbox cmdlets
-
Commercial Solutions:
- Aspose.Email for .NET
- Stellar OST to PST Converter
- SysTools OST Recovery
This project demonstrates:
- PST/OST file format structure basics
- Node.js file processing techniques
- CLI application development patterns
- Progress tracking and error handling
π For detailed technical explanation of why this doesn't work, see TECHNICAL-LIMITATIONS.md
- π OST to PST Conversion: Convert Outlook OST files to PST format with improved compatibility
- π UTF-8 Support: Ensures proper encoding for international characters
- π Progress Tracking: Real-time progress display during conversion
- β File Validation: Validates input and output files with integrity checks
- π» Command Line Interface: Easy-to-use CLI with comprehensive options
- π οΈ Advanced Error Handling: Detailed error reporting and troubleshooting
- π PST Format Compliance: Proper header structure and block alignment
- οΏ½ Standalone Binaries: No Node.js required for end users
- οΏ½ Multiple Distribution Channels: npm, GitHub Packages, and standalone binaries
# Extract emails to EML, MBOX, and JSON formats
ost2go extract -i input.ost -o my-emails --max 100
# Extract with verbose output
ost2go extract -i input.ost -o my-emails --max 500 --verbose# RECOMMENDED: Real converter (extracts actual emails)
ost2go convert -i input.ost -o output.pst --real --max-emails 100
# Legacy converter (educational only - output not readable)
ost2go convert -i input.ost -o output.pst --force# Validate a PST file
ost2go validate -i output.pst
# Validate with detailed output
ost2go validate -i output.pst --verbose# Display OST file information
ost2go info -i input.ost| Command | Description | Example |
|---|---|---|
ost2go convert |
π Convert OST to PST | ost2go convert -i file.ost -o file.pst --real |
ost2go extract |
π§ Extract to EML/MBOX/JSON | ost2go extract -i file.ost -o output --max 100 |
ost2go validate |
β Validate PST integrity | ost2go validate -i file.pst --verbose |
ost2go info |
βΉοΈ Show file information | ost2go info -i file.ost |
π For comprehensive documentation, see OST2GO_GUIDE.md
-i, --input <path>: Input OST file path (required)-o, --output <path>: Output PST file path (required)--utf8: Ensure UTF-8 encoding support (default: true)--overwrite: Overwrite output file if it exists (default: false)--force: Skip format compatibility warnings (default: false)--real: Use real converter to extract actual emails (recommended)--max-emails <number>: Maximum number of emails to convert (default: 100)
-i, --input <path>: PST file path to validate (required)--verbose: Show detailed validation information
-i, --input <path>: Input OST file path (required)
# Convert a typical OST file (with compatibility warning)
node src/index.js convert -i "C:\Users\John\Documents\Outlook Files\archive.ost" -o "C:\Users\John\Documents\Outlook Files\archive.pst"
# Get information about an OST file
node src/index.js info -i "C:\Users\John\Documents\Outlook Files\archive.ost"
# Convert with overwrite enabled and skip warnings
node src/index.js convert -i "./input.ost" -o "./output.pst" --overwrite --force
# Test conversion with a small file first
node src/index.js convert -i "small_test.ost" -o "test_output.pst" --force-
Try a smaller test file first:
# Create a test with a portion of your OST node src/index.js convert -i "small_sample.ost" -o "test.pst" --force
-
π’ Use Microsoft's official tools:
- Open Outlook
- Go to File β Open & Export β Import/Export
- Choose "Export to a file" β "Outlook Data File (.pst)"
-
Check file integrity:
# Get file information to verify the conversion node src/index.js info -i "converted_file.pst"
-
Import gradually:
- Import only a few folders at a time
- Check for specific problematic emails or attachments
| Issue | Solution |
|---|---|
| PST file too large | Split large OST files before conversion |
| Encoding problems | Ensure --utf8 flag is enabled (default) |
| Corrupted source OST | Use scanpst.exe to repair the OST file first |
| Memory errors | Close other applications, use smaller chunks |
| Import hangs | Try importing specific folders instead of entire PST |
npm testnpm run dev- OST files: Offline Storage Table files used by Outlook for cached email data
- PST files: Personal Storage Table files used for archiving and backup
- Both formats share similar internal structure but have different headers and metadata
The converter ensures that text content within emails maintains proper UTF-8 encoding, which is essential for:
- International characters (Γ‘, Γ©, Γ, Γ³, ΓΊ, Γ±, etc.)
- Emoji and special symbols
- Multi-language email content
The converter processes files in chunks to handle large OST files efficiently:
- Default chunk size: 1MB
- Progress tracking for large files
- Memory-efficient streaming
This is a proof-of-concept implementation for educational purposes. The actual OST/PST file formats are proprietary Microsoft formats with complex internal structures. For production use, consider:
- π’ Microsoft's official tools: Use Outlook's built-in import/export functionality
- πΌ Professional libraries: Consider commercial solutions like Aspose.Email or similar
- π₯οΈ Exchange Server: Use server-side conversion tools when available
- This implementation provides a basic framework but may not handle all OST format variations
- Complex email attachments, calendar items, and advanced features may require additional processing
- Microsoft's PST format has evolved over different Outlook versions (97, 2003, 2007+)
- Ensure you have proper rights to convert OST files
- Respect data privacy and corporate policies
- Consider encryption and security requirements
ost-to-pst-converter/
βββ π src/
β βββ π index.js # Main CLI application
β βββ π converter/
β βββ π OstToPstConverter.js # Core conversion logic
βββ π test/
β βββ π test.js # Test suite
βββ π package.json # Project dependencies and scripts
βββ π README.md # This file
- π΄ Fork the repository
- πΏ Create a feature branch
- βοΈ Make your changes
- π§ͺ Run tests:
npm test - π€ Submit a pull request
This project is licensed under a proprietary license - see the LICENSE file for details.
For issues and questions:
- π Check the troubleshooting section below
- π§ͺ Review the test results with
npm test - π§ Ensure your Node.js version is 16+
-
"Input file does not exist"
- Verify the file path is correct
- Use absolute paths when possible
- Check file permissions
-
"Output file already exists"
- Use the
--overwriteflag to replace existing files - Choose a different output path
- Use the
-
"Conversion failed"
- Ensure the input file is a valid OST file
- Check available disk space
- Verify file is not corrupted or locked by Outlook
-
"UTF-8 encoding issues"
- The converter attempts to handle encoding automatically
- For complex encoding issues, consider professional tools
- Close Outlook before converting OST files
- Ensure sufficient disk space (PST files can be similar size to OST)
- Use SSD storage for better performance with large files
- Consider converting large files in smaller segments if needed
This project is licensed under a proprietary license - see the LICENSE file for details.
OST2GO is created and maintained by SkyLostTR (@Keeftraum)
- GitHub: https://github.com/SkyLostTR/OST2GO
- Issues: https://github.com/SkyLostTR/OST2GO/issues
- Discussions: https://github.com/SkyLostTR/OST2GO/discussions
OST2GO v2.0.0 - Complete OST/PST Management Toolkit
Built with β€οΈ by SkyLostTR (@Keeftraum)