Tauri command surface
Tauri command surface
All commands are Rust #[tauri::command] functions. The frontend calls them via invoke().
Playback
play_track(source: PlaySource): Promise<void>
pause(): Promise<void>
resume(): Promise<void>
seek(position_secs: number): Promise<void> // float, seconds from start
set_volume(level: number): Promise<void> // 0.0–1.0
stop(): Promise<void>
advance_queue(): Promise<void> // skip to next track
get_playback_state(): Promise<PlaybackState>
interface PlaySource {
plugin_id: string;
content_id: string;
metadata: TrackStub; // pass metadata so engine can emit track_changed immediately
// without waiting for plugin round-trip
}
The engine resolves the stream URL via Plugin Runtime internally. The frontend never passes a raw URL directly.
Queue
queue_add(item: TrackStub, position?: number): Promise<void>
queue_remove(index: number): Promise<void>
queue_reorder(from: number, to: number): Promise<void>
queue_clear(): Promise<void>
queue_get(): Promise<QueueState>
Library
library_save_track(track: TrackStub, plugin_id: string, content_id: string): Promise<Track>
library_remove_track(id: string): Promise<void>
library_get_track(id: string): Promise<Track | null>
library_list_tracks(offset: number, limit: number): Promise<Track[]>
library_search(query: string): Promise<Track[]>
playlist_create(name: string, description?: string): Promise<Playlist>
playlist_delete(id: string): Promise<void>
playlist_add_track(playlist_id: string, track_id: string): Promise<void>
playlist_remove_track(playlist_id: string, track_id: string): Promise<void>
playlist_reorder(playlist_id: string, track_ids: string[]): Promise<void>
playlist_get(id: string): Promise<Playlist>
playlist_list(): Promise<Playlist[]>
history_get(limit: number): Promise<Track[]>
history_clear(): Promise<void>
favorites_add(track_id: string): Promise<void>
favorites_remove(track_id: string): Promise<void>
favorites_list(): Promise<Track[]>
Search
start_search(query: string): Promise<string> // returns query_id
cancel_search(): Promise<void>
set_search_config(config: SearchConfig): Promise<void>
Plugin management
get_plugins(): Promise<PluginInfo[]>
get_plugin_logs(plugin_id: string): Promise<string> // last N lines
No enable/disable commands in v1 — no plugin settings UI (see ADR-007).
References
- FR-CORE-1 (playback), FR-CORE-2 (queue), FR-CORE-3 (library), FR-CORE-4 (search)
- ADR-007 (search manager), ADR-010 (queue management)