A Windows desktop board for Microsoft Teams presence and status messages across your chosen Entra groups.
The first-run setup includes an offline App registration guide. Follow it in the app, or read the full setup guide. It covers registration, permissions and consent, ID locations, and troubleshooting.
- Create an Entra app registration for your organization. Add a Mobile and desktop applications platform with redirect URI
http://localhost. - Add Microsoft Graph delegated permissions
GroupMember.Read.All,Presence.Read.All, andUser.ReadBasic.All. Have an administrator grant consent. - Launch TeamsIO and enter your tenant ID, application (client) ID, and one or more group object IDs. No client secret is needed.
- Sign in with an account in that tenant. The board shows direct user members of the selected groups, deduplicated across groups.
Right-click the board and choose Tenant, Client & Group IDs… to change the connection. Saving restarts the app and authenticates with the new settings. Double-click a name, or press Enter on a selected row, to open that person's Teams chat. Opening a chat does not send a message.
Connection settings are stored in %LOCALAPPDATA%\TeamsIO\connection.json. Window preferences, logs, cached authentication, and downloaded updates use TeamsIO-specific locations. The blank appsettings.example.json documents the connection file format; the app uses the setup dialog rather than modifying files in its installation directory.
Requires Windows and .NET 8 SDK.
dotnet test TeamsIO.sln
dotnet publish TeamsIO.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=trueCompile installer/TeamsIO_setup_script.iss using Inno Setup 6, then run installer/New-UpdatePackage.ps1. The installer has its own application ID and installation directory.
See the release procedure and security notes before publishing.
The right-click update action checks the latest stable public release in NVZLAB/TeamsIO. Each release must contain TeamsIO_Setup_<version>.exe and update.json generated by the packaging script. The release tag must be v<version> and match the project version and manifest. Release notes come from the GitHub release body. Downloads are checked against the manifest's SHA-256 before the user can launch setup. A repository without releases displays a normal “no release available” message.
The GitHub Actions workflow tests and packages tags matching v*, and creates a draft release for review. Publish the draft when ready for users to receive it.
Technical references: Teams chat deep links and GitHub Releases API.