Switch your Windows network configuration in one click.
Save IPv4 profiles per adapter and apply them from the app, the tray, a hotkey, the command line or automatically on WiFi.
Download · Features · Usage · Build · 🇪🇸 Español
Changing a static IP in Windows means digging through Control Panel → Network Connections → Properties → IPv4 every time. If you move between an office LAN, a lab with fixed addresses and your home DHCP, IP Switch turns that into one click — and if a profile leaves you without connectivity, it rolls back automatically.
- No installation. A single ~3 MB
.exeon .NET Framework 4.8, already part of Windows 10 (1903+) and 11. - Safe. Connectivity is verified after every change, with an automatic rollback countdown.
- Native look. Fluent design with Mica, light and dark themes, like Windows 11 Settings.
- Private. No telemetry; the only optional connection is the update check against GitHub.
|
Profiles
|
Apply anywhere
|
|
Adapters
|
App
|
![]() Profiles — apply with ▶ or a double-click |
![]() Compact view — one button per profile |
![]() Settings |
![]() Profile editor |
- Download
IPSwitch.exefrom the latest release. - Put it anywhere (e.g.
C:\Tools\or a USB drive) and run it. Accept the UAC prompt: changing the IP configuration requires administrator rights. Opening it again while it runs just brings it to the front, without another prompt. - On Home, click Save as profile on an adapter, or create one in Profiles → Add profile.
Tip
Windows SmartScreen may warn about an unsigned executable: click More info → Run anyway. You can verify the download with the IPSwitch.exe.sha256 file published with each release.
Requirements: Windows 10 version 1903 or later, or Windows 11 (tested on x64) · .NET Framework 4.8 (built in) · administrator rights.
Uninstall: turn off Start with Windows in Settings if you enabled it, then delete IPSwitch.exe and the %AppData%\IPSwitch folder.
- IP Switch takes a snapshot of the adapter's current configuration.
- It applies the profile with
netsh(address, additional IPs and DNS). - It pings the gateway (or a host of your choice) for a few seconds.
- If nothing answers, it asks "Keep this network configuration?" and restores the previous one when the countdown ends.
- Compact view — title-bar button next to minimize. A small, resizable window with one button per profile; it can stay on top and fade when inactive. Its height always fits all your adapters.
- Tray icon — click for the quick panel, double-click for the window, right-click for Apply profile ▸. The tooltip shows the active profile or IP of each adapter.
In the profile editor (Advanced) you can assign a global hotkey with at least one modifier, and — for WiFi adapters — an SSID that applies the profile automatically when you join that network.
IPSwitch.exe [options]
--apply "Name" Applies the profile and exits (0 = success, 1 = error, 2 = not found)
--minimized Starts hidden in the notification area
--compact Starts in the compact view
--help Shows the help
--apply works in scripts and Task Scheduler. If IP Switch is already running, the request is forwarded to it and the exit code is returned. Create desktop shortcut (⋯ menu of a profile) builds a shortcut that runs --apply for that profile.
With Check for updates on, IP Switch shows a bar at the top of the window when a new release is published (and a dot on the Settings icon); Update now downloads the new IPSwitch.exe from GitHub, verifies its SHA-256, replaces the executable in place and restarts — your profiles and settings stay in %AppData%\IPSwitch. If anything fails, the current version keeps running unchanged.
| Section | Options |
|---|---|
| Appearance | Theme, language, always on top, fade the compact view |
| Profiles page | Visible columns |
| Connection check | On/off, host to check (empty = gateway), time before rolling back |
| System & behavior | Start with Windows, tray click action, close to the notification area, confirm before exiting |
| About | Updates (check at startup, one-click update), data folder, report a bug or suggest an improvement |
| File | Content |
|---|---|
%AppData%\IPSwitch\profiles.json |
Profiles |
%AppData%\IPSwitch\settings.json |
Settings, including hidden adapters |
- Data is never stored next to the executable, so the
.execan be replaced or live in a read-only folder. Data from older portable builds (IPSwitch-datanext to the.exe) is copied on first run. - The
IPSWITCH_DATA_DIRenvironment variable overrides the folder (fully portable setups, tests). - IP Switch collects nothing. The optional update check queries
api.github.com; a new version is only downloaded when you click Update now, and it is installed only if its SHA-256 matches the one published with the release. Feedback opens GitHub in your browser; nothing is sent automatically.
Requirements: Windows, .NET SDK 8 or later and the .NET Framework 4.8 targeting pack (included with Visual Studio).
git clone https://github.com/magancete/IP-Switch.git
cd IP-Switch
./build.ps1 # resource checks + Release build (0 warnings) + tests → artifacts\IPSwitch.exeOpen IPSwitch.slnx in Visual Studio 2022 17.13+ to work in the IDE. To try the UI without UAC (network changes will fail) and with throwaway data:
$env:IPSWITCH_NO_ELEVATION = '1'; $env:IPSWITCH_DATA_DIR = "$env:TEMP\ipswitch-dev"; .\artifacts\IPSwitch.exeIP-Switch/
├── src/IPSwitch/ WPF application (Windows, Pages, Controls, ViewModels, Models, Services, Resources)
├── tests/IPSwitch.Tests/ Unit tests (xUnit)
├── tests/Integration/ Administrator integration tests against a real adapter
├── tools/ Resource checks and icon export (vector AppIcon.xaml → favicon.ico)
├── docs/ Architecture and screenshots
├── .github/ CI workflow, issue forms and pull request template
├── build.ps1 Build, test and package
└── Directory.Build.props Version and settings shared by every project
| Type | Command | Coverage |
|---|---|---|
| Unit | dotnet test |
IP validation, generated netsh commands, hotkeys, command line, single instance, data folder, adapter snapshot, profiles, import/export, updates |
| Resources | ./tools/Check-Resources.ps1 |
English/Spanish keys match; every text and icon used exists |
| Integration | tests/Integration/Invoke-AdminIntegrationTests.ps1 |
Real changes on a test adapter (static, secondary IP, DNS, DHCP, rollback, enable/disable, startup task, --apply, hotkeys), restored at the end |
CI (GitHub Actions) runs the resource checks, the build with warnings as errors and the unit tests on every push and pull request. Pushing a vX.Y.Z tag attaches the executable and its SHA-256 to the release.
More detail in docs/ARCHITECTURE.md.
| Problem | Solution |
|---|---|
"Could not apply…" with a netsh message |
The message comes from Windows. Check that the IP is not used by another adapter and the adapter is enabled. |
| It rolls back although the network works | The gateway does not answer ping. Set another host in Settings → Host to check or turn the check off. |
| A hotkey does not work | Another application uses it (you will see a warning). Choose another one. |
It does not start with Windows, or a profile shortcut fails, after moving the .exe |
Open it once from the new location: the startup task and the desktop shortcuts are updated automatically. |
| An adapter is missing | It may be hidden (Show hidden adapters) or be an excluded virtual adapter. |
| Nothing happens when launching it | It is already running: look for its icon in the notification area. |
Bug reports, ideas and pull requests are welcome — see CONTRIBUTING.md. From the app, Settings → About → Report a bug or suggest an improvement opens the issue chooser with ready-made forms. Security issues: see SECURITY.md.
MIT © 2026 Carlos Magán. Embedded dependencies, all MIT-licensed: WPF-UI, CommunityToolkit.Mvvm and Costura.Fody.



