Is Meetily a Real-Time Application? Technical Architecture Analysis

Yes, Meetily is a real-time application that captures microphone and system audio concurrently, processes speech through voice-activity detection, and streams transcription results to a React frontend instantly via Tauri events.

Meetily is an open-source AI meeting assistant developed by Zackriya-Solutions that operates as a low-latency, event-driven desktop application. Built with a Rust-powered Tauri backend and a Next.js/React frontend, Meetily processes audio continuously rather than in batches, enabling live transcription updates during active meetings.

How Real-Time Audio Capture Works

Meetily achieves real-time performance through concurrent audio stream processing implemented in the Rust core. The system captures audio from multiple sources simultaneously and immediately funnels raw PCM frames into an asynchronous processing pipeline.

Concurrent Microphone and System Audio Capture

The application reads from both microphone and system audio devices in parallel. In audio/capture/microphone.rs and audio/capture/system.rs, the capture modules feed raw AudioChunk structures into audio/pipeline.rs via async channels. This concurrent approach ensures that both participant speech and system audio are captured without synchronization delays.

Real-Time Mixing and Voice-Activity Detection

Once audio enters the pipeline, audio/pipeline.rs handles synchronization of mic and system buffers, applies RMS-based ducking to balance audio levels, and executes voice-activity detection (VAD) to filter silence before transcription. The VAD implementation in audio/vad.rs analyzes frames on-the-fly, ensuring that only speech-containing segments proceed to the transcription engine, reducing unnecessary processing and latency.

Real-Time Transcription Processing

The transcription layer operates as a streaming pipeline where speech chunks are processed immediately upon detection, not collected into minutes-long batches.

Chunk Dispatch and Worker Pool Architecture

Each speech-only chunk is dispatched instantly to a transcription worker pool via an UnboundedSender. In audio/transcription/worker.rs, the start_transcription_task function receives chunks from the channel and spawns parallel worker tasks. The following code demonstrates the real-time hand-off:

// Inside start_transcription_task
while let Some(chunk) = receiver.recv().await {
    let queued = chunks_queued.fetch_add(1, Ordering::SeqCst) + 1;
    log::info!("📥 Dispatching chunk {} (total queued: {})", chunk.chunk_id, queued);
    work_sender.send(chunk).unwrap(); // Real-time hand-off
}

Workers call the selected transcription engine—whether Whisper, Parakeet, or a custom provider—per chunk, producing partial or final results as soon as the model finishes inference.

Event Emission to Frontend

Upon completing transcription, workers emit Tauri events immediately. The transcribe_chunk_with_provider function in audio/transcription/worker.rs emits transcript-update events containing timestamps, confidence scores, and partial flags. When speech is first detected, it emits a speech-detected event:

let update = TranscriptUpdate {
    text: transcript,
    timestamp: format_current_timestamp(),
    source: "Audio".to_string(),
    sequence_id,
    chunk_start_time: chunk_timestamp,
    is_partial,
    confidence: confidence_opt.unwrap_or(0.85),
    audio_start_time,
    audio_end_time,
    duration: chunk_duration,
};

app.emit("transcript-update", &update)?;

Frontend Integration for Live Updates

The Next.js/React frontend consumes these events through Tauri's event system without requiring page reloads. In frontend/src/app/page.tsx and related components, listeners attach to the Rust backend and update UI state instantly.

Consuming Real-Time Transcript Events

The frontend invokes the recording command and immediately begins listening for updates:

// Start recording session
await invoke('start_recording_with_devices_and_meeting', {
  mic_device_name: "Built-in Mic",
  system_device_name: "BlackHole 2ch",
  meeting_name: "Team Sync"
});

// Listen for live transcript updates
await listen<TranscriptUpdate>('transcript-update', e => {
  setTranscripts(prev => [...prev, e.payload]); // UI updates instantly
});

// Optional: show speech-detected UI cue
await listen('speech-detected', () => setHasSpeech(true));

These listeners are wired up in frontend/src-tauri/src/lib.rs, which registers the Tauri commands and event handlers that bridge the Rust backend and TypeScript frontend.

Core Files Enabling Real-Time Operation

Several specific source files implement the low-latency architecture:

Summary

Meetily qualifies as a real-time application through the following architectural characteristics:

  • Continuous audio capture from microphone and system sources via concurrent Rust streams
  • On-the-fly processing including mixing, RMS-based ducking, and voice-activity detection in audio/pipeline.rs
  • Immediate chunk dispatch to transcription workers using unbounded channels without batching delays
  • Instant event emission via Tauri's app.emit() system, delivering partial and final transcripts to the frontend
  • Live UI updates through React listeners that consume transcript-update events and render text without page reloads

Frequently Asked Questions

What makes Meetily real-time rather than batch-processing?

Meetily processes audio in chunks as small as a few seconds rather than waiting for recordings to complete. The audio/transcription/worker.rs file dispatches each speech segment to transcription engines immediately upon VAD detection, and the frontend receives updates via Tauri events within milliseconds of processing completion.

How does Meetily handle latency between audio capture and transcription display?

The architecture uses async channels and an UnboundedSender to move audio chunks from the capture pipeline to worker threads without blocking. The transcribe_chunk_with_provider function emits results immediately after inference, and the React frontend updates state synchronously upon receiving transcript-update events, typically achieving sub-second latency.

Can Meetily transcribe multiple audio sources simultaneously in real-time?

Yes. The system captures microphone and system audio concurrently through audio/capture/microphone.rs and audio/capture/system.rs, mixes them in audio/pipeline.rs, and processes the combined stream through a single real-time transcription pipeline, enabling live transcription of both local and remote meeting participants.

What technologies enable Meetily's real-time capabilities?

Meetily leverages Rust's async runtime for zero-cost concurrency in audio processing, Tauri's event system for low-latency frontend communication, and WebAssembly-compatible transcription engines (Whisper, Parakeet) that process chunks as they arrive rather than requiring complete audio files.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →