A portable, read-only Windows tool for browsing Outlook PST and OST files without Outlook.
FreePST opens a data file and shows it in an Outlook-style layout. The folder tree is on the left and the selected folder's items are listed on the right, with columns such as From, To, Subject, Sent, Received and Size. It lists items only; it doesn't open or display their content. It never writes to the file.
- Copy the
FreePST-win-x64folder (or unzipFreePST-win-x64.zip) anywhere and runFreePST.exe. Nothing needs to be installed. - Choose File > Open… (Ctrl+O) and pick a
.pstor.ostfile. Files you've opened before are listed under File > Open recent. - Expand the tree and select a folder. All folders are shown, including hidden and system ones, each with its item count.
- Sort by clicking a column header, and drag header edges to resize. Type in the filter box to narrow the current folder by subject, sender, recipients, location or name.
Columns depend on the folder type:
| Folder type | Columns |
|---|---|
| Mail and other | Importance, attachment, From, To, Cc, Subject, Sent, Received, Size, Type |
| Calendar | Attachment, Subject, Location, Start, End, Organizer, Recurring, Size |
| Contacts | Full name, Email, Company, Job title, Business phone, Mobile |
| Tasks | Importance, Subject, Due, Status, % complete, Modified |
- An OST that Outlook is using can't be opened. Outlook locks it. Close Outlook, or copy the OST elsewhere and open the copy.
- Large folders load in batches. Rows appear as they're read, with progress next to the filter box. Selecting another folder cancels the current load.
- Some columns fill in after the list appears. A column that isn't in the folder's own index is read from each item afterwards, with "Reading item details…" showing progress. For Outlook 2013+ OSTs, text columns are also re-checked against each item, because those files' folder indexes have been seen holding stale values such as the wrong sender name.
- Supported formats: ANSI PST (Outlook 97–2002), Unicode PST/OST, and Outlook 2013+ OST (4K pages, compressed).
You need the .NET 10 SDK. Visual Studio isn't needed.
dotnet build # debug build; run src\FreePST\bin\Debug\...\win-x64\FreePST.exe
dotnet test # unit tests
.\build.ps1 # tests, then a self-contained publish to artifacts\publish\win-x64 plus a zip
.\build.ps1 -Version 0.2.0 # the same, stamped 0.2.0 and zipped as FreePST-0.2.0-win-x64.zip
.\build.ps1 -Runtime win-arm64The default version for local builds is set in Directory.Build.props.
tests/FreePST.Core.Tests/SampleFileTests.cs opens every .pst/.ost in the folder named by FREEPST_TEST_FILES. For each file it walks every folder, lists every item and fills in the per-item columns. It fails if any folder's listed count differs from its stored item count. Sample files are never committed.
$env:FREEPST_TEST_FILES = 'D:\pst-samples'
dotnet test --logger "console;verbosity=detailed" # detailed output prints each folder, timings and a sample rowtests\get-sample-files.ps1 -Destination <folder> downloads three small public sample files to test with: two PSTs and an Outlook 2013 OST, about 17 MB in all. CI uses the same files.
GitHub Actions (.github/workflows):
- CI runs on every push to
mainand every pull request. It runs the tests, including against the sample files, then publishes the app. The published app is attached to the run for 14 days, so you can download and try any commit's build. - Release runs when a version tag is pushed. It tests and publishes that version, then creates a GitHub Release with the zip attached and notes generated from the commits. A tag with a suffix, such as
v0.2.0-beta.1, is marked as a pre-release.
git tag v0.2.0
git push origin v0.2.0Releases aren't code-signed yet, so Windows SmartScreen warns the first time the app is run.
| Path | Contents |
|---|---|
src/FreePST |
The WinUI 3 app (Windows App SDK 2.5, unpackaged, self-contained) |
src/FreePST.Core |
UI-independent logic: opening files, folder listing, column definitions, recent files |
src/XstReader.Api |
Vendored PST/OST reader (XstReader, Ms-PL). See VENDORED.md; local changes are in git history |
tests/FreePST.Core.Tests |
xUnit tests for Core |
FreePST is licensed under the Apache License 2.0: see LICENSE.md and NOTICE.md. The vendored XstReader source in src/XstReader.Api keeps its own Ms-PL licence. For bundled components, see THIRD-PARTY-NOTICES.md.