Skip to main content
Tauri commands for managing courses, steps, and navigation state.

course_import

Imports a course from a URL (GitHub or HTTP).
source_url
string
required
Course URL. Supports:
  • https://github.com/owner/repo
  • https://github.com/owner/repo/tree/branch/path
  • https://example.com/path/handhold.yaml
result
ImportResult
required
Discriminated union with variants:
  • { kind: 'ok', course: CourseRecord }
  • { kind: 'invalidUrl' }
  • { kind: 'notFound' }
  • { kind: 'noManifest' }
  • { kind: 'badManifest', reason: string }
  • { kind: 'alreadyExists' }
  • { kind: 'downloadFailed', reason: string }
const result = await invoke<ImportResult>('course_import', {
  sourceUrl: 'https://github.com/user/my-course'
});

if (result.kind === 'ok') {
  console.log('Imported:', result.course.title);
}

course_list

Returns all imported courses.
courses
CourseRecord[]
required
Array of course metadata records
const courses = await invoke<CourseRecord[]>('course_list');

CourseRecord

id
string
required
Unique course identifier (hash of source URL)
sourceUrl
string
required
Original import URL
localPath
string
required
Absolute path to course directory
title
string
required
Course title from manifest
description
string
required
Course description
stepCount
number
required
Total number of steps
addedAt
number
required
Unix timestamp (milliseconds) when course was imported
completedSteps
number
required
Number of completed steps
tags
string[]
required
Course tags
Full-text search across course titles and descriptions.
query
string
required
Search query (FTS5 syntax)
results
CourseRecord[]
required
Matching courses
const results = await invoke<CourseRecord[]>('course_search', {
  query: 'algorithms'
});

course_tags

Returns all unique tags across imported courses.
tags
string[]
required
Sorted array of tag names

course_by_tag

Returns courses with a specific tag.
tag
string
required
Tag name
courses
CourseRecord[]
required

course_delete

Deletes a course from the database and optionally removes workspace files.
id
string
required
Course ID
delete_workspaces
boolean
required
If true, deletes lab workspaces for this course
await invoke('course_delete', {
  id: courseId,
  deleteWorkspaces: true
});

course_get

Returns a single course by ID.
id
string
required
course
CourseRecord
required

course_manifest

Returns the parsed handhold.yaml manifest for a course.
id
string
required
manifest
CourseManifest
required
Manifest with resolved dependencies for current platform

CourseManifest

title
string
required
description
string
required
tags
string[]
required
steps
ManifestStep[]
required
dependencies
CourseDependency[]
required

ManifestStep

kind
'lesson' | 'lab'
required
title
string
required
path
string
required
Relative path to lesson markdown or lab directory

CourseDependency

name
string
required
Dependency name (e.g., 'Node.js')
check
string
required
Shell command to verify installation (e.g., 'node --version')
install
string | null
required
Install command for current platform, or null if unavailable

course_read_step

Reads lesson markdown content.
id
string
required
Course ID
step_path
string
required
Path from manifest step (e.g., '01-intro/lesson.md')
content
string
required
Raw markdown content. If step_path is a directory, concatenates all .md files.

course_read_lab

Reads lab configuration and paths.
id
string
required
Course ID
step_path
string
required
Path to lab directory
labData
LabData
required

LabData

instructions
string
required
Content of INSTRUCTIONS.md
hasScaffold
boolean
required
True if scaffold/ directory exists
scaffoldPath
string
required
Absolute path to scaffold directory
hasSolution
boolean
required
True if solution/ directory exists
solutionPath
string
required
Absolute path to solution directory
labDirPath
string
required
Absolute path to lab directory
workspacePath
string
required
Absolute path to workspace (provisioning target)
config
RawLabConfig
required
Parsed lab.yaml configuration

step_complete

Marks a step as completed.
course_id
string
required
step_index
number
required
Zero-based step index

step_progress

Returns completed step indices for a course.
course_id
string
required
indices
number[]
required
Array of completed step indices

slide_position_save

Persists current slide position for a lesson step.
course_id
string
required
step_index
number
required
slide_index
number
required
slide_count
number | null
Total slide count (updated only if provided)

slide_position_load

Loads saved slide position for a lesson step.
course_id
string
required
step_index
number
required
position
SlidePosition | null
required

SlidePosition

slideIndex
number
required
slideCount
number | null
required

slide_complete

Marks a specific slide as completed (for progress tracking).
course_id
string
required
step_index
number
required
slide_id
string
required

slide_completions

Returns completed slide IDs for a step.
course_id
string
required
step_index
number
required
slideIds
string[]
required

route_save

Persists current application route.
route
Route
required
Discriminated union:
  • { kind: 'browser' }
  • { kind: 'course', courseId: string, stepIndex: number }
  • { kind: 'editor', courseId: string }

route_load

Loads persisted application route.
route
Route
required
Last saved route, or { kind: 'browser' } if none exists

courses_dir_path

Returns absolute path to courses directory.
path
string
required

home_dir_path

Returns user home directory path.
path
string
required

course_sync

Scans courses directory and registers any new courses found locally.
result
SyncResult
required

SyncResult

added
number
required
Number of courses added to database
removed
number
required
Number of orphaned courses removed

Build docs developers (and LLMs) love