defaults-rs 0.1.0

Near drop-in replacement for the macOS defaults CLI with API bindings for Rust
docs.rs failed to build defaults-rs-0.1.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.

defaults-rs

Near drop-in replacement for the macOS defaults CLI with API bindings for Rust

[!IMPORTANT] Consider starring the project if you like it! It really supports and motivates me to make more projects like these.


Key Features

  • CLI (drs): Drop-in replacement for the defaults command on macOS.
  • Async Rust API: Read, write, delete, rename, import/export, and inspect preferences from Rust code.
  • Supports: User and global domains, all plist value types (int, float, bool, string, arrays, dictionaries).
  • Apple-style Output: Pretty-prints plist data in the familiar macOS format.
  • Binary & XML Plist: Handles both binary and XML plist files transparently.
  • Extensible: Designed for easy addition of new commands and value types.

Installation

Using brew:

brew install hitblast/tap/drs

Using cargo:

cargo install defaults-rs

Manual Build & Install

git clone https://github.com/hitblast/defaults-rs.git
cd defaults-rs
cargo install --path .

CLI Usage

The CLI command is drs. It closely mimics the original defaults tool.

Examples

Read a key

drs read com.apple.dock tilesize

Write a key

drs write com.apple.dock tilesize --type int 48

Delete a key

drs delete com.apple.dock tilesize

Read the whole domain

drs read com.apple.dock

Use the global domain

drs read -g com.apple.keyboard.fnState
drs write -g InitialKeyRepeat --type int 25

Read the type of a key

drs read-type com.apple.dock tilesize

Rename a key

drs rename com.apple.dock oldKey newKey

Import/Export a domain

drs import com.apple.dock ./mysettings.plist
drs export com.apple.dock ./backup.plist

Rust API

To access the developer-side API for defaults-rs, run the following command and add it to your Cargo project:

cargo add defaults-rs

Example

use defaults_rs::{Preferences, Domain, PrefValue};

#[tokio::main]
async fn main() {
    // Read a value
    let value = Preferences::read(Domain::User("com.apple.dock".into()), Some("tilesize")).await.unwrap();

    // Write a value
    Preferences::write(Domain::User("com.apple.dock".into()), "tilesize", PrefValue::Integer(48)).await.unwrap();

    // Delete a key
    Preferences::delete(Domain::User("com.apple.dock".into()), Some("tilesize")).await.unwrap();
}

License

This project has been licensed under the MIT License.