Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 13 additions & 13 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ follow [Semantic Versioning](https://semver.org/).

## [0.14.0]

The identity release: **Copy identities (Entra tenant-to-tenant)** — the open answer to
ShareGate's Copy identities — plus ShareGate-style **environments** with browser-SSO,
The identity release: **Copy identities (Entra tenant-to-tenant)** — cross-tenant identity
copy for Entra ID users and groups — plus saved **environments** with browser-SSO,
stay-signed-in, and Windows-native sign-in. Also folds in the planned 0.13 migration
correctness wave, so failures can no longer report as Success.

Expand All @@ -25,7 +25,7 @@ correctness wave, so failures can no longer report as Success.
- **Environments** — save each tenant as a named profile: `Connect-SPTool -Environment`,
`Get-SPEnvironment`, `Remove-SPEnvironment`, `Disconnect-SPTool`, and
`New-SPMigrationConnection -Environment` (one line per side for cross-tenant). The GUI
Connect view becomes a ShareGate-style **Environments manager** with one-click switching
Connect view becomes a saved-tenant **Environments manager** with one-click switching
and the app's first **Sign out**. Read-only `sharepoint_environments` MCP tool. See docs/03.
- **Sign-in upgrades** — `-OSLogin` (Windows Hello / WAM broker, no browser; automatic
browser fallback when the app registration lacks the broker redirect URI — docs/02);
Expand Down Expand Up @@ -53,7 +53,7 @@ correctness wave, so failures can no longer report as Success.
- Note: the PnP token cache is per app registration, so `-ClearPersistedLogin` signs out
every environment sharing that app.
- README: Fluent Light screenshots (incl. the new Environments page); identity copy and
environments move to checkmarks in the ShareGate comparison.
environments move to checkmarks in the feature comparison.
- CI: a failed winget submission no longer fails the release job (the GitHub release is
already published by then).

Expand Down Expand Up @@ -110,7 +110,7 @@ correctness wave, so failures can no longer report as Success.

## [0.11.0]

The BYOK in-app AI assistant, ShareGate-Protect-style governance detection, and a dashboard Home.
The BYOK in-app AI assistant, governance detection (oversharing & ownership risk), and a dashboard Home.

### Added
- **In-app AI assistant (bring your own model)** — chat with *your own* Claude / OpenAI key or a local
Expand All @@ -123,7 +123,7 @@ The BYOK in-app AI assistant, ShareGate-Protect-style governance detection, and
metadata, check-in, trim versions, restore inheritance, remove orphaned users, site lifecycle)
that **always run as a preview first** — `execute` only takes effect after an identical preview
ran and you confirmed in chat (the wizard's Run-locked-until-Preview rule, enforced in code).
- **Protect-style governance detection** — `Find-SPEveryoneClaims` (where "Everyone"/"Everyone
- **Governance detection** — `Find-SPEveryoneClaims` (where "Everyone"/"Everyone
except external users" has access — the biggest oversharing risk, graded Error/Warning),
`Get-SPOwnerlessGroups` (Microsoft 365 Groups with no owner), and `Invoke-SPGovernanceReview`
(broad-audience grants + external sharing + orphaned access in one severity-graded list). All
Expand Down Expand Up @@ -171,7 +171,7 @@ A polished, human GUI and the groundwork for a seamless install. No engine cmdle

## [0.9.0]

GUI redesign — ShareGate-aligned navigation and a guided Copy wizard. No engine cmdlet changes.
GUI redesign — lifecycle-grouped navigation and a guided Copy wizard. No engine cmdlet changes.

### Added
- **Guided Copy flow** — a "What would you like to copy?" **chooser** (SharePoint / Collaboration /
Expand All @@ -185,7 +185,7 @@ GUI redesign — ShareGate-aligned navigation and a guided Copy wizard. No engin
GUI can be extended consistently.

### Changed
- **Left navigation** regrouped to the ShareGate model — Home (top); **Migration** (Explore, Copy,
- **Left navigation** regrouped by the migration lifecycle — Home (top); **Migration** (Explore, Copy,
Pre-check, Security); **Activity** (Tasks, Scheduled); **Governance** (Provisioning); Connect pinned
at the bottom. The old Migrate / Copy-site / Teams-&-Groups nav entries fold into the single
**Copy** chooser (those forms are still reached through it).
Expand Down Expand Up @@ -240,7 +240,7 @@ Source **Explore** (pre-migration discovery) and post-migration validation.

## [0.6.0]

ShareGate-parity **Phase 5** — deeper governance.
**Phase 5** — deeper governance.

### Added
- **`Get-SPPermissionsMatrix`** — pivot a site's role assignments into a per-principal access
Expand All @@ -258,7 +258,7 @@ ShareGate-parity **Phase 5** — deeper governance.

## [0.5.0]

ShareGate-parity **Phase 4** — Teams, Microsoft 365 Groups, and Planner.
**Phase 4** — Teams, Microsoft 365 Groups, and Planner.

### Added
- **`Copy-SPM365Group`** — create a new Microsoft 365 Group modelled on an existing one
Expand All @@ -276,7 +276,7 @@ ShareGate-parity **Phase 4** — Teams, Microsoft 365 Groups, and Planner.

## [0.4.0]

ShareGate-parity **Phase 3** — tenant-to-tenant.
**Phase 3** — tenant-to-tenant.

### Added
- **`New-SPMigrationConnection`** — open a PnP connection to a specific site in a specific
Expand All @@ -298,7 +298,7 @@ ShareGate-parity **Phase 3** — tenant-to-tenant.

## [0.3.0]

ShareGate-parity **Phase 2** — permissions, identity mapping, and incremental copy.
**Phase 2** — permissions, identity mapping, and incremental copy.

### Added
- **`Copy-SPPermissions`** — copy a site's role assignments (and, with `-IncludeListPermissions`,
Expand All @@ -325,7 +325,7 @@ ShareGate-parity **Phase 2** — permissions, identity mapping, and incremental
- **Scheduled governance reports** — `scripts/scheduled/Run-GovernanceReport.ps1` writes
sharing/permission CSVs headless (app-only auth); `Register-GovernanceReportTask.ps1`
schedules it; `Get-SPScheduledCommand` builds the command line. See [docs/06](docs/06-scheduled-reports.md).
- **SharePoint → SharePoint site copy (ShareGate-parity, Phase 1)** — `Copy-SPSite` copies a
- **SharePoint → SharePoint site copy (Phase 1)** — `Copy-SPSite` copies a
site's structure (lists, libraries, fields, content types, views, navigation, pages) and
optionally its content (items, plus files with their Created/Modified/Author timestamps) to
another site in the **same tenant**. Dry-run by default; conflict modes Replace / Skip /
Expand Down
20 changes: 11 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
![PowerShell 7.4+](https://img.shields.io/badge/PowerShell-7.4%2B-5391FE?logo=powershell&logoColor=white)

> **The free, open-source alternative to [ShareGate](https://sharegate.com)** for SharePoint Online
> and Microsoft 365. Migrate file shares, copy sites and Teams, see who has access to what, clean
> up the mess, and schedule the reports — with a built-in AI assistant that runs on **your own**
> model. No tiers, no trials, no sales call.
> **A free, open-source SharePoint Online & Microsoft 365 migration and governance toolkit** —
> an independent, open-source alternative to [ShareGate](https://sharegate.com). Migrate file
> shares, copy sites and Teams, see who has access to what, clean up the mess, and schedule the
> reports — with a built-in AI assistant that runs on **your own** model. No tiers, no trials,
> no sales call.

![OpenGateSP — the home dashboard](docs/screenshot-light.png)

Expand Down Expand Up @@ -72,9 +73,10 @@ Details: [docs/13-ai-assistant.md](docs/13-ai-assistant.md).

## How it compares to ShareGate

ShareGate is a polished, expensive tool for work that comes down to SharePoint API calls anyone
can script. OpenGateSP does that work in the open, for free. (It's an independent project built
on [PnP PowerShell](https://pnp.github.io/powershell/) — not affiliated with ShareGate.)
ShareGate is the established commercial tool in this space. OpenGateSP is an independent,
open-source project that does the common migration and governance jobs for free, built on
[PnP PowerShell](https://pnp.github.io/powershell/) and the Microsoft Graph / SharePoint APIs —
not affiliated with or endorsed by Workleap.

| | ShareGate | OpenGateSP |
|---|---|---|
Expand Down Expand Up @@ -133,7 +135,7 @@ Four themes, picked on first run, changeable any time.
## Roadmap

Next up: governance auto-remediation policies and access-review campaigns, **identity copy**
(Entra tenant-to-tenant users/groups — ShareGate's "Copy identities"), full version-history
(Entra tenant-to-tenant users/groups), full version-history
fidelity via the Migration API, and PowerShell Gallery publishing. The full list, including what
already shipped: [docs/roadmap.md](docs/roadmap.md).

Expand All @@ -143,4 +145,4 @@ already shipped: [docs/roadmap.md](docs/roadmap.md).

---

<sub>OpenGateSP is an independent open-source project, not affiliated with or endorsed by ShareGate or Workleap. "ShareGate" is a trademark of its respective owner.</sub>
<sub>OpenGateSP is an independent open-source project, not affiliated with or endorsed by Workleap. ShareGate is a trademark of Workleap.</sub>
5 changes: 2 additions & 3 deletions docs/03-quickstart.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,8 @@ After `-SaveConfig`, later sessions are just `Connect-SPTool`.

### Environments — work with more than one tenant

An **environment** is a saved, named tenant connection (the ShareGate "Connect to your
environments" idea). Connecting to one saves it and makes it active; everything you run
afterwards targets the active environment:
An **environment** is a saved, named tenant connection. Connecting to one saves it and makes it
active; everything you run afterwards targets the active environment:

```powershell
# Save each tenant once (the browser signs you in — SSO picks up your session):
Expand Down
2 changes: 1 addition & 1 deletion docs/07-sharepoint-migration.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# 07 — SharePoint → SharePoint migration

`Copy-SPSite` copies a site's **structure** (and optionally its **content**) to another site —
the open equivalent of ShareGate's "Copy structure and content". It's **dry-run by default**:
a structure-and-content site copy. It's **dry-run by default**:
same-tenant by default, with **tenant-to-tenant** via `-CrossTenant` (see below).

> **Status:** the planning, conflict-resolution, and reporting logic is unit-tested; the live
Expand Down
4 changes: 2 additions & 2 deletions docs/09-governance.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# 09 — Deeper governance

Beyond the sharing / permission / inventory reports, OpenGateSP can answer "who can touch
what", flag stale access, detect the biggest oversharing and ownership risks
(ShareGate-Protect-style), and lock or archive a site.
what", flag stale access, detect the biggest oversharing and ownership risks, and lock or
archive a site.

## Functions

Expand Down
4 changes: 2 additions & 2 deletions docs/10-explore.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Explore & post-migration validation

ShareGate's "Explore" is *browse + report + remediate* a SOURCE environment. OpenGateSP's
`Invoke-SPExplore` is the read-only, consolidated **pre-migration assessment** of a SharePoint
source — the SharePoint-side companion to `Test-SPMigrationReadiness` (which scans local folders).
source — *browse + report* a SOURCE environment, the SharePoint-side companion to
`Test-SPMigrationReadiness` (which scans local folders).
After a copy, `Compare-SPSite` validates the result.

## Assess a source
Expand Down
4 changes: 2 additions & 2 deletions docs/14-identity-copy.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

Create the **people and groups** in a destination tenant before you move their content:
users, guests (by invitation), security groups, and Microsoft 365 groups — with their
owner/member rosters. OpenGateSP's answer to ShareGate's *Copy identities* (Entra ID
Migration), built on the same review-first posture as the rest of the module: every step
owner/member rosters. Cross-tenant identity copy (Entra ID users & groups), built on the same
review-first posture as the rest of the module: every step
until the last is **read-only**, and the last is **dry-run by default**.

Run this **before** a cross-tenant content copy ([docs/07](07-sharepoint-migration.md)):
Expand Down
10 changes: 5 additions & 5 deletions docs/design-system.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
The reference for the OpenGateSP GUI (WPF). Everything here already lives in code —
`gui/Start-OpenGateSPGui.ps1` (`$XamlControls` = component styles, `$Xaml*` = theme token
dictionaries) and `gui/MainWindow.xaml` (layout). This doc is the contract: **build new UI from
these tokens and components so the app stays one coherent surface.** Design direction follows
ShareGate Migrate/Protectcalm, guided, foolproof — see [[opengatesp-design-northstar]].
these tokens and components so the app stays one coherent surface.** Design direction: calm,
guided, foolproofbuilt on the Microsoft Fluent 2 design language.

> How to extend: add a `<Style x:Key="…">` to `$XamlControls` once, reuse it everywhere via
> `Style="{DynamicResource …}"`. Add colours only as **semantic tokens** (below) to every theme
Expand Down Expand Up @@ -119,7 +119,7 @@ write action a single un-previewable button.
## 8. Navigation IA (and why it's ordered this way)

The rail reads like a **migration runbook**, not a feature dump — grouped by the real timeline
*assess → move → verify → govern*, mirroring ShareGate's structure:
*assess → move → verify → govern*:

```
Home ← launchpad (pinned top, ungrouped)
Expand Down Expand Up @@ -150,7 +150,7 @@ OpenGateSP uses one saved connection — it's setup, not part of a copy.

## 9. The guided Copy wizard (the centerpiece pattern)

ShareGate's foolproof copy is **chooser → breadcrumb steps**, and OpenGateSP mirrors it:
The guided copy is a **chooser → breadcrumb-step** wizard — the standard foolproof-migration pattern:

1. **Chooser** (`ViewCopyLanding`) — *"What would you like to copy?"* A `TabControl`
(SharePoint · Collaboration · Import external) over a `WrapPanel` of `Card`s. Each card states
Expand All @@ -163,7 +163,7 @@ ShareGate's foolproof copy is **chooser → breadcrumb steps**, and OpenGateSP m
Rules baked in (see §10): **Next is disabled until the step is valid** (source present;
destination present and ≠ source); **Run is locked until you Preview the current settings** (a
param-hash re-arms it whenever an option changes); every Run **confirms with a named summary**. The
Scope step uses **`Compare-SPSite`** — our stand-in for ShareGate's dual live trees — to show
Scope step uses **`Compare-SPSite`** — a source-vs-destination diff view — to show
source-vs-destination lists with the diff in one grid. Each control maps to one `Copy-SPSite` /
`Copy-SPList` parameter (`Build-CopyParams` is the single source of truth for Preview, Run, and a
future "Copy as PowerShell").
Expand Down
2 changes: 1 addition & 1 deletion docs/distribution.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ signed (the GitHub release), functionality described on the README / download pa
- Project name: `OpenGateSP`
- Repository: `https://github.com/sameer-zahir/opengatesp`
- License: `MIT` (no dual-licensing)
- Description: free, open-source ShareGate alternative for SharePoint Online — file-share
- Description: free, open-source SharePoint Online migration & governance toolkit — file-share
migration, a pre-migration readiness check, permissions/external-sharing reports, site
provisioning, scheduled governance reports. Windows GUI + PowerShell module + MCP server.
- Download / releases page: `https://github.com/sameer-zahir/opengatesp/releases`
Expand Down
13 changes: 6 additions & 7 deletions docs/roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ in-app AI assistant. The phases below track how it got here and what's next, rou
priority order:

## SharePoint → SharePoint migration (the big build, phased)
The path toward ShareGate-style site migration, grounded in what PnP PowerShell actually supports. Each phase ships independently.
The path toward full SharePoint-to-SharePoint site migration, grounded in what PnP PowerShell actually supports. Each phase ships independently.
- **Phase 1 — same-tenant copy structure + content (shipped, 0.2.0):** `Copy-SPSite` / `Copy-SPList` copy a site's lists, libraries, fields, content types, views, navigation, pages, items, and files (with timestamps) to another site in the same tenant. Dry-run by default, with a GUI Copy-site wizard. See [docs/07](07-sharepoint-migration.md).
- **Phase 2 — mappings, permissions, incremental (shipped, 0.3.0):** `Copy-SPPermissions` copies role assignments and remaps users/groups (mapping CSV or domain swap); `-CopyPermissions` folds it into a site copy; `-Since` makes content copy incremental. Conflict modes (Replace/Skip/KeepBoth/IfNewer) shipped in Phase 1.
- **Phase 3 — tenant-to-tenant (shipped, 0.4.0):** `New-SPMigrationConnection` opens a connection per tenant; `Copy-SPSite -CrossTenant` copies structure + content across tenants (library files by download/upload) with principal remapping; `Copy-SPTermGroup` moves managed-metadata terms.
Expand All @@ -15,18 +15,17 @@ The path toward ShareGate-style site migration, grounded in what PnP PowerShell
- **Phase 6 — Explore + validation (shipped, 0.7.0):** `Invoke-SPExplore` source assessment + discovery reports (checked-out, large files, version bloat, inactive sites, workflows, content insights); `Compare-SPSite` post-migration validation. See [docs/10](10-explore.md) and [docs/TESTING.md](TESTING.md).
- **Phase 7 — remediation + fidelity (shipped, 0.8.0):** remediation quick-actions (`Invoke-SPCheckIn`, `Clear-SPVersionHistory`, `Restore-SPInheritance`, `Remove-SPOrphanedUsers`); Person/Managed-Metadata column round-tripping and best-effort `-IncludeVersions` version history. See [docs/11](11-remediation.md).
- **Phase 8 — polished, human GUI + install (shipped, 0.10.0):** nav icons + app identity, a Settings cog, first-run onboarding, toasts, keyboard shortcuts, and a focus ring; installer PowerShell-7 offer, in-app update check, CI release automation, and winget/SignPath prep. See [docs/design-system.md](design-system.md).
- **Phase 9 — AI assistant + Protect-style detection (shipped, 0.11.0):** the BYOK in-app **AI assistant** (Claude / OpenAI / Ollama / LM Studio; DPAPI-encrypted key; read-only reports plus preview-first write actions behind a toggle — see [docs/13](13-ai-assistant.md)); **governance detection** — `Find-SPEveryoneClaims` (Everyone/EEEU oversharing), `Get-SPOwnerlessGroups`, `Invoke-SPGovernanceReview` (consolidated review); a dashboard Home with live KPIs + persistent activity; the single guided Copy wizard; `Copy-SPTermGroup` over MCP.
- **Phase 9 — AI assistant + governance detection (shipped, 0.11.0):** the BYOK in-app **AI assistant** (Claude / OpenAI / Ollama / LM Studio; DPAPI-encrypted key; read-only reports plus preview-first write actions behind a toggle — see [docs/13](13-ai-assistant.md)); **governance detection** — `Find-SPEveryoneClaims` (Everyone/EEEU oversharing), `Get-SPOwnerlessGroups`, `Invoke-SPGovernanceReview` (consolidated review); a dashboard Home with live KPIs + persistent activity; the single guided Copy wizard; `Copy-SPTermGroup` over MCP.
- **Phase 10 — identity copy, Entra tenant-to-tenant (shipped, 0.14.0):** create user
accounts, guests (by invitation), security groups, and
Microsoft 365 groups — with rosters — in a destination tenant. A four-step pipeline
(`Get-SPIdentityInventory` → `New-SPIdentityMap` → `Test-SPIdentityMap` → `Copy-SPIdentity`)
with a hand-editable mapping CSV and fail-closed validation before anything is created; users
arrive disabled with throwaway passwords (passwords/MFA/licenses never migrate — explicit
handover), and the emitted principal map feeds `Copy-SPPermissions`. OpenGateSP's answer to
ShareGate's *Copy identities* (their Entra ID Migration, launched June 2026, still preview).
CLI + MCP only. See [docs/14](14-identity-copy.md).
- **Phase 11 — environments + sign-in (shipped, 0.14.0):** ShareGate-style *Connect to your
environments* — named tenant profiles (`Connect-SPTool -Environment`, GUI Environments
handover), and the emitted principal map feeds `Copy-SPPermissions`. Cross-tenant identity
copy for Entra ID users and groups. CLI + MCP only. See [docs/14](14-identity-copy.md).
- **Phase 11 — environments + sign-in (shipped, 0.14.0):** saved *environments* — named tenant
profiles (`Connect-SPTool -Environment`, GUI Environments
manager with one-click switching and sign-out), opt-in stay-signed-in (`-PersistLogin`),
Windows-native SSO (`-OSLogin`, WAM broker with automatic browser fallback), and the
device-code prompt surfaced in the GUI. Also the migration correctness wave (failures can
Expand Down
Loading