A Stream Deck plugin that allows you to create custom forms and make HTTP API calls with configurable endpoints and output handling.
- Form Builder: Create custom forms with various field types (text, email, password, number, textarea, select, checkbox, date, URL)
- HTTP API Integration: Make requests to any HTTP API with configurable methods (GET, POST, PUT, PATCH, DELETE)
- Flexible Field Configuration: Each field can be sent as either query parameters or in the request body (JSON)
- Custom Headers: Add any number of key/value headers to every request
- Authentication:
- None
- OAuth2/OpenID Authorization Code with a built‑in local callback server (opens your default browser)
- OAuth2 Client Credentials (Basic or Body auth)
- Optional offline_access support; if a refresh_token is available, access tokens are refreshed automatically
- Output Handling: Choose between status messages or modal display of API responses
- JSON Viewer: When modal output is selected and the response is JSON, results are rendered with
react18-json-view
(copy supported) - Electron-based Runtime: Native desktop application for reliable form display and API communication
- WebSocket Communication: Direct communication with Stream Deck software using the official SDK protocol
- React-based Setup: Modern, intuitive setup interface built with React and Tailwind CSS
- Cross-platform: Supports Windows and macOS
- Stream Deck software (minimum version 4.1)
- Node.js (version 16 or higher)
- npm or yarn
- Electron (automatically installed via npm)
This project is typically built inside Docker (even on WSL/Linux) so you can get a Windows portable executable reliably.
- Install dependencies:
npm install
- Build everything (web + Electron via Docker/Wine):
npm run build-electron-docker
- Package the plugin:
npm run package
- The packaged plugin will be in
release/
.
- For stream dock, you have to unzip the package.
-
Clone this repository on Windows:
git clone https://github.com/leandro-menezes/stream-deck-form-builder.git cd stream-deck-form-builder
-
Install dependencies:
npm install
-
Build the web components:
npm run build
-
Build the Electron executable (or use Docker flow above):
npm run build-electron
-
Package the plugin:
npm run package
-
The packaged plugin will be available in the
release/
directory ascom.leandro-menezes.formbuilder.sdPlugin.streamDeckPlugin
- For stream dock, you have to unzip the package.
- Open the Stream Deck / Ajazz Stream Dock software
- Go to the Stream Deck Store / Settings
- Click on the gear icon in the top right corner
- Select "Open Plugin Folder"
-
- For Stream deck: Copy the packaged plugin file to the plugins directory
- For Ajazz Stream Dock: Unzip the package plugin to the plugins directory
- Restart the Stream Deck software / Ajazz Stream Dock
The Stream Deck Form Builder consists of several components:
- Electron App (
FormBuilder.exe
): The main executable that handles Stream Deck communication via WebSocket - Web Setup Interface: React-based configuration wizard for setting up forms
- Form Modal: Electron window that displays the form and handles submissions
- Stream Deck Integration: WebSocket communication using the official Stream Deck SDK protocol
✅ Plugin successfully built and packaged!
The plugin package (com.leandro-menezes.formbuilder.sdPlugin.streamDeckPlugin
) includes:
- ✅ Windows Electron executable (169MB) - portable, no installation required
- ✅ All web components (React setup, form modal, property inspector)
- ✅ Stream Deck SDK integration with WebSocket communication
- ✅ Complete configuration system with step-by-step wizard
- ✅ HTTP API handling with flexible parameter support (query params + JSON body)
- ✅ Proper icon (32x32 PNG format)
- ✅ Cross-platform build support (Docker + Wine)
🐳 Docker + Wine Cross-Compilation: For building Windows executables from Linux/WSL, use the Docker approach:
npm run build-electron-docker
This method uses the official electronuserland/builder:wine
Docker image which provides a clean Wine environment for cross-compilation without requiring Wine to be installed on your system.
- Add the Form Builder action to your Stream Deck
- Right-click the button and select "Open Setup"
- Configure your form using the step-by-step wizard:
- Basic Info: Set form title, API URL, and HTTP method
- Form Fields: Add and configure input fields
- Output Settings: Choose how to display API responses
- Headers: Add custom headers to be sent with each request
- Authentication: None, OAuth2 Authorization Code (with local callback server + default browser), or Client Credentials
- Start/Stop the local callback server from the Setup page
- Redirect URL is generated for you and can be copied from the UI
- Review: Verify your configuration
For each field, you can configure:
- Name: Internal identifier (used in API requests)
- Label: Display name for users
- Description: Help text shown to users
- Type: Input type (text, email, password, etc.)
- Required: Whether the field must be filled
- Send As: Query parameter or request body
- Options: For select fields, define available options
- Press the Stream Deck button to open the form modal
- Fill out the form with your data
- Submit to make the API call
- View the response based on your output configuration
- If modal output and the response is JSON, it will be rendered using
react18-json-view
- If modal output and the response is JSON, it will be rendered using
- In Setup → Auth, select OAuth 2.0 / OpenID - Authorization Code
- Click “Start callback server” to spin up the localhost redirect
- Click “Login with provider” to open your default browser
- After the provider redirects back, the code is captured and the UI updates
- If
offline_access
is granted and saved, tokens will refresh automatically when needed
src/
├── components/ # React components
│ ├── App.jsx # Main application
│ ├── Setup.jsx # Configuration wizard
│ ├── FormBuilder.jsx # Field configuration
│ ├── FormModal.jsx # Form display modal
│ └── PropertyInspector.jsx # Stream Deck PI
├── js/ # JavaScript entry points
├── css/ # Stylesheets
├── assets/ # Icons and images
└── manifest.json # Plugin manifest
npm run build-electron-docker
- Build Electron (Windows target) in Docker + Wine
The plugin is built with modern web technologies and can be easily customized:
- Styling: Modify Tailwind CSS classes or add custom CSS
- Components: Extend or modify React components
- Functionality: Add new field types or HTTP methods
- Integration: Connect to different APIs or services
URL: https://api.example.com/users
Method: POST
Fields:
- name: "username" (body)
- name: "email" (body)
- name: "api_key" (query)
URL: https://api.example.com/search
Method: GET
Fields:
- name: "query" (query)
- name: "limit" (query)
- name: "offset" (query)
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
MIT License - see LICENSE file for details
For issues and questions:
- Create an issue on GitHub
- Check the documentation
- Review the example configurations
- Initial release
- Form builder with multiple field types
- HTTP API integration
- React-based setup interface
- Cross-platform support
- This app implements the Stream Deck plugin communication per Elgato’s specifications, but at the moment it has been tested only on Windows.
- Hardware tested: Ajazz Stream Dock. Other Stream Deck–compatible devices should work, but haven’t been validated yet.