A beautiful, production-ready web application for decoding protobuf feeds using custom bindings files with advanced features including multiple output formats, decode history, and real-time streaming.
- Dual Bindings Input: Upload .proto files via drag-and-drop OR fetch them from URLs
- Message Type Selection: Automatically discover and select from available message types in your protobuf schema
- Feed Decoding: Decode protobuf feeds from any URL with proper error handling
- Multiple Output Formats: Export decoded data as JSON, XML, or human-readable text
- Download Capability: Download decoded output with automatic file naming based on format
- Decode History: localStorage-based session history with ability to view and restore previous decodes
- Real-time Streaming: WebSocket-powered continuous feed decoding with configurable update intervals
- Beautiful UI: Material Design-inspired interface with dark mode support
-
Provide Protobuf Bindings:
- Option A: Upload a .proto file using drag-and-drop or file picker
- Option B: Enter a URL to your .proto file
-
Load Message Types (Optional):
- Click the refresh button to fetch available message types from your bindings
- Select the appropriate message type from the dropdown
- Or manually enter a message type name
-
Enter Feed URL:
- Provide the URL of the protobuf feed you want to decode
-
Choose Output Format:
- Select from JSON, XML, or Text format
- Format can be changed after decoding
-
Decode:
- Click "Decode Once" button for single decode
- View the decoded output in the text area below
- Download or copy output to clipboard
- Configure your bindings and feed URL as usual
- Set the update interval (100ms - 10000ms)
- Toggle the "Real-time Streaming" switch
- Watch live updates as the feed is continuously decoded
- Toggle off to stop streaming
- Click the "History" button in the header to view past sessions
- Click on any history item to restore that decode session
- History shows: timestamp, format, decode time, feed URL, and message type
- Clear all history with the "Clear All" button
- History is stored locally and persists across browser sessions (up to 50 items)
- Frontend: React + TypeScript + Tailwind CSS + Shadcn UI
- Backend: Express.js + protobufjs + WebSocket (ws)
- File uploads: Multer
- HTTP client: Axios
- Data conversion: xml-js for XML output
POST /api/message-types- Get available message types from bindingsPOST /api/decode- Decode protobuf feed with format support (JSON/XML/Text)WS /ws/stream- WebSocket endpoint for real-time streaming decode
- Recursive namespace and nested message type discovery
- Support for complex .proto files with packages and nested structures
- Multiple output format conversion (JSON, XML, human-readable text)
- File download with automatic format-based naming
- localStorage-based decode history (last 50 sessions)
- WebSocket streaming with configurable interval updates
- Comprehensive error handling and validation
- Dark/light theme with localStorage persistence
- Responsive design for mobile and desktop
- Beautiful loading and error states
The application uses a stateless request/response model with no database requirement. All protobuf decoding happens in-memory on the server.
- Single page application at
/ - Theme provider with dark mode support
- React Query for API state management
- Shadcn UI components for consistent design
- Fetches bindings from files or URLs
- Recursively discovers all message types (including nested)
- Attempts automatic decoding or uses specified message type
- Returns formatted JSON with decode timing information
-
Multiple Output Formats:
- Added JSON, XML, and human-readable text output formats
- Format selector with live preview
- Backend conversion logic for all formats
-
Download Functionality:
- Download button for exporting decoded output
- Automatic file naming with timestamp and format extension
- Supports all output formats (JSON, XML, TXT)
-
Decode History:
- localStorage-based session history
- Stores last 50 decode sessions
- Sidebar panel with history list
- Click to restore previous sessions
- Shows timestamp, format, decode time, feed URL, and message type
- Clear all functionality
-
Real-time Streaming:
- WebSocket-powered continuous decoding
- Configurable update interval (100ms - 10000ms)
- Toggle switch to start/stop streaming
- Live output updates
- Proper WebSocket cleanup on disconnect
- Fixed recursive message type collection to handle packages and nested message structures
- Added message type selection UI with automatic type loading
- Improved error messages with available types listing
- Added state clearing when bindings source changes to prevent stale data