##Click to Install:
A Blazor Server application designed for voice-controlled development and accessibility, integrating with Talon Voice and Cursorless for hands-free coding. It includes a To-Do section and maintains speech recognition database tables for enhanced voice coding functionality, such as custom IntelliSense and application launching. It also supports Talon command search/application launcher workflows so users can trigger app actions via voice.
- Latest release: View on GitHub Releases
- Latest Windows build: VoiceLauncherBlazor-win-x64.zip
git tag -a v0.0.10 -m "v0.0.10"; git push origin main; git push origin v0.0.10
- Full installation and startup instructions are in docs/root-markdown/INSTALL.md (recommended for end users).
- Extract
VoiceLauncherBlazor-win-x64.zip. - Make sure
voicelauncher-azure.dbis in the same folder asVoiceAdmin.exe(it is included in the published artifact). - Option A (recommended): run from the app folder with explicit absolute path:
cd C:\Users\<you>\Downloads\VoiceLauncherBlazor-win-x64\VoiceAdmin
setx ASPNETCORE_ENVIRONMENT Production
setx ConnectionStrings__DefaultConnection "Data Source=C:\Users\<you>\Downloads\VoiceLauncherBlazor-win-x64\VoiceAdmin\voicelauncher-azure.db"
\VoiceAdmin.exe- Option B (alternate): set the path from command line without editing the JSON:
cd C:\Users\<you>\Downloads\VoiceLauncherBlazor-win-x64\VoiceAdmin
$env:ASPNETCORE_ENVIRONMENT='Production'
$env:ConnectionStrings__DefaultConnection='Data Source=C:\Users\<you>\Downloads\VoiceLauncherBlazor-win-x64\VoiceAdmin\voicelauncher-azure.db'
.\VoiceAdmin.exe- If the database is in the same folder and the app is launched there, you can use the default
appsettings.jsonentry:
"ConnectionStrings": {
"DefaultConnection": "Data Source=voicelauncher-azure.db"
}No further editing of appsettings is required for standard ZIP-based release consumption.
- Voice Commands Management: Maintain database tables for speech recognition, enabling voice-triggered IntelliSense and commands in Visual Studio and VS Code.
If you use Talon Voice with custom handoff commands, you can configure an action to launch the WinForms app using an absolute path. Add this to your Talon action file (open_application.py or similar):
- Example Talon action file: docs/open_application_example.py
- Example Talon command spec file: docs/voice_admin_commands_example.talon
Add the action code:
from talon import Module, ui
mod = Module()
@mod.action_class
class Actions:
def run_application_voice_admin_windows_forms(self, searchTerm: str):
"""Runs VoiceAdmin WinForms app with the given search term"""
commandline = r"C:\Users\<you>\path\to\VoiceLauncherBlazor\WinFormsApp\bin\Release\net10.0-windows\WinFormsApp.exe"
args = [' /SearchIntelliSense', f'/{searchTerm}']
ui.launch(path=commandline, args=args)-
Replace
C:\Users\<you>\path\to\...with your actual install path. -
For different commands, define additional actions using your preferred argument form.
-
Start Talon and invoke action by voice with:
run application voice admin windows forms "<term>"(or your Talon phrase mapping). -
This can also be used as a quick way to search Talon commands and execute the corresponding VoiceAdmin launcher path in one step.
-
For a shared path override (no code edit each release), use a user config variable or wrap command in a batch/PowerShell script that sets the path before launching.
-
Application Launcher: Launch applications, folders, or websites by category or voice command.
-
To-Do Section: Basic task management.
-
Accessibility: Optimized for hands-free use with Talon Voice and Cursorless.
-
Hybrid Support: Includes a Blazor Hybrid WinForms project for desktop integration (Windows Only).
Below are examples of the WinForms Blazor hybrid application showing common workflows (click to enlarge):
-
Insert custom snippets view — copy or insert snippets from the SQLite database snippet store.
-
Launcher UI — filter and launch applications, websites or projects by voice.
-
Talon voice command search — browse and inspect Talon Voice commands.
- VoiceAdmin: Main Blazor Server application (replaces the deprecated
TalonVoiceCommandsServer). - WinFormsApp: Blazor Hybrid WinForms project (Windows-only).
- DataAccessLibrary: EF Core with SQLite for data access.
- TestProjectxUnit: Unit tests using XUnit.
Note: The
TalonVoiceCommandsServerproject is deprecated; its folder remains for historical reference and is marked withTalonVoiceCommandsServer/DEPRECATED.md.
- Frontend: Blazor Server with Bootstrap 5 for responsive UI.
- Backend: ASP.NET Core, Entity Framework Core.
- Database: SQLite.
- Tools: Talon Voice, Cursorless (VS Code extension), Visual Studio / VS Code.
- Testing: XUnit.
- Clone the repository:
git clone https://github.com/Mark-Phillipson/VoiceLauncherBlazor - Navigate to
VoiceAdmin/. - Restore dependencies:
dotnet restore - Build:
dotnet build --configuration Debug - Run:
dotnet run(runs on the configured port, checkappsettings.json).
For release/publishing instructions, see docs/root-markdown/PUBLISHING.md.
- Release details: release_details.md
- Uses SQLite by design for all release builds and local deploys (
voicelauncher-azure.db, bundled inVoiceAdmin/wwwroot). - Migrations: create scripts via EF Core commands (do not run
Update-Databasedirectly in production environments). - Example:
dotnet ef migrations add MigrationName
- Download the artifact for your platform:
- Windows:
VoiceLauncherBlazor-win-x64.zip - Linux:
VoiceLauncherBlazor-linux-x64.tar.gz - macOS (ARM64):
VoiceLauncherBlazor-osx-arm64.tar.gz
- Windows:
- Extract archive.
- Ensure
voicelauncher-azure.dbis in the same folder asVoiceAdminexecutable. - Run:
- Windows:
VoiceAdmin.exe - Linux/macOS:
chmod +x VoiceAdmin && ./VoiceAdmin
- Windows:
- Open browser to the configured app URL (as shown in logs from app startup).
-
Set environment variable
ConnectionStrings__DefaultConnectionto a filesystem path, e.g.:ConnectionStrings__DefaultConnection="Data Source=/path/to/voicelauncher-azure.db" -
Or edit
VoiceAdmin/appsettings.jsonto override the default connection.
This repository includes a helper tool to generate a sanitized copy of voicelauncher.db called voicelauncher-azure.db.
Steps:
- Ensure source DB exists and is current:
C:\Users\MPhil\AppData\Roaming\VoiceLauncher\voicelauncher.db
- Run the sanitizer from repo root:
dotnet run --project DatabaseSanitizer\DatabaseSanitizer.csproj -- --source "C:\Users\MPhil\AppData\Roaming\VoiceLauncher\voicelauncher.db" --output "C:\Users\MPhil\source\repos\VoiceLauncherBlazor\voicelauncher-azure.db"
- Verify report
DatabaseSanitizerReport.txtincludes:Total Categories in source: ...Sensitive Categories: ...Non-sensitive Categories: ...Copied all categories (including sensitive): ...Sensitive categories excluded from child entity copying: ...
- Sanity checks (SQL query):
SELECT COUNT(*) FROM Categories;SELECT COUNT(*) FROM Categories WHERE Sensitive=1;SELECT COUNT(*) FROM Categories WHERE Sensitive=0;
Rules enforced by sanitizer:
- keeps all categories but removes sensitive child records
- preserves FK relationships by filtering dependent rows before copy
- produces dummy transactions and values (fake data) for demo mode
- writes output DB and report for human review
Run tests: dotnet test in the TestProjectxUnit directory.
- Follow component structure: Use
.razorand.razor.csfiles. - Maintain accessibility with semantic HTML and
aria-attributes. - Test with Talon Voice and Cursorless.
- Use Bootstrap for styling.
See LICENSE file.
- We temporarily disabled automatic local-embeddings model downloads to avoid build failures when the Hugging Face URL is unreachable. See
docs/LOCAL_EMBEDDINGS.mdfor details and re-enable instructions.
To enable local embeddings for a single build:
dotnet build -c Release /p:UseLocalEmbeddings=trueOr set UseLocalEmbeddings to true in the specific project's .csproj (not recommended for CI).


