Child-friendly, parent-guided Wayland desktop environment alternative that puts parents, not platforms, in control
Find a file
2025-12-30 10:00:24 -05:00
.github/workflows Fix CI 2025-12-29 16:57:26 -05:00
crates Refresh activity list when change in time modifies it 2025-12-30 10:00:24 -05:00
docs/ai/history Clean up README structure 2025-12-29 12:38:38 -05:00
.gitignore Make launcher runnable 2025-12-27 10:50:54 -05:00
Cargo.lock Implement ~ expansion in args 2025-12-30 09:34:21 -05:00
Cargo.toml Make launcher runnable 2025-12-27 10:50:54 -05:00
clippy.toml Add CI 2025-12-28 22:07:23 -05:00
config.example.toml Add examples showing custom icon images 2025-12-30 09:05:16 -05:00
CONTRIBUTING.md Lint: electric boogaloo 2025-12-29 17:51:55 -05:00
LICENSE.md Design goals README 2025-12-21 23:52:15 -05:00
README.md Add crate documentation 2025-12-29 16:54:57 -05:00
run-dev WIP: fix running Minecraft 2025-12-27 14:18:32 -05:00
sway.conf :%s/daemon/service/g 2025-12-29 12:52:03 -05:00

shepherd-launcher

A child-friendly, parent-guided launcher for Wayland, allowing supervised access to applications and content that you define.

Its primary goal is to return control of child-focused computing to parents, not software or hardware vendors, by providing:

  • the ease-of-use of game consoles
  • access to any application that can be run, emulated, or virtualized in desktop Linux
  • with granular access controls inspired by and exceeding those in iOS Screen Time

While this repository provides some examples for existing software packages (including non-free software and abandonware), shepherd-launcher is non-prescriptive: as the end user, you are free to use them, not use them, or write your own.

Screenshots

Home screen

TODO: home screen at different times (bedtime vs afternoon) showing different applications

Time limits

TODO: GIF or video of GCompris a few seconds from closing, emphasizing:

  • Countdown clock
  • Warning messaging
  • Automatic close at end of time
  • Icon deliberately missing afterwards -- cooldown

"access to any application that can be run, emulated, or virtualized"

TODO: show the following running with some subset of the above features highlighted:

  • Minecraft
  • Steam games (World of Goo, Portal 2)
  • ScummVM games (Putt Putt, Secret of Monkey Island)
  • Media

Contributions are welcome for improvements and not yet implemented backends, such as:

  • Content-aware media player [TODO: link to issue]
  • Pre-booted Steam to improve launch time [TODO: link to issue]
  • Android apps via Waydroid, including pre-booting Android if necessary [TODO: link to issue]
  • Legacy Win9x via DOSBox, QEMU, or PCem, including scripts to create a boot-to-app image [TODO: link to issue]
  • Chrome, including strict sandboxing and support for firewall rules [TODO: link to issue]

Core concepts

  • Launcher-first: only one foreground activity at a time
  • Time-scoped execution: applications are granted time slices, not unlimited sessions
  • Parent-defined policy: rules live outside the application being run
  • Wrappers, not patches: existing software is sandboxed, not modified
  • Revocable access: sessions end predictably and enforceably

Non-goals

  • Modifying or patching third-party applications
  • Circumventing DRM or platform protections
  • Replacing parental involvement with automation

Installation

shepherd-launcher is pre-alpha and in active development. As such, end-user binaries and installation instructions are not yet available.

See CONTRIBUTING.md for how to run in development.

Contributions are welcome for:

  • a CI step that generates production binaries [TODO: link to issue]
  • an installation script [TODO: link to issue]

Example configuration

For the Minecraft example shown above:

# Minecraft via mc-installer snap
# Ubuntu: sudo snap install mc-installer
[[entries]]
id = "minecraft"
label = "Minecraft"
icon = "minecraft"

[entries.kind]
type = "snap"
snap_name = "mc-installer"

[entries.availability]
[[entries.availability.windows]]
days = "weekdays"
start = "15:00"
end = "18:00"

[[entries.availability.windows]]
days = "weekends"
start = "10:00"
end = "20:00"

[entries.limits]
max_run_seconds = 1800  # 30 minutes (roughly 3 in-game days)
daily_quota_seconds = 3600  # 1 hour per day
cooldown_seconds = 600  # 10 minute cooldown

[[entries.warnings]]
seconds_before = 600
severity = "info"
message = "10 minutes left - start wrapping up!"

[[entries.warnings]]
seconds_before = 120
severity = "warn"
message = "2 minutes remaining - save your game!"

[[entries.warnings]]
seconds_before = 30
severity = "critical"
message = "30 seconds! Save NOW!"

See config.example.toml for more.

Development

See CONTRIBUTING.md

Written in 2025, responsibly

This project stands on the shoulders of giants in systems software and compatibility infrastructure:

  • Wayland and Sway
  • Rust
  • Snap
  • Proton and WINE

This project was written with the assistance of generative AI-based coding agents. Substantial prompts and design docs provided to agents are disclosed in docs/ai