{"id":50447815,"url":"https://github.com/swatto86/pstinsight","last_synced_at":"2026-05-31T23:00:34.824Z","repository":{"id":361683746,"uuid":"879975632","full_name":"Swatto86/PSTInsight","owner":"Swatto86","description":"Fast, modern viewer and exporter for Outlook PST files — Rust + Tauri, no Outlook required. Browse folders, read mail, export to EML/TXT/MSG.","archived":false,"fork":false,"pushed_at":"2026-05-31T21:01:25.000Z","size":898,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-05-31T21:13:16.750Z","etag":null,"topics":["email","eml","msg","outlook","pst","react","rust","tauri"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Swatto86.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-10-28T22:16:14.000Z","updated_at":"2026-05-31T21:01:28.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Swatto86/PSTInsight","commit_stats":null,"previous_names":["swatto86/pstinsight"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/Swatto86/PSTInsight","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swatto86%2FPSTInsight","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swatto86%2FPSTInsight/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swatto86%2FPSTInsight/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swatto86%2FPSTInsight/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Swatto86","download_url":"https://codeload.github.com/Swatto86/PSTInsight/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Swatto86%2FPSTInsight/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33752286,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["email","eml","msg","outlook","pst","react","rust","tauri"],"created_at":"2026-05-31T23:00:19.149Z","updated_at":"2026-05-31T23:00:34.819Z","avatar_url":"https://github.com/Swatto86.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PSTInsight\n\nA fast, modern viewer for Microsoft Outlook **PST** files — no Outlook, no MAPI,\nno COM. PSTInsight reads the on-disk PST format directly and renders it in a\nclean three-pane desktop UI.\n\nThis is a ground-up Rust rewrite of the original C#/WPF PSTInsight, built on\n[Tauri](https://tauri.app/) with a React + TypeScript front end and the\n[`pst-parse`](./pst-parse) parsing engine.\n\n## Features\n\n- **Folder tree** with content and unread counts.\n- **Virtualized message list** — folders with tens of thousands of messages\n  stay responsive because the list is painted from the folder's contents table,\n  not by opening every message.\n- **Reading pane** with sender/recipient headers, dates, and the message body.\n  HTML bodies render in a **fully sandboxed iframe** (DOMPurify-sanitized, a\n  per-frame CSP, and remote images **blocked by default** with an opt-in\n  \"Load images\" button — like a real mail client).\n- **Attachments**: save by-value attachments to disk; embedded messages save as\n  `.eml`. Bytes stream straight to disk and are never shipped to the UI.\n- **Export** a single message or an entire folder to **EML**, **TXT**, or\n  **MSG** (`.msg` is written as a real MS-OXMSG compound file).\n- **Search** across all folders by subject/sender, with an optional (slower)\n  body search.\n\n## Architecture\n\n```\nPSTInsight/\n├── pst-parse/        # Pure-Rust, read-only PST parser (no Outlook/MAPI)\n├── src-tauri/        # Tauri backend: state, IPC commands, exporters\n│   └── src/\n│       ├── commands.rs   # IPC surface (open, list, get, export, search…)\n│       ├── dto.rs        # Serializable DTOs for the UI (no domain leakage)\n│       ├── export.rs     # EML/TXT rendering + format dispatch\n│       ├── msg.rs        # MS-OXMSG (.msg) compound-file writer\n│       └── state.rs      # Shared open-PST state\n└── src/              # React + TypeScript + Tailwind UI\n    ├── components/   # FolderTree, MessageList, MessagePreview, HtmlBody…\n    └── lib/          # Typed IPC client and formatting helpers\n```\n\nDesign notes:\n\n- Parsing runs on a blocking worker thread so a large PST never stalls the UI.\n- The list view uses `pst_parse::Pst::message_summaries`, which reads the\n  contents table directly — dramatically cheaper than opening each message.\n- Untrusted email HTML is treated as hostile: sanitized, sandboxed, and\n  remote-blocked before it ever renders.\n\n## Development\n\nPrerequisites: Node 20+, Rust (pinned in `rust-toolchain.toml`), and the\n[Tauri prerequisites](https://tauri.app/start/prerequisites/) for your OS.\n\n```bash\nnpm install\nnpm run tauri dev      # run the app with hot-reload\nnpm run tauri build    # produce a release build + installer\n```\n\nQuality gates:\n\n```bash\ncargo clippy --all-targets -- -D warnings   # in pst-parse and src-tauri\ncargo test                                  # parser + MSG round-trip tests\n```\n\n## Limitations\n\n- **Unicode PSTs only.** ANSI (32-bit, Outlook 97–2002) files are rejected with\n  a clear error; cyclic-encrypted blocks are likewise unsupported (both inherited\n  from `pst-parse`).\n- Read-only: PSTInsight never modifies the source file.\n- `.msg` export covers standard message/recipient/attachment properties; named\n  properties are emitted as an (empty) map.\n\n## License\n\nMIT.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswatto86%2Fpstinsight","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fswatto86%2Fpstinsight","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswatto86%2Fpstinsight/lists"}